diff --git a/asn1c_defs/ANY.c b/asn1c_defs/ANY.c
new file mode 100644
index 0000000..0b81557
--- /dev/null
+++ b/asn1c_defs/ANY.c
@@ -0,0 +1,450 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ANY.h>
+#include <errno.h>
+
+asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = {
+	sizeof(ANY_t),
+	offsetof(ANY_t, _asn_ctx),
+	ASN_OSUBV_ANY
+};
+asn_TYPE_operation_t asn_OP_ANY = {
+	OCTET_STRING_free,
+	OCTET_STRING_print,
+	OCTET_STRING_compare,
+	OCTET_STRING_decode_ber,
+	OCTET_STRING_encode_der,
+	OCTET_STRING_decode_xer_hex,
+	ANY_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	0,
+	0,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0, 0, 0, 0,
+#else
+	ANY_decode_uper,
+	ANY_encode_uper,
+	ANY_decode_aper,
+	ANY_encode_aper,
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+	0,	/* Random fill is not defined for ANY type */
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_ANY = {
+	"ANY",
+	"ANY",
+	&asn_OP_ANY,
+	0, 0, 0, 0,
+	{ 0, 0, asn_generic_no_constraint },	/* No constraints */
+	0, 0,	/* No members */
+	&asn_SPC_ANY_specs,
+};
+
+#undef RETURN
+#define RETURN(_code)                       \
+    do {                                    \
+        asn_dec_rval_t tmprval;             \
+        tmprval.code = _code;               \
+        tmprval.consumed = consumed_myself; \
+        return tmprval;                     \
+    } while(0)
+
+asn_enc_rval_t
+ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+               enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+               void *app_key) {
+    if(flags & XER_F_CANONICAL) {
+		/*
+		 * Canonical XER-encoding of ANY type is not supported.
+		 */
+		ASN__ENCODE_FAILED;
+	}
+
+	/* Dump as binary */
+	return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key);
+}
+
+struct _callback_arg {
+	uint8_t *buffer;
+	size_t offset;
+	size_t size;
+};
+
+static int ANY__consume_bytes(const void *buffer, size_t size, void *key);
+
+int
+ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) {
+	struct _callback_arg arg;
+	asn_enc_rval_t erval = {0,0,0};
+
+	if(!st || !td) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	if(!sptr) {
+		if(st->buf) FREEMEM(st->buf);
+		st->size = 0;
+		return 0;
+	}
+
+	arg.offset = arg.size = 0;
+	arg.buffer = 0;
+
+	erval = der_encode(td, sptr, ANY__consume_bytes, &arg);
+	if(erval.encoded == -1) {
+		if(arg.buffer) FREEMEM(arg.buffer);
+		return -1;
+	}
+	assert((size_t)erval.encoded == arg.offset);
+
+	if(st->buf) FREEMEM(st->buf);
+	st->buf = arg.buffer;
+	st->size = arg.offset;
+
+	return 0;
+}
+
+int
+ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) {
+	uint8_t *buffer = NULL;
+	ssize_t erval;
+
+	if(!st || !td) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	if(!sptr) {
+		if(st->buf) FREEMEM(st->buf);
+		st->size = 0;
+		return 0;
+	}
+
+	erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer);
+
+	if(erval == -1) {
+		if(buffer) FREEMEM(buffer);
+		return -1;
+	}
+	assert((size_t)erval > 0);
+
+	if(st->buf) FREEMEM(st->buf);
+	st->buf = buffer;
+	st->size = erval;
+
+	return 0;
+}
+
+ANY_t *
+ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) {
+	ANY_t tmp;
+	ANY_t *st;
+
+	if(!td || !sptr) {
+		errno = EINVAL;
+		return 0;
+	}
+
+	memset(&tmp, 0, sizeof(tmp));
+
+	if(ANY_fromType(&tmp, td, sptr)) return 0;
+
+	st = (ANY_t *)CALLOC(1, sizeof(ANY_t));
+	if(st) {
+		*st = tmp;
+		return st;
+	} else {
+		FREEMEM(tmp.buf);
+		return 0;
+	}
+}
+
+ANY_t *
+ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) {
+	ANY_t tmp;
+	ANY_t *st;
+
+	if(!td || !sptr) {
+		errno = EINVAL;
+		return 0;
+	}
+
+	memset(&tmp, 0, sizeof(tmp));
+
+	if(ANY_fromType_aper(&tmp, td, sptr)) return 0;
+
+	st = (ANY_t *)CALLOC(1, sizeof(ANY_t));
+	if(st) {
+		*st = tmp;
+		return st;
+	} else {
+		FREEMEM(tmp.buf);
+		return 0;
+	}
+}
+
+int
+ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) {
+	asn_dec_rval_t rval;
+	void *newst = 0;
+
+	if(!st || !td || !struct_ptr) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	if(st->buf == 0) {
+		/* Nothing to convert, make it empty. */
+		*struct_ptr = (void *)0;
+		return 0;
+	}
+
+	rval = ber_decode(0, td, (void **)&newst, st->buf, st->size);
+	if(rval.code == RC_OK) {
+		*struct_ptr = newst;
+		return 0;
+	} else {
+		/* Remove possibly partially decoded data. */
+		ASN_STRUCT_FREE(*td, newst);
+		return -1;
+	}
+}
+
+int
+ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) {
+	asn_dec_rval_t rval;
+	void *newst = 0;
+
+	if(!st || !td || !struct_ptr) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	if(st->buf == 0) {
+		/* Nothing to convert, make it empty. */
+		*struct_ptr = (void *)0;
+		return 0;
+	}
+
+	rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0);
+	if(rval.code == RC_OK) {
+		*struct_ptr = newst;
+		return 0;
+	} else {
+		/* Remove possibly partially decoded data. */
+		ASN_STRUCT_FREE(*td, newst);
+		return -1;
+	}
+}
+
+static int ANY__consume_bytes(const void *buffer, size_t size, void *key) {
+	struct _callback_arg *arg = (struct _callback_arg *)key;
+
+	if((arg->offset + size) >= arg->size) {
+		size_t nsize = (arg->size ? arg->size << 2 : 16) + size;
+		void *p = REALLOC(arg->buffer, nsize);
+		if(!p) return -1;
+		arg->buffer = (uint8_t *)p;
+		arg->size = nsize;
+	}
+
+	memcpy(arg->buffer + arg->offset, buffer, size);
+	arg->offset += size;
+	assert(arg->offset < arg->size);
+
+	return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, void **sptr,
+                asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_ANY_specs;
+    size_t consumed_myself = 0;
+    int repeat;
+    ANY_t *st = (ANY_t *)*sptr;
+
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    /*
+     * Allocate the structure.
+     */
+    if(!st) {
+        st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) RETURN(RC_FAIL);
+    }
+
+    ASN_DEBUG("UPER Decoding ANY type");
+
+    st->size = 0;
+    do {
+        ssize_t raw_len;
+        ssize_t len_bytes;
+        ssize_t len_bits;
+        void *p;
+        int ret;
+
+        /* Get the PER length */
+        raw_len = uper_get_length(pd, -1, 0, &repeat);
+        if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+        ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len,
+                  repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len;
+        len_bits = len_bytes * 8;
+
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+        if(!p) RETURN(RC_FAIL);
+        st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+        consumed_myself += len_bits;
+        st->size += len_bytes;
+    } while(repeat);
+    st->buf[st->size] = 0; /* nul-terminate */
+
+    RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+ANY_encode_uper(const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, const void *sptr,
+                asn_per_outp_t *po) {
+    const ANY_t *st = (const ANY_t *)sptr;
+    asn_enc_rval_t er = {0, 0, 0};
+    const uint8_t *buf;
+    size_t size;
+    int ret;
+
+    (void)constraints;
+
+    if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED;
+
+    buf = st->buf;
+    size = st->size;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ret = per_put_many_bits(po, buf, may_save * 8);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save;
+        size -= may_save;
+        assert(!(may_save & 0x07) || !size);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size);
+
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, void **sptr,
+                asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_ANY_specs;
+    size_t consumed_myself = 0;
+    int repeat;
+    ANY_t *st = (ANY_t *)*sptr;
+
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    /*
+     * Allocate the structure.
+     */
+    if(!st) {
+        st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) RETURN(RC_FAIL);
+    }
+
+    ASN_DEBUG("APER Decoding ANY type");
+
+    st->size = 0;
+    do {
+        ssize_t raw_len;
+        ssize_t len_bytes;
+        ssize_t len_bits;
+        void *p;
+        int ret;
+
+        /* Get the PER length */
+        raw_len = aper_get_length(pd, -1, 0, &repeat);
+        if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+        ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len,
+                  repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len;
+        len_bits = len_bytes * 8;
+
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+        if(!p) RETURN(RC_FAIL);
+        st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+        consumed_myself += len_bits;
+        st->size += len_bytes;
+    } while(repeat);
+    st->buf[st->size] = 0; /* nul-terminate */
+
+    RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+ANY_encode_aper(const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, const void *sptr,
+                asn_per_outp_t *po) {
+    const ANY_t *st = (const ANY_t *)sptr;
+    asn_enc_rval_t er = {0, 0, 0};
+    const uint8_t *buf;
+    size_t size;
+    int ret;
+
+    (void)constraints;
+
+    if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED;
+
+    buf = st->buf;
+    size = st->size;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ret = per_put_many_bits(po, buf, may_save * 8);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save;
+        size -= may_save;
+        assert(!(may_save & 0x07) || !size);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size);
+
+    ASN__ENCODED_OK(er);
+}
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
diff --git a/asn1c_defs/ANY.h b/asn1c_defs/ANY.h
new file mode 100644
index 0000000..b30381f
--- /dev/null
+++ b/asn1c_defs/ANY.h
@@ -0,0 +1,65 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_TYPE_ANY_H
+#define ASN_TYPE_ANY_H
+
+#include <OCTET_STRING.h>	/* Implemented via OCTET STRING type */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ANY {
+	uint8_t *buf;	/* BER-encoded ANY contents */
+	int size;	/* Size of the above buffer */
+
+	asn_struct_ctx_t _asn_ctx;	/* Parsing across buffer boundaries */
+} ANY_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_ANY;
+extern asn_TYPE_operation_t asn_OP_ANY;
+extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
+
+asn_struct_free_f ANY_free;
+asn_struct_print_f ANY_print;
+ber_type_decoder_f ANY_decode_ber;
+der_type_encoder_f ANY_encode_der;
+xer_type_encoder_f ANY_encode_xer;
+per_type_decoder_f ANY_decode_uper;
+per_type_encoder_f ANY_encode_uper;
+per_type_decoder_f ANY_decode_aper;
+per_type_encoder_f ANY_encode_aper;
+
+#define ANY_free         OCTET_STRING_free
+#define ANY_print        OCTET_STRING_print
+#define ANY_compare      OCTET_STRING_compare
+#define ANY_constraint   asn_generic_no_constraint
+#define ANY_decode_ber   OCTET_STRING_decode_ber
+#define ANY_encode_der   OCTET_STRING_encode_der
+#define ANY_decode_xer   OCTET_STRING_decode_xer_hex
+
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/* Convert another ASN.1 type into the ANY. This implies DER encoding. */
+int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr);
+int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr);
+ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr);
+ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr);
+
+/* Convert the contents of the ANY type into the specified type. */
+int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+
+#define	ANY_fromBuf(s, buf, size)	OCTET_STRING_fromBuf((s), (buf), (size))
+#define	ANY_new_fromBuf(buf, size)	OCTET_STRING_new_fromBuf(	\
+						&asn_DEF_ANY, (buf), (size))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_TYPE_ANY_H */
diff --git a/asn1c_defs/BIT_STRING.c b/asn1c_defs/BIT_STRING.c
new file mode 100644
index 0000000..e8d7354
--- /dev/null
+++ b/asn1c_defs/BIT_STRING.c
@@ -0,0 +1,656 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <BIT_STRING.h>
+#include <asn_internal.h>
+
+/*
+ * BIT STRING basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = {
+	sizeof(BIT_STRING_t),
+	offsetof(BIT_STRING_t, _asn_ctx),
+	ASN_OSUBV_BIT
+};
+asn_TYPE_operation_t asn_OP_BIT_STRING = {
+	OCTET_STRING_free,         /* Implemented in terms of OCTET STRING */
+	BIT_STRING_print,
+	BIT_STRING_compare,
+	OCTET_STRING_decode_ber,   /* Implemented in terms of OCTET STRING */
+	OCTET_STRING_encode_der,   /* Implemented in terms of OCTET STRING */
+	OCTET_STRING_decode_xer_binary,
+	BIT_STRING_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	BIT_STRING_decode_oer,
+	BIT_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	BIT_STRING_decode_uper,	/* Unaligned PER decoder */
+	BIT_STRING_encode_uper,	/* Unaligned PER encoder */
+	OCTET_STRING_decode_aper,	/* Aligned PER decoder */
+	OCTET_STRING_encode_aper,	/* Aligned PER encoder */
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+	BIT_STRING_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_BIT_STRING = {
+	"BIT STRING",
+	"BIT_STRING",
+	&asn_OP_BIT_STRING,
+	asn_DEF_BIT_STRING_tags,
+	sizeof(asn_DEF_BIT_STRING_tags)
+	  / sizeof(asn_DEF_BIT_STRING_tags[0]),
+	asn_DEF_BIT_STRING_tags,	/* Same as above */
+	sizeof(asn_DEF_BIT_STRING_tags)
+	  / sizeof(asn_DEF_BIT_STRING_tags[0]),
+	{ 0, 0, BIT_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs
+};
+
+/*
+ * BIT STRING generic constraint.
+ */
+int
+BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+
+	if(st && st->buf) {
+		if((st->size == 0 && st->bits_unused)
+		|| st->bits_unused < 0 || st->bits_unused > 7) {
+			ASN__CTFAIL(app_key, td, sptr,
+				"%s: invalid padding byte (%s:%d)",
+				td->name, __FILE__, __LINE__);
+			return -1;
+		}
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
+
+static const char *_bit_pattern[16] = {
+	"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
+	"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
+};
+
+asn_enc_rval_t
+BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int ilevel, enum xer_encoder_flags_e flags,
+                      asn_app_consume_bytes_f *cb, void *app_key) {
+	asn_enc_rval_t er = {0, 0, 0};
+	char scratch[128];
+	char *p = scratch;
+	char *scend = scratch + (sizeof(scratch) - 10);
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	int xcan = (flags & XER_F_CANONICAL);
+	uint8_t *buf;
+	uint8_t *end;
+
+	if(!st || !st->buf)
+		ASN__ENCODE_FAILED;
+
+	er.encoded = 0;
+
+	buf = st->buf;
+	end = buf + st->size - 1;	/* Last byte is special */
+
+	/*
+	 * Binary dump
+	 */
+	for(; buf < end; buf++) {
+		int v = *buf;
+		int nline = xcan?0:(((buf - st->buf) % 8) == 0);
+		if(p >= scend || nline) {
+			ASN__CALLBACK(scratch, p - scratch);
+			p = scratch;
+			if(nline) ASN__TEXT_INDENT(1, ilevel);
+		}
+		memcpy(p + 0, _bit_pattern[v >> 4], 4);
+		memcpy(p + 4, _bit_pattern[v & 0x0f], 4);
+		p += 8;
+	}
+
+	if(!xcan && ((buf - st->buf) % 8) == 0)
+		ASN__TEXT_INDENT(1, ilevel);
+	ASN__CALLBACK(scratch, p - scratch);
+	p = scratch;
+
+	if(buf == end) {
+		int v = *buf;
+		int ubits = st->bits_unused;
+		int i;
+		for(i = 7; i >= ubits; i--)
+			*p++ = (v & (1 << i)) ? 0x31 : 0x30;
+		ASN__CALLBACK(scratch, p - scratch);
+	}
+
+	if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+
+/*
+ * BIT STRING specific contents printer.
+ */
+int
+BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                 asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+	char scratch[64];
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	uint8_t *buf;
+	uint8_t *end;
+	char *p = scratch;
+
+	(void)td;	/* Unused argument */
+
+	if(!st || !st->buf)
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	ilevel++;
+	buf = st->buf;
+	end = buf + st->size;
+
+	/*
+	 * Hexadecimal dump.
+	 */
+	for(; buf < end; buf++) {
+		if((buf - st->buf) % 16 == 0 && (st->size > 16)
+				&& buf != st->buf) {
+			_i_INDENT(1);
+			/* Dump the string */
+			if(cb(scratch, p - scratch, app_key) < 0) return -1;
+			p = scratch;
+		}
+		*p++ = h2c[*buf >> 4];
+		*p++ = h2c[*buf & 0x0F];
+		*p++ = 0x20;
+	}
+
+	if(p > scratch) {
+		p--;	/* Eat the tailing space */
+
+		if((st->size > 16)) {
+			_i_INDENT(1);
+		}
+
+		/* Dump the incomplete 16-bytes row */
+		if(cb(scratch, p - scratch, app_key) < 0)
+			return -1;
+	}
+
+    if(st->bits_unused) {
+        int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)",
+                           st->bits_unused, st->bits_unused == 1 ? "" : "s");
+        assert(ret > 0 && ret < (ssize_t)sizeof(scratch));
+        if(ret > 0 && ret < (ssize_t)sizeof(scratch)
+           && cb(scratch, ret, app_key) < 0)
+            return -1;
+    }
+
+	return 0;
+}
+
+/*
+ * Non-destructively remove the trailing 0-bits from the given bit string.
+ */
+static const BIT_STRING_t *
+BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) {
+    const uint8_t *b;
+    union {
+        const uint8_t *c_buf;
+        uint8_t *nc_buf;
+    } unconst;
+
+    if(st->size == 0) {
+        assert(st->bits_unused == 0);
+        return st;
+    } else {
+        for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) {
+            ;
+        }
+        /* b points to the last byte which may contain data */
+        if(*b) {
+            int unused = 7;
+            uint8_t v = *b;
+            v &= -(int8_t)v;
+            if(v & 0x0F) unused -= 4;
+            if(v & 0x33) unused -= 2;
+            if(v & 0x55) unused -= 1;
+            tmp->size = b-st->buf + 1;
+            tmp->bits_unused = unused;
+        } else {
+            tmp->size = b-st->buf;
+            tmp->bits_unused = 0;
+        }
+
+        assert(b >= st->buf);
+    }
+
+    unconst.c_buf = st->buf;
+    tmp->buf = unconst.nc_buf;
+    return tmp;
+}
+
+/*
+ * Lexicographically compare the common prefix of both strings,
+ * and if it is the same return -1 for the smallest string.
+ */
+int
+BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                   const void *bptr) {
+    /*
+     * Remove information about trailing bits, since
+     * X.680 (08/2015) #22.7 "ensure that different semantics are not"
+     * "associated with [values that differ only in] the trailing 0 bits."
+     */
+    BIT_STRING_t compact_a, compact_b;
+    const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a);
+    const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b);
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics;
+
+    assert(specs && specs->subvariant == ASN_OSUBV_BIT);
+
+    if(a && b) {
+        size_t common_prefix_size = a->size <= b->size ? a->size : b->size;
+        int ret = memcmp(a->buf, b->buf, common_prefix_size);
+        if(ret == 0) {
+            /* Figure out which string with equal prefixes is longer. */
+            if(a->size < b->size) {
+                return -1;
+            } else if(a->size > b->size) {
+                return 1;
+            } else {
+                /* Figure out how many unused bits */
+                if(a->bits_unused > b->bits_unused) {
+                    return -1;
+                } else if(a->bits_unused < b->bits_unused) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        } else {
+            return ret;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+#undef  RETURN
+#define RETURN(_code)                       \
+    do {                                    \
+        asn_dec_rval_t tmprval;             \
+        tmprval.code = _code;               \
+        tmprval.consumed = consumed_myself; \
+        return tmprval;                     \
+    } while(0)
+
+static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = {
+    APC_SEMI_CONSTRAINED, -1, -1, 0, 0};
+
+asn_dec_rval_t
+BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr,
+                       asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+		? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		: &asn_SPC_BIT_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+	const asn_per_constraint_t *csiz;
+	asn_dec_rval_t rval = { RC_OK, 0 };
+	BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+	ssize_t consumed_myself = 0;
+	int repeat;
+
+	(void)opt_codec_ctx;
+
+	if(pc) {
+		csiz = &pc->size;
+	} else {
+		csiz = &asn_DEF_BIT_STRING_constraint_size;
+	}
+
+	if(specs->subvariant != ASN_OSUBV_BIT) {
+		ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant);
+		RETURN(RC_FAIL);
+    }
+
+	/*
+	 * Allocate the string.
+	 */
+	if(!st) {
+		st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+		if(!st) RETURN(RC_FAIL);
+	}
+
+	ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+		csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+		csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+	if(csiz->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) RETURN(RC_WMORE);
+		if(inext) {
+			csiz = &asn_DEF_BIT_STRING_constraint_size;
+		}
+	}
+
+	if(csiz->effective_bits >= 0) {
+		FREEMEM(st->buf);
+        st->size = (csiz->upper_bound + 7) >> 3;
+        st->buf = (uint8_t *)MALLOC(st->size + 1);
+		if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+	}
+
+	/* X.691, #16.5: zero-length encoding */
+	/* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+	/* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+	if(csiz->effective_bits == 0) {
+		int ret;
+        ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound);
+        ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound);
+		if(ret < 0) RETURN(RC_WMORE);
+		consumed_myself += csiz->upper_bound;
+		st->buf[st->size] = 0;
+        st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7;
+        RETURN(RC_OK);
+	}
+
+	st->size = 0;
+	do {
+		ssize_t raw_len;
+		ssize_t len_bytes;
+		ssize_t len_bits;
+		void *p;
+		int ret;
+
+		/* Get the PER length */
+		raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound,
+		                          &repeat);
+		if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+		ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+			(long)csiz->effective_bits, (long)raw_len,
+			repeat ? "repeat" : "once", td->name);
+        len_bits = raw_len;
+        len_bytes = (len_bits + 7) >> 3;
+        if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7);
+        /* len_bits be multiple of 16K if repeat is set */
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+		if(!p) RETURN(RC_FAIL);
+		st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+		st->size += len_bytes;
+	} while(repeat);
+	st->buf[st->size] = 0;	/* nul-terminate */
+
+	return rval;
+}
+
+asn_enc_rval_t
+BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_BIT_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+	const asn_per_constraint_t *csiz;
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	BIT_STRING_t compact_bstr;  /* Do not modify this directly! */
+	asn_enc_rval_t er = { 0, 0, 0 };
+	int inext = 0;		/* Lies not within extension root */
+	size_t size_in_bits;
+	const uint8_t *buf;
+	int ret;
+	int ct_extensible;
+
+	if(!st || (!st->buf && st->size))
+		ASN__ENCODE_FAILED;
+
+	if(specs->subvariant == ASN_OSUBV_BIT) {
+        if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7))
+            ASN__ENCODE_FAILED;
+    } else {
+		ASN__ENCODE_FAILED;
+    }
+
+	if(pc) {
+        csiz = &pc->size;
+    } else {
+		csiz = &asn_DEF_BIT_STRING_constraint_size;
+	}
+	ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+    /* Figure out the size without the trailing bits */
+    st = BIT_STRING__compactify(st, &compact_bstr);
+    size_in_bits = 8 * st->size - st->bits_unused;
+
+    ASN_DEBUG(
+        "Encoding %s into %" ASN_PRI_SIZE " bits"
+        " (%ld..%ld, effective %d)%s",
+        td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound,
+        csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+    /* Figure out whether size lies within PER visible constraint */
+
+    if(csiz->effective_bits >= 0) {
+        if((ssize_t)size_in_bits > csiz->upper_bound) {
+            if(ct_extensible) {
+                csiz = &asn_DEF_BIT_STRING_constraint_size;
+                inext = 1;
+            } else {
+                ASN__ENCODE_FAILED;
+            }
+        }
+    } else {
+        inext = 0;
+    }
+
+    if(ct_extensible) {
+		/* Declare whether length is [not] within extension root */
+		if(per_put_few_bits(po, inext, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+    if(csiz->effective_bits >= 0 && !inext) {
+        int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound;
+        ASN_DEBUG(
+            "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual "
+            "value %" ASN_PRI_SSIZE "",
+            st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits,
+            add_trailer,
+            add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound);
+        ret = per_put_few_bits(
+            po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound,
+            csiz->effective_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        ret = per_put_many_bits(po, st->buf, size_in_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        if(add_trailer) {
+            static const uint8_t zeros[16];
+            size_t trailing_zero_bits = csiz->lower_bound - size_in_bits;
+            while(trailing_zero_bits > 0) {
+                if(trailing_zero_bits > 8 * sizeof(zeros)) {
+                    ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros));
+                    trailing_zero_bits -= 8 * sizeof(zeros);
+                } else {
+                    ret = per_put_many_bits(po, zeros, trailing_zero_bits);
+                    trailing_zero_bits = 0;
+                }
+                if(ret) ASN__ENCODE_FAILED;
+            }
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size);
+
+    buf = st->buf;
+    do {
+        int need_eom = 0;
+        ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom);
+        if(maySave < 0) ASN__ENCODE_FAILED;
+
+        ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits);
+
+        ret = per_put_many_bits(po, buf, maySave);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += maySave >> 3;
+        size_in_bits -= maySave;
+        assert(!(maySave & 0x07) || !size_in_bits);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size_in_bits);
+
+    ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+asn_random_fill_result_t
+BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                       const asn_encoding_constraints_t *constraints,
+                       size_t max_length) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_BIT_STRING_specs;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    static unsigned lengths[] = {0,     1,     2,     3,     4,     8,
+                                 126,   127,   128,   16383, 16384, 16385,
+                                 65534, 65535, 65536, 65537};
+    uint8_t *buf;
+    uint8_t *bend;
+    uint8_t *b;
+    size_t rnd_bits, rnd_len;
+    BIT_STRING_t *st;
+
+    if(max_length == 0) return result_skipped;
+
+    switch(specs->subvariant) {
+    case ASN_OSUBV_ANY:
+        return result_failed;
+    case ASN_OSUBV_BIT:
+        break;
+    default:
+        break;
+    }
+
+    /* Figure out how far we should go */
+    rnd_bits = lengths[asn_random_between(
+        0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_CONSTRAINED) {
+            long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length
+                                             ? pc->upper_bound
+                                             : (ssize_t)max_length;
+            if(max_length < (size_t)pc->lower_bound) {
+                return result_skipped;
+            }
+            if(pc->flags & APC_EXTENSIBLE) {
+                switch(asn_random_between(0, 5)) {
+                case 0:
+                    if(pc->lower_bound > 0) {
+                        rnd_bits = pc->lower_bound - 1;
+                        break;
+                    }
+                    /* Fall through */
+                case 1:
+                    rnd_bits = pc->upper_bound + 1;
+                    break;
+                case 2:
+                    /* Keep rnd_bits from the table */
+                    if(rnd_bits < max_length) {
+                        break;
+                    }
+                    /* Fall through */
+                default:
+                    rnd_bits = asn_random_between(pc->lower_bound,
+                                                  suggested_upper_bound);
+                }
+            } else {
+                rnd_bits =
+                    asn_random_between(pc->lower_bound, suggested_upper_bound);
+            }
+        } else {
+            rnd_bits = asn_random_between(0, max_length - 1);
+        }
+    } else if(rnd_bits >= max_length) {
+        rnd_bits = asn_random_between(0, max_length - 1);
+    }
+
+    rnd_len = (rnd_bits + 7) / 8;
+    buf = CALLOC(1, rnd_len + 1);
+    if(!buf) return result_failed;
+
+    bend = &buf[rnd_len];
+
+    for(b = buf; b < bend; b++) {
+        *(uint8_t *)b = asn_random_between(0, 255);
+    }
+    *b = 0; /* Zero-terminate just in case. */
+
+    if(*sptr) {
+        st = *sptr;
+        FREEMEM(st->buf);
+    } else {
+        st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) {
+            FREEMEM(buf);
+            return result_failed;
+        }
+    }
+
+    st->buf = buf;
+    st->size = rnd_len;
+    st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7;
+    if(st->bits_unused) {
+        assert(st->size > 0);
+        st->buf[st->size-1] &= 0xff << st->bits_unused;
+    }
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/asn1c_defs/BIT_STRING.h b/asn1c_defs/BIT_STRING.h
new file mode 100644
index 0000000..c1bdbbc
--- /dev/null
+++ b/asn1c_defs/BIT_STRING.h
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_BIT_STRING_H_
+#define	_BIT_STRING_H_
+
+#include <OCTET_STRING.h>	/* Some help from OCTET STRING */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct BIT_STRING_s {
+	uint8_t *buf;	/* BIT STRING body */
+	size_t size;	/* Size of the above buffer */
+
+	int bits_unused;/* Unused trailing bits in the last octet (0..7) */
+
+	asn_struct_ctx_t _asn_ctx;	/* Parsing across buffer boundaries */
+} BIT_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING;
+extern asn_TYPE_operation_t asn_OP_BIT_STRING;
+extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs;
+
+asn_struct_print_f BIT_STRING_print;	/* Human-readable output */
+asn_struct_compare_f BIT_STRING_compare;
+asn_constr_check_f BIT_STRING_constraint;
+xer_type_encoder_f BIT_STRING_encode_xer;
+oer_type_decoder_f BIT_STRING_decode_oer;
+oer_type_encoder_f BIT_STRING_encode_oer;
+per_type_decoder_f BIT_STRING_decode_uper;
+per_type_encoder_f BIT_STRING_encode_uper;
+asn_random_fill_f  BIT_STRING_random_fill;
+
+#define BIT_STRING_free              OCTET_STRING_free
+#define BIT_STRING_decode_ber        OCTET_STRING_decode_ber
+#define BIT_STRING_encode_der        OCTET_STRING_encode_der
+#define BIT_STRING_decode_xer        OCTET_STRING_decode_xer_binary
+#define BIT_STRING_decode_aper       OCTET_STRING_decode_aper
+#define BIT_STRING_encode_aper       OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _BIT_STRING_H_ */
diff --git a/asn1c_defs/BOOLEAN.c b/asn1c_defs/BOOLEAN.c
new file mode 100644
index 0000000..25831e2
--- /dev/null
+++ b/asn1c_defs/BOOLEAN.c
@@ -0,0 +1,492 @@
+/*-
+ * Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <BOOLEAN.h>
+
+/*
+ * BOOLEAN basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (1 << 2))
+};
+asn_TYPE_operation_t asn_OP_BOOLEAN = {
+	BOOLEAN_free,
+	BOOLEAN_print,
+	BOOLEAN_compare,
+	BOOLEAN_decode_ber,
+	BOOLEAN_encode_der,
+	BOOLEAN_decode_xer,
+	BOOLEAN_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	BOOLEAN_decode_oer,
+	BOOLEAN_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	BOOLEAN_decode_uper,	/* Unaligned PER decoder */
+	BOOLEAN_encode_uper,	/* Unaligned PER encoder */
+	BOOLEAN_decode_aper,	/* Aligned PER decoder */
+	BOOLEAN_encode_aper,	/* Aligned PER encoder */
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	BOOLEAN_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_BOOLEAN = {
+	"BOOLEAN",
+	"BOOLEAN",
+	&asn_OP_BOOLEAN,
+	asn_DEF_BOOLEAN_tags,
+	sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+	asn_DEF_BOOLEAN_tags,	/* Same as above */
+	sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+/*
+ * Decode BOOLEAN type.
+ */
+asn_dec_rval_t
+BOOLEAN_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **bool_value,
+                   const void *buf_ptr, size_t size, int tag_mode) {
+    BOOLEAN_t *st = (BOOLEAN_t *)*bool_value;
+	asn_dec_rval_t rval;
+	ber_tlv_len_t length;
+	ber_tlv_len_t lidx;
+
+	if(st == NULL) {
+		st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st)));
+		if(st == NULL) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+			return rval;
+		}
+	}
+
+	ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)",
+		td->name, tag_mode);
+
+	/*
+	 * Check tags.
+	 */
+	rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+		tag_mode, 0, &length, 0);
+	if(rval.code != RC_OK)
+		return rval;
+
+	ASN_DEBUG("Boolean length is %d bytes", (int)length);
+
+	buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+	size -= rval.consumed;
+	if(length > (ber_tlv_len_t)size) {
+		rval.code = RC_WMORE;
+		rval.consumed = 0;
+		return rval;
+	}
+
+	/*
+	 * Compute boolean value.
+	 */
+	for(*st = 0, lidx = 0;
+		(lidx < length) && *st == 0; lidx++) {
+		/*
+		 * Very simple approach: read bytes until the end or
+		 * value is already TRUE.
+		 * BOOLEAN is not supposed to contain meaningful data anyway.
+		 */
+		*st |= ((const uint8_t *)buf_ptr)[lidx];
+	}
+
+	rval.code = RC_OK;
+	rval.consumed += length;
+
+	ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d",
+		(long)rval.consumed, (long)length,
+		td->name, *st);
+	
+	return rval;
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                   void *app_key) {
+	asn_enc_rval_t erval = {0,0,0};
+	const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+
+	erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key);
+	if(erval.encoded == -1) {
+		erval.failed_type = td;
+		erval.structure_ptr = sptr;
+		return erval;
+	}
+
+	if(cb) {
+		uint8_t bool_value;
+
+		bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */
+
+		if(cb(&bool_value, 1, app_key) < 0) {
+			erval.encoded = -1;
+			erval.failed_type = td;
+			erval.structure_ptr = sptr;
+			return erval;
+		}
+	}
+
+	erval.encoded += 1;
+
+	ASN__ENCODED_OK(erval);
+}
+
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+static enum xer_pbd_rval
+BOOLEAN__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                         const void *chunk_buf, size_t chunk_size) {
+    BOOLEAN_t *st = (BOOLEAN_t *)sptr;
+	const char *p = (const char *)chunk_buf;
+
+	(void)td;
+
+	if(chunk_size && p[0] == 0x3c /* '<' */) {
+		switch(xer_check_tag(chunk_buf, chunk_size, "false")) {
+		case XCT_BOTH:
+			/* "<false/>" */
+			*st = 0;
+			break;
+		case XCT_UNKNOWN_BO:
+			if(xer_check_tag(chunk_buf, chunk_size, "true")
+					!= XCT_BOTH)
+				return XPBD_BROKEN_ENCODING;
+			/* "<true/>" */
+			*st = 1;	/* Or 0xff as in DER?.. */
+			break;
+		default:
+			return XPBD_BROKEN_ENCODING;
+		}
+		return XPBD_BODY_CONSUMED;
+	} else {
+		return XPBD_BROKEN_ENCODING;
+	}
+}
+
+
+asn_dec_rval_t
+BOOLEAN_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **sptr,
+                   const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+		sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size,
+		BOOLEAN__xer_body_decode);
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+	int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+	asn_enc_rval_t er = {0, 0, 0};
+
+	(void)ilevel;
+	(void)flags;
+
+	if(!st) ASN__ENCODE_FAILED;
+
+	if(*st) {
+		ASN__CALLBACK("<true/>", 7);
+	} else {
+		ASN__CALLBACK("<false/>", 8);
+	}
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+int
+BOOLEAN_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+              asn_app_consume_bytes_f *cb, void *app_key) {
+    const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+	const char *buf;
+	size_t buflen;
+
+	(void)td;	/* Unused argument */
+	(void)ilevel;	/* Unused argument */
+
+	if(st) {
+		if(*st) {
+			buf = "TRUE";
+			buflen = 4;
+		} else {
+			buf = "FALSE";
+			buflen = 5;
+		}
+	} else {
+		buf = "<absent>";
+		buflen = 8;
+	}
+
+	return (cb(buf, buflen, app_key) < 0) ? -1 : 0;
+}
+
+void
+BOOLEAN_free(const asn_TYPE_descriptor_t *td, void *ptr,
+             enum asn_struct_free_method method) {
+    if(td && ptr) {
+        switch(method) {
+        case ASFM_FREE_EVERYTHING:
+            FREEMEM(ptr);
+            break;
+        case ASFM_FREE_UNDERLYING:
+            break;
+        case ASFM_FREE_UNDERLYING_AND_RESET:
+            memset(ptr, 0, sizeof(BOOLEAN_t));
+            break;
+        }
+    }
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+BOOLEAN_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+	BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
+
+	(void)opt_codec_ctx;
+    (void)td;
+	(void)constraints;
+
+	if(!st) {
+		st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st)));
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	/*
+	 * Extract a single bit
+	 */
+	switch(per_get_few_bits(pd, 1)) {
+	case 1: *st = 1; break;
+	case 0: *st = 0; break;
+	case -1: default: ASN__DECODE_STARVED;
+	}
+
+	ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE");
+
+	rv.code = RC_OK;
+	rv.consumed = 1;
+	return rv;
+}
+
+
+asn_enc_rval_t
+BOOLEAN_encode_uper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, const void *sptr,
+                    asn_per_outp_t *po) {
+    const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+
+	(void)constraints;
+
+	if(!st) ASN__ENCODE_FAILED;
+
+	if(per_put_few_bits(po, *st ? 1 : 0, 1))
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+BOOLEAN_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	asn_dec_rval_t rv;
+	BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
+
+	(void)opt_codec_ctx;
+	(void)constraints;
+	(void)td;
+
+	if(!st) {
+		st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st)));
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	/*
+	 * Extract a single bit
+	 */
+	switch(per_get_few_bits(pd, 1)) {
+	case 1:
+		*st = 1;
+		break;
+	case 0:
+		*st = 0;
+		break;
+	case -1:
+	default:
+		ASN__DECODE_STARVED;
+	}
+
+	ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE");
+
+	rv.code = RC_OK;
+	rv.consumed = 1;
+	return rv;
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_aper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints,
+                    const void *sptr, asn_per_outp_t *po) {
+	const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+
+	(void)constraints;
+
+	if(!st) ASN__ENCODE_FAILED;
+
+	if(per_put_few_bits(po, *st ? 1 : 0, 1))
+        	ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
+#ifndef  ASN_DISABLE_OER_SUPPORT
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+BOOLEAN_encode_oer(const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, const void *sptr,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = { 1, 0, 0 };
+    const BOOLEAN_t *st = sptr;
+    uint8_t bool_value = *st ? 0xff : 0; /* 0xff mandated by OER */
+
+    (void)td;
+    (void)constraints;  /* Constraints are unused in OER */
+
+    if(cb(&bool_value, 1, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    } else {
+        ASN__ENCODED_OK(er);
+    }
+}
+
+asn_dec_rval_t
+BOOLEAN_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, void **sptr,
+                   const void *ptr, size_t size) {
+    asn_dec_rval_t ok = {RC_OK, 1};
+    BOOLEAN_t *st;
+
+    (void)opt_codec_ctx;
+    (void)td;
+    (void)constraints; /* Constraints are unused in OER */
+
+    if(size < 1) {
+        ASN__DECODE_STARVED;
+    }
+
+    if(!(st = *sptr)) {
+        st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+    *st = *(const uint8_t *)ptr;
+
+    return ok;
+}
+
+
+
+#endif
+
+int
+BOOLEAN_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                const void *bptr) {
+    const BOOLEAN_t *a = aptr;
+    const BOOLEAN_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        if(!*a == !*b) {    /* TRUE can be encoded by any non-zero byte. */
+            return 0;
+        } else if(!*a) {
+            return -1;
+        } else {
+            return 1;
+        }
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+asn_random_fill_result_t
+BOOLEAN_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constraints,
+                    size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    BOOLEAN_t *st = *sptr;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->value;
+        if(pc->flags & APC_CONSTRAINED) {
+            *st = asn_random_between(pc->lower_bound, pc->upper_bound);
+            return result_ok;
+        }
+    }
+
+    /* Simulate booleans that are sloppily set and biased. */
+    switch(asn_random_between(0, 7)) {
+    case 0:
+    case 1:
+    case 2:
+        *st = 0; break;
+    case 3: *st = -1; break;
+    case 4: *st = 1; break;
+    case 5: *st = INT_MIN; break;
+    case 6: *st = INT_MAX; break;
+    default:
+        *st = asn_random_between(INT_MIN, INT_MAX);
+        break;
+    }
+    return result_ok;
+}
diff --git a/asn1c_defs/BOOLEAN.h b/asn1c_defs/BOOLEAN.h
new file mode 100644
index 0000000..620acf7
--- /dev/null
+++ b/asn1c_defs/BOOLEAN.h
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_BOOLEAN_H_
+#define	_BOOLEAN_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The underlying integer may contain various values, but everything
+ * non-zero is capped to 0xff by the DER encoder. The BER decoder may
+ * yield non-zero values different from 1, beware.
+ */
+typedef int BOOLEAN_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN;
+extern asn_TYPE_operation_t asn_OP_BOOLEAN;
+
+asn_struct_free_f BOOLEAN_free;
+asn_struct_print_f BOOLEAN_print;
+asn_struct_compare_f BOOLEAN_compare;
+ber_type_decoder_f BOOLEAN_decode_ber;
+der_type_encoder_f BOOLEAN_encode_der;
+oer_type_decoder_f BOOLEAN_decode_oer;
+oer_type_encoder_f BOOLEAN_encode_oer;
+per_type_decoder_f BOOLEAN_decode_uper;
+per_type_encoder_f BOOLEAN_encode_uper;
+per_type_decoder_f BOOLEAN_decode_aper;
+per_type_encoder_f BOOLEAN_encode_aper;
+xer_type_decoder_f BOOLEAN_decode_xer;
+xer_type_encoder_f BOOLEAN_encode_xer;
+asn_random_fill_f  BOOLEAN_random_fill;
+
+#define BOOLEAN_constraint     asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _BOOLEAN_H_ */
diff --git a/asn1c_defs/E2N_ActionParameter-ID.c b/asn1c_defs/E2N_ActionParameter-ID.c
new file mode 100644
index 0000000..b5f27c0
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ActionParameter-ID.h"
+
+int
+E2N_ActionParameter_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_ActionParameter_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ActionParameter_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_ID = {
+	"ActionParameter-ID",
+	"ActionParameter-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_ActionParameter_ID_tags_1,
+	sizeof(asn_DEF_E2N_ActionParameter_ID_tags_1)
+		/sizeof(asn_DEF_E2N_ActionParameter_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ActionParameter_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ActionParameter_ID_tags_1)
+		/sizeof(asn_DEF_E2N_ActionParameter_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ActionParameter_ID_constr_1, E2N_ActionParameter_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_ActionParameter-ID.h b/asn1c_defs/E2N_ActionParameter-ID.h
new file mode 100644
index 0000000..4af58c8
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ActionParameter_ID_H_
+#define	_E2N_ActionParameter_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_ActionParameter-ID */
+typedef long	 E2N_ActionParameter_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_ActionParameter_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_ID;
+asn_struct_free_f E2N_ActionParameter_ID_free;
+asn_struct_print_f E2N_ActionParameter_ID_print;
+asn_constr_check_f E2N_ActionParameter_ID_constraint;
+ber_type_decoder_f E2N_ActionParameter_ID_decode_ber;
+der_type_encoder_f E2N_ActionParameter_ID_encode_der;
+xer_type_decoder_f E2N_ActionParameter_ID_decode_xer;
+xer_type_encoder_f E2N_ActionParameter_ID_encode_xer;
+per_type_decoder_f E2N_ActionParameter_ID_decode_uper;
+per_type_encoder_f E2N_ActionParameter_ID_encode_uper;
+per_type_decoder_f E2N_ActionParameter_ID_decode_aper;
+per_type_encoder_f E2N_ActionParameter_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ActionParameter_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ActionParameter-Item.c b/asn1c_defs/E2N_ActionParameter-Item.c
new file mode 100644
index 0000000..8d5190a
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ActionParameter-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2N_ActionParameter_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Item, actionParameter_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ActionParameter_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"actionParameter-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Item, actionParameter_Value),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_ActionParameter_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"actionParameter-Value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ActionParameter_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_ActionParameter_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* actionParameter-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionParameter-Value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_ActionParameter_Item_specs_1 = {
+	sizeof(struct E2N_ActionParameter_Item),
+	offsetof(struct E2N_ActionParameter_Item, _asn_ctx),
+	asn_MAP_E2N_ActionParameter_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_Item = {
+	"ActionParameter-Item",
+	"ActionParameter-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ActionParameter_Item_tags_1,
+	sizeof(asn_DEF_E2N_ActionParameter_Item_tags_1)
+		/sizeof(asn_DEF_E2N_ActionParameter_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ActionParameter_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ActionParameter_Item_tags_1)
+		/sizeof(asn_DEF_E2N_ActionParameter_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_ActionParameter_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_ActionParameter_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ActionParameter-Item.h b/asn1c_defs/E2N_ActionParameter-Item.h
new file mode 100644
index 0000000..85d9d6e
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-Item.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ActionParameter_Item_H_
+#define	_E2N_ActionParameter_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ActionParameter-ID.h"
+#include "E2N_ActionParameter-Value.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_ActionParameter-Item */
+typedef struct E2N_ActionParameter_Item {
+	E2N_ActionParameter_ID_t	 actionParameter_ID;
+	E2N_ActionParameter_Value_t	 actionParameter_Value;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ActionParameter_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_ActionParameter_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_ActionParameter_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ActionParameter_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ActionParameter-Value.c b/asn1c_defs/E2N_ActionParameter-Value.c
new file mode 100644
index 0000000..785256d
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-Value.c
@@ -0,0 +1,102 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ActionParameter-Value.h"
+
+asn_per_constraints_t asn_PER_type_E2N_ActionParameter_Value_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_ActionParameter_Value_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valueInt),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueInt"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valueEnum),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueEnum"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valueBool),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBool"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valueBitS),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBitS"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valueOctS),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueOctS"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ActionParameter_Value, choice.valuePrtS),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_PrintableString,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valuePrtS"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_ActionParameter_Value_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueEnum */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueBool */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* valueOctS */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* valuePrtS */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_ActionParameter_Value_specs_1 = {
+	sizeof(struct E2N_ActionParameter_Value),
+	offsetof(struct E2N_ActionParameter_Value, _asn_ctx),
+	offsetof(struct E2N_ActionParameter_Value, present),
+	sizeof(((struct E2N_ActionParameter_Value *)0)->present),
+	asn_MAP_E2N_ActionParameter_Value_tag2el_1,
+	6,	/* Count of tags in the map */
+	0, 0,
+	6	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_Value = {
+	"ActionParameter-Value",
+	"ActionParameter-Value",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_ActionParameter_Value_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_ActionParameter_Value_1,
+	6,	/* Elements count */
+	&asn_SPC_E2N_ActionParameter_Value_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ActionParameter-Value.h b/asn1c_defs/E2N_ActionParameter-Value.h
new file mode 100644
index 0000000..4000559
--- /dev/null
+++ b/asn1c_defs/E2N_ActionParameter-Value.h
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ActionParameter_Value_H_
+#define	_E2N_ActionParameter_Value_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <BOOLEAN.h>
+#include <BIT_STRING.h>
+#include <OCTET_STRING.h>
+#include <PrintableString.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_ActionParameter_Value_PR {
+	E2N_ActionParameter_Value_PR_NOTHING,	/* No components present */
+	E2N_ActionParameter_Value_PR_valueInt,
+	E2N_ActionParameter_Value_PR_valueEnum,
+	E2N_ActionParameter_Value_PR_valueBool,
+	E2N_ActionParameter_Value_PR_valueBitS,
+	E2N_ActionParameter_Value_PR_valueOctS,
+	E2N_ActionParameter_Value_PR_valuePrtS
+	/* Extensions may appear below */
+	
+} E2N_ActionParameter_Value_PR;
+
+/* E2N_ActionParameter-Value */
+typedef struct E2N_ActionParameter_Value {
+	E2N_ActionParameter_Value_PR present;
+	union E2N_ActionParameter_Value_u {
+		long	 valueInt;
+		long	 valueEnum;
+		BOOLEAN_t	 valueBool;
+		BIT_STRING_t	 valueBitS;
+		OCTET_STRING_t	 valueOctS;
+		PrintableString_t	 valuePrtS;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ActionParameter_Value_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ActionParameter_Value;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_ActionParameter_Value_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_ActionParameter_Value_1[6];
+extern asn_per_constraints_t asn_PER_type_E2N_ActionParameter_Value_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ActionParameter_Value_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CallProcess-ID.c b/asn1c_defs/E2N_CallProcess-ID.c
new file mode 100644
index 0000000..ed94809
--- /dev/null
+++ b/asn1c_defs/E2N_CallProcess-ID.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CallProcess-ID.h"
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_CallProcess_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CallProcess_ID = {
+	"CallProcess-ID",
+	"CallProcess-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_CallProcess_ID_tags_1,
+	sizeof(asn_DEF_E2N_CallProcess_ID_tags_1)
+		/sizeof(asn_DEF_E2N_CallProcess_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CallProcess_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CallProcess_ID_tags_1)
+		/sizeof(asn_DEF_E2N_CallProcess_ID_tags_1[0]), /* 1 */
+	{ 0, 0, NativeInteger_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_CallProcess-ID.h b/asn1c_defs/E2N_CallProcess-ID.h
new file mode 100644
index 0000000..3875c81
--- /dev/null
+++ b/asn1c_defs/E2N_CallProcess-ID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CallProcess_ID_H_
+#define	_E2N_CallProcess_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_CallProcess-ID */
+typedef long	 E2N_CallProcess_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CallProcess_ID;
+asn_struct_free_f E2N_CallProcess_ID_free;
+asn_struct_print_f E2N_CallProcess_ID_print;
+asn_constr_check_f E2N_CallProcess_ID_constraint;
+ber_type_decoder_f E2N_CallProcess_ID_decode_ber;
+der_type_encoder_f E2N_CallProcess_ID_encode_der;
+xer_type_decoder_f E2N_CallProcess_ID_decode_xer;
+xer_type_encoder_f E2N_CallProcess_ID_encode_xer;
+per_type_decoder_f E2N_CallProcess_ID_decode_uper;
+per_type_encoder_f E2N_CallProcess_ID_encode_uper;
+per_type_decoder_f E2N_CallProcess_ID_decode_aper;
+per_type_encoder_f E2N_CallProcess_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CallProcess_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_Cause.c b/asn1c_defs/E2N_Cause.c
new file mode 100644
index 0000000..70fb1d0
--- /dev/null
+++ b/asn1c_defs/E2N_Cause.c
@@ -0,0 +1,82 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_Cause.h"
+
+static asn_per_constraints_t asn_PER_type_E2N_Cause_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_Cause_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_Cause, choice.radioNetwork),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseRadioNetwork,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioNetwork"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_Cause, choice.transport),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseTransport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_Cause, choice.protocol),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseProtocol,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocol"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_Cause, choice.misc),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseMisc,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"misc"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_Cause_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_Cause_specs_1 = {
+	sizeof(struct E2N_Cause),
+	offsetof(struct E2N_Cause, _asn_ctx),
+	offsetof(struct E2N_Cause, present),
+	sizeof(((struct E2N_Cause *)0)->present),
+	asn_MAP_E2N_Cause_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_Cause = {
+	"Cause",
+	"Cause",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_Cause_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_Cause_1,
+	4,	/* Elements count */
+	&asn_SPC_E2N_Cause_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_Cause.h b/asn1c_defs/E2N_Cause.h
new file mode 100644
index 0000000..249b820
--- /dev/null
+++ b/asn1c_defs/E2N_Cause.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_Cause_H_
+#define	_E2N_Cause_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_CauseRadioNetwork.h"
+#include "E2N_CauseTransport.h"
+#include "E2N_CauseProtocol.h"
+#include "E2N_CauseMisc.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_Cause_PR {
+	E2N_Cause_PR_NOTHING,	/* No components present */
+	E2N_Cause_PR_radioNetwork,
+	E2N_Cause_PR_transport,
+	E2N_Cause_PR_protocol,
+	E2N_Cause_PR_misc
+	/* Extensions may appear below */
+	
+} E2N_Cause_PR;
+
+/* E2N_Cause */
+typedef struct E2N_Cause {
+	E2N_Cause_PR present;
+	union E2N_Cause_u {
+		E2N_CauseRadioNetwork_t	 radioNetwork;
+		E2N_CauseTransport_t	 transport;
+		E2N_CauseProtocol_t	 protocol;
+		E2N_CauseMisc_t	 misc;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_Cause_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_Cause;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_Cause_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CauseMisc.c b/asn1c_defs/E2N_CauseMisc.c
new file mode 100644
index 0000000..d5fba15
--- /dev/null
+++ b/asn1c_defs/E2N_CauseMisc.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CauseMisc.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_CauseMisc_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_CauseMisc_value2enum_1[] = {
+	{ 0,	27,	"control-processing-overload" },
+	{ 1,	16,	"hardware-failure" },
+	{ 2,	15,	"om-intervention" },
+	{ 3,	42,	"not-enough-user-plane-processing-resources" },
+	{ 4,	11,	"unspecified" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_CauseMisc_enum2value_1[] = {
+	0,	/* control-processing-overload(0) */
+	1,	/* hardware-failure(1) */
+	3,	/* not-enough-user-plane-processing-resources(3) */
+	2,	/* om-intervention(2) */
+	4	/* unspecified(4) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_CauseMisc_specs_1 = {
+	asn_MAP_E2N_CauseMisc_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_CauseMisc_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CauseMisc_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CauseMisc = {
+	"CauseMisc",
+	"CauseMisc",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_CauseMisc_tags_1,
+	sizeof(asn_DEF_E2N_CauseMisc_tags_1)
+		/sizeof(asn_DEF_E2N_CauseMisc_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CauseMisc_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CauseMisc_tags_1)
+		/sizeof(asn_DEF_E2N_CauseMisc_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CauseMisc_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_CauseMisc_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CauseMisc.h b/asn1c_defs/E2N_CauseMisc.h
new file mode 100644
index 0000000..0312ebf
--- /dev/null
+++ b/asn1c_defs/E2N_CauseMisc.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CauseMisc_H_
+#define	_E2N_CauseMisc_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CauseMisc {
+	E2N_CauseMisc_control_processing_overload	= 0,
+	E2N_CauseMisc_hardware_failure	= 1,
+	E2N_CauseMisc_om_intervention	= 2,
+	E2N_CauseMisc_not_enough_user_plane_processing_resources	= 3,
+	E2N_CauseMisc_unspecified	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_CauseMisc;
+
+/* E2N_CauseMisc */
+typedef long	 E2N_CauseMisc_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_CauseMisc_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CauseMisc;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1;
+asn_struct_free_f CauseMisc_free;
+asn_struct_print_f CauseMisc_print;
+asn_constr_check_f CauseMisc_constraint;
+ber_type_decoder_f CauseMisc_decode_ber;
+der_type_encoder_f CauseMisc_encode_der;
+xer_type_decoder_f CauseMisc_decode_xer;
+xer_type_encoder_f CauseMisc_encode_xer;
+per_type_decoder_f CauseMisc_decode_uper;
+per_type_encoder_f CauseMisc_encode_uper;
+per_type_decoder_f CauseMisc_decode_aper;
+per_type_encoder_f CauseMisc_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CauseMisc_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CauseProtocol.c b/asn1c_defs/E2N_CauseProtocol.c
new file mode 100644
index 0000000..f52b96a
--- /dev/null
+++ b/asn1c_defs/E2N_CauseProtocol.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CauseProtocol.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_CauseProtocol_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_CauseProtocol_value2enum_1[] = {
+	{ 0,	21,	"transfer-syntax-error" },
+	{ 1,	28,	"abstract-syntax-error-reject" },
+	{ 2,	39,	"abstract-syntax-error-ignore-and-notify" },
+	{ 3,	42,	"message-not-compatible-with-receiver-state" },
+	{ 4,	14,	"semantic-error" },
+	{ 5,	11,	"unspecified" },
+	{ 6,	49,	"abstract-syntax-error-falsely-constructed-message" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_CauseProtocol_enum2value_1[] = {
+	6,	/* abstract-syntax-error-falsely-constructed-message(6) */
+	2,	/* abstract-syntax-error-ignore-and-notify(2) */
+	1,	/* abstract-syntax-error-reject(1) */
+	3,	/* message-not-compatible-with-receiver-state(3) */
+	4,	/* semantic-error(4) */
+	0,	/* transfer-syntax-error(0) */
+	5	/* unspecified(5) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_CauseProtocol_specs_1 = {
+	asn_MAP_E2N_CauseProtocol_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_CauseProtocol_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CauseProtocol_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CauseProtocol = {
+	"CauseProtocol",
+	"CauseProtocol",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_CauseProtocol_tags_1,
+	sizeof(asn_DEF_E2N_CauseProtocol_tags_1)
+		/sizeof(asn_DEF_E2N_CauseProtocol_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CauseProtocol_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CauseProtocol_tags_1)
+		/sizeof(asn_DEF_E2N_CauseProtocol_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CauseProtocol_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_CauseProtocol_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CauseProtocol.h b/asn1c_defs/E2N_CauseProtocol.h
new file mode 100644
index 0000000..e3fcab8
--- /dev/null
+++ b/asn1c_defs/E2N_CauseProtocol.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CauseProtocol_H_
+#define	_E2N_CauseProtocol_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CauseProtocol {
+	E2N_CauseProtocol_transfer_syntax_error	= 0,
+	E2N_CauseProtocol_abstract_syntax_error_reject	= 1,
+	E2N_CauseProtocol_abstract_syntax_error_ignore_and_notify	= 2,
+	E2N_CauseProtocol_message_not_compatible_with_receiver_state	= 3,
+	E2N_CauseProtocol_semantic_error	= 4,
+	E2N_CauseProtocol_unspecified	= 5,
+	E2N_CauseProtocol_abstract_syntax_error_falsely_constructed_message	= 6
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_CauseProtocol;
+
+/* E2N_CauseProtocol */
+typedef long	 E2N_CauseProtocol_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_CauseProtocol_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CauseProtocol;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1;
+asn_struct_free_f CauseProtocol_free;
+asn_struct_print_f CauseProtocol_print;
+asn_constr_check_f CauseProtocol_constraint;
+ber_type_decoder_f CauseProtocol_decode_ber;
+der_type_encoder_f CauseProtocol_encode_der;
+xer_type_decoder_f CauseProtocol_decode_xer;
+xer_type_encoder_f CauseProtocol_encode_xer;
+per_type_decoder_f CauseProtocol_decode_uper;
+per_type_encoder_f CauseProtocol_encode_uper;
+per_type_decoder_f CauseProtocol_decode_aper;
+per_type_encoder_f CauseProtocol_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CauseProtocol_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CauseRIC.c b/asn1c_defs/E2N_CauseRIC.c
new file mode 100644
index 0000000..04708c6
--- /dev/null
+++ b/asn1c_defs/E2N_CauseRIC.c
@@ -0,0 +1,77 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CauseRIC.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_CauseRIC_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  12 }	/* (0..12,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_CauseRIC_value2enum_1[] = {
+	{ 0,	19,	"function-id-Invalid" },
+	{ 1,	20,	"action-not-supported" },
+	{ 2,	17,	"excessive-actions" },
+	{ 3,	16,	"duplicate-action" },
+	{ 4,	15,	"duplicate-event" },
+	{ 5,	23,	"function-resource-limit" },
+	{ 6,	18,	"request-id-unknown" },
+	{ 7,	46,	"inconsistent-action-subsequent-action-sequence" },
+	{ 8,	23,	"control-message-invalid" },
+	{ 9,	23,	"call-process-id-invalid" },
+	{ 10,	21,	"function-not-required" },
+	{ 11,	19,	"excessive-functions" },
+	{ 12,	18,	"ric-resource-limit" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_CauseRIC_enum2value_1[] = {
+	1,	/* action-not-supported(1) */
+	9,	/* call-process-id-invalid(9) */
+	8,	/* control-message-invalid(8) */
+	3,	/* duplicate-action(3) */
+	4,	/* duplicate-event(4) */
+	2,	/* excessive-actions(2) */
+	11,	/* excessive-functions(11) */
+	0,	/* function-id-Invalid(0) */
+	10,	/* function-not-required(10) */
+	5,	/* function-resource-limit(5) */
+	7,	/* inconsistent-action-subsequent-action-sequence(7) */
+	6,	/* request-id-unknown(6) */
+	12	/* ric-resource-limit(12) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_CauseRIC_specs_1 = {
+	asn_MAP_E2N_CauseRIC_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_CauseRIC_enum2value_1,	/* N => "tag"; sorted by N */
+	13,	/* Number of elements in the maps */
+	14,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CauseRIC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CauseRIC = {
+	"CauseRIC",
+	"CauseRIC",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_CauseRIC_tags_1,
+	sizeof(asn_DEF_E2N_CauseRIC_tags_1)
+		/sizeof(asn_DEF_E2N_CauseRIC_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CauseRIC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CauseRIC_tags_1)
+		/sizeof(asn_DEF_E2N_CauseRIC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CauseRIC_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_CauseRIC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CauseRIC.h b/asn1c_defs/E2N_CauseRIC.h
new file mode 100644
index 0000000..cb5d347
--- /dev/null
+++ b/asn1c_defs/E2N_CauseRIC.h
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CauseRIC_H_
+#define	_E2N_CauseRIC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CauseRIC {
+	E2N_CauseRIC_function_id_Invalid	= 0,
+	E2N_CauseRIC_action_not_supported	= 1,
+	E2N_CauseRIC_excessive_actions	= 2,
+	E2N_CauseRIC_duplicate_action	= 3,
+	E2N_CauseRIC_duplicate_event	= 4,
+	E2N_CauseRIC_function_resource_limit	= 5,
+	E2N_CauseRIC_request_id_unknown	= 6,
+	E2N_CauseRIC_inconsistent_action_subsequent_action_sequence	= 7,
+	E2N_CauseRIC_control_message_invalid	= 8,
+	E2N_CauseRIC_call_process_id_invalid	= 9,
+	E2N_CauseRIC_function_not_required	= 10,
+	E2N_CauseRIC_excessive_functions	= 11,
+	E2N_CauseRIC_ric_resource_limit	= 12
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_CauseRIC;
+
+/* E2N_CauseRIC */
+typedef long	 E2N_CauseRIC_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_CauseRIC_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CauseRIC;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseRIC_specs_1;
+asn_struct_free_f CauseRIC_free;
+asn_struct_print_f CauseRIC_print;
+asn_constr_check_f CauseRIC_constraint;
+ber_type_decoder_f CauseRIC_decode_ber;
+der_type_encoder_f CauseRIC_encode_der;
+xer_type_decoder_f CauseRIC_decode_xer;
+xer_type_encoder_f CauseRIC_encode_xer;
+per_type_decoder_f CauseRIC_decode_uper;
+per_type_encoder_f CauseRIC_encode_uper;
+per_type_decoder_f CauseRIC_decode_aper;
+per_type_encoder_f CauseRIC_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CauseRIC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CauseRadioNetwork.c b/asn1c_defs/E2N_CauseRadioNetwork.c
new file mode 100644
index 0000000..90d1c5b
--- /dev/null
+++ b/asn1c_defs/E2N_CauseRadioNetwork.c
@@ -0,0 +1,153 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CauseRadioNetwork.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_CauseRadioNetwork_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  21 }	/* (0..21,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_CauseRadioNetwork_value2enum_1[] = {
+	{ 0,	36,	"handover-desirable-for-radio-reasons" },
+	{ 1,	22,	"time-critical-handover" },
+	{ 2,	30,	"resource-optimisation-handover" },
+	{ 3,	27,	"reduce-load-in-serving-cell" },
+	{ 4,	16,	"partial-handover" },
+	{ 5,	26,	"unknown-new-eNB-UE-X2AP-ID" },
+	{ 6,	26,	"unknown-old-eNB-UE-X2AP-ID" },
+	{ 7,	26,	"unknown-pair-of-UE-X2AP-ID" },
+	{ 8,	21,	"ho-target-not-allowed" },
+	{ 9,	22,	"tx2relocoverall-expiry" },
+	{ 10,	17,	"trelocprep-expiry" },
+	{ 11,	18,	"cell-not-available" },
+	{ 12,	43,	"no-radio-resources-available-in-target-cell" },
+	{ 13,	19,	"invalid-MME-GroupID" },
+	{ 14,	16,	"unknown-MME-Code" },
+	{ 15,	63,	"encryption-and-or-integrity-protection-algorithms-not-supported" },
+	{ 16,	26,	"reportCharacteristicsEmpty" },
+	{ 17,	19,	"noReportPeriodicity" },
+	{ 18,	21,	"existingMeasurementID" },
+	{ 19,	26,	"unknown-eNB-Measurement-ID" },
+	{ 20,	37,	"measurement-temporarily-not-available" },
+	{ 21,	11,	"unspecified" },
+	{ 22,	14,	"load-balancing" },
+	{ 23,	21,	"handover-optimisation" },
+	{ 24,	26,	"value-out-of-allowed-range" },
+	{ 25,	27,	"multiple-E-RAB-ID-instances" },
+	{ 26,	18,	"switch-off-ongoing" },
+	{ 27,	23,	"not-supported-QCI-value" },
+	{ 28,	40,	"measurement-not-supported-for-the-object" },
+	{ 29,	17,	"tDCoverall-expiry" },
+	{ 30,	14,	"tDCprep-expiry" },
+	{ 31,	34,	"action-desirable-for-radio-reasons" },
+	{ 32,	11,	"reduce-load" },
+	{ 33,	21,	"resource-optimisation" },
+	{ 34,	20,	"time-critical-action" },
+	{ 35,	18,	"target-not-allowed" },
+	{ 36,	28,	"no-radio-resources-available" },
+	{ 37,	23,	"invalid-QoS-combination" },
+	{ 38,	35,	"encryption-algorithms-not-aupported" },
+	{ 39,	19,	"procedure-cancelled" },
+	{ 40,	11,	"rRM-purpose" },
+	{ 41,	21,	"improve-user-bit-rate" },
+	{ 42,	15,	"user-inactivity" },
+	{ 43,	29,	"radio-connection-with-UE-lost" },
+	{ 44,	40,	"failure-in-the-radio-interface-procedure" },
+	{ 45,	27,	"bearer-option-not-supported" },
+	{ 46,	12,	"mCG-Mobility" },
+	{ 47,	12,	"sCG-Mobility" },
+	{ 48,	23,	"count-reaches-max-value" },
+	{ 49,	29,	"unknown-old-en-gNB-UE-X2AP-ID" },
+	{ 50,	13,	"pDCP-Overload" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_CauseRadioNetwork_enum2value_1[] = {
+	31,	/* action-desirable-for-radio-reasons(31) */
+	45,	/* bearer-option-not-supported(45) */
+	11,	/* cell-not-available(11) */
+	48,	/* count-reaches-max-value(48) */
+	38,	/* encryption-algorithms-not-aupported(38) */
+	15,	/* encryption-and-or-integrity-protection-algorithms-not-supported(15) */
+	18,	/* existingMeasurementID(18) */
+	44,	/* failure-in-the-radio-interface-procedure(44) */
+	0,	/* handover-desirable-for-radio-reasons(0) */
+	23,	/* handover-optimisation(23) */
+	8,	/* ho-target-not-allowed(8) */
+	41,	/* improve-user-bit-rate(41) */
+	13,	/* invalid-MME-GroupID(13) */
+	37,	/* invalid-QoS-combination(37) */
+	22,	/* load-balancing(22) */
+	46,	/* mCG-Mobility(46) */
+	28,	/* measurement-not-supported-for-the-object(28) */
+	20,	/* measurement-temporarily-not-available(20) */
+	25,	/* multiple-E-RAB-ID-instances(25) */
+	36,	/* no-radio-resources-available(36) */
+	12,	/* no-radio-resources-available-in-target-cell(12) */
+	17,	/* noReportPeriodicity(17) */
+	27,	/* not-supported-QCI-value(27) */
+	50,	/* pDCP-Overload(50) */
+	4,	/* partial-handover(4) */
+	39,	/* procedure-cancelled(39) */
+	40,	/* rRM-purpose(40) */
+	43,	/* radio-connection-with-UE-lost(43) */
+	32,	/* reduce-load(32) */
+	3,	/* reduce-load-in-serving-cell(3) */
+	16,	/* reportCharacteristicsEmpty(16) */
+	33,	/* resource-optimisation(33) */
+	2,	/* resource-optimisation-handover(2) */
+	47,	/* sCG-Mobility(47) */
+	26,	/* switch-off-ongoing(26) */
+	29,	/* tDCoverall-expiry(29) */
+	30,	/* tDCprep-expiry(30) */
+	35,	/* target-not-allowed(35) */
+	34,	/* time-critical-action(34) */
+	1,	/* time-critical-handover(1) */
+	10,	/* trelocprep-expiry(10) */
+	9,	/* tx2relocoverall-expiry(9) */
+	14,	/* unknown-MME-Code(14) */
+	19,	/* unknown-eNB-Measurement-ID(19) */
+	5,	/* unknown-new-eNB-UE-X2AP-ID(5) */
+	6,	/* unknown-old-eNB-UE-X2AP-ID(6) */
+	49,	/* unknown-old-en-gNB-UE-X2AP-ID(49) */
+	7,	/* unknown-pair-of-UE-X2AP-ID(7) */
+	21,	/* unspecified(21) */
+	42,	/* user-inactivity(42) */
+	24	/* value-out-of-allowed-range(24) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_CauseRadioNetwork_specs_1 = {
+	asn_MAP_E2N_CauseRadioNetwork_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_CauseRadioNetwork_enum2value_1,	/* N => "tag"; sorted by N */
+	51,	/* Number of elements in the maps */
+	23,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CauseRadioNetwork_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CauseRadioNetwork = {
+	"CauseRadioNetwork",
+	"CauseRadioNetwork",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_CauseRadioNetwork_tags_1,
+	sizeof(asn_DEF_E2N_CauseRadioNetwork_tags_1)
+		/sizeof(asn_DEF_E2N_CauseRadioNetwork_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CauseRadioNetwork_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CauseRadioNetwork_tags_1)
+		/sizeof(asn_DEF_E2N_CauseRadioNetwork_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CauseRadioNetwork_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_CauseRadioNetwork_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CauseRadioNetwork.h b/asn1c_defs/E2N_CauseRadioNetwork.h
new file mode 100644
index 0000000..95974bd
--- /dev/null
+++ b/asn1c_defs/E2N_CauseRadioNetwork.h
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CauseRadioNetwork_H_
+#define	_E2N_CauseRadioNetwork_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CauseRadioNetwork {
+	E2N_CauseRadioNetwork_handover_desirable_for_radio_reasons	= 0,
+	E2N_CauseRadioNetwork_time_critical_handover	= 1,
+	E2N_CauseRadioNetwork_resource_optimisation_handover	= 2,
+	E2N_CauseRadioNetwork_reduce_load_in_serving_cell	= 3,
+	E2N_CauseRadioNetwork_partial_handover	= 4,
+	E2N_CauseRadioNetwork_unknown_new_eNB_UE_X2AP_ID	= 5,
+	E2N_CauseRadioNetwork_unknown_old_eNB_UE_X2AP_ID	= 6,
+	E2N_CauseRadioNetwork_unknown_pair_of_UE_X2AP_ID	= 7,
+	E2N_CauseRadioNetwork_ho_target_not_allowed	= 8,
+	E2N_CauseRadioNetwork_tx2relocoverall_expiry	= 9,
+	E2N_CauseRadioNetwork_trelocprep_expiry	= 10,
+	E2N_CauseRadioNetwork_cell_not_available	= 11,
+	E2N_CauseRadioNetwork_no_radio_resources_available_in_target_cell	= 12,
+	E2N_CauseRadioNetwork_invalid_MME_GroupID	= 13,
+	E2N_CauseRadioNetwork_unknown_MME_Code	= 14,
+	E2N_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported	= 15,
+	E2N_CauseRadioNetwork_reportCharacteristicsEmpty	= 16,
+	E2N_CauseRadioNetwork_noReportPeriodicity	= 17,
+	E2N_CauseRadioNetwork_existingMeasurementID	= 18,
+	E2N_CauseRadioNetwork_unknown_eNB_Measurement_ID	= 19,
+	E2N_CauseRadioNetwork_measurement_temporarily_not_available	= 20,
+	E2N_CauseRadioNetwork_unspecified	= 21,
+	/*
+	 * Enumeration is extensible
+	 */
+	E2N_CauseRadioNetwork_load_balancing	= 22,
+	E2N_CauseRadioNetwork_handover_optimisation	= 23,
+	E2N_CauseRadioNetwork_value_out_of_allowed_range	= 24,
+	E2N_CauseRadioNetwork_multiple_E_RAB_ID_instances	= 25,
+	E2N_CauseRadioNetwork_switch_off_ongoing	= 26,
+	E2N_CauseRadioNetwork_not_supported_QCI_value	= 27,
+	E2N_CauseRadioNetwork_measurement_not_supported_for_the_object	= 28,
+	E2N_CauseRadioNetwork_tDCoverall_expiry	= 29,
+	E2N_CauseRadioNetwork_tDCprep_expiry	= 30,
+	E2N_CauseRadioNetwork_action_desirable_for_radio_reasons	= 31,
+	E2N_CauseRadioNetwork_reduce_load	= 32,
+	E2N_CauseRadioNetwork_resource_optimisation	= 33,
+	E2N_CauseRadioNetwork_time_critical_action	= 34,
+	E2N_CauseRadioNetwork_target_not_allowed	= 35,
+	E2N_CauseRadioNetwork_no_radio_resources_available	= 36,
+	E2N_CauseRadioNetwork_invalid_QoS_combination	= 37,
+	E2N_CauseRadioNetwork_encryption_algorithms_not_aupported	= 38,
+	E2N_CauseRadioNetwork_procedure_cancelled	= 39,
+	E2N_CauseRadioNetwork_rRM_purpose	= 40,
+	E2N_CauseRadioNetwork_improve_user_bit_rate	= 41,
+	E2N_CauseRadioNetwork_user_inactivity	= 42,
+	E2N_CauseRadioNetwork_radio_connection_with_UE_lost	= 43,
+	E2N_CauseRadioNetwork_failure_in_the_radio_interface_procedure	= 44,
+	E2N_CauseRadioNetwork_bearer_option_not_supported	= 45,
+	E2N_CauseRadioNetwork_mCG_Mobility	= 46,
+	E2N_CauseRadioNetwork_sCG_Mobility	= 47,
+	E2N_CauseRadioNetwork_count_reaches_max_value	= 48,
+	E2N_CauseRadioNetwork_unknown_old_en_gNB_UE_X2AP_ID	= 49,
+	E2N_CauseRadioNetwork_pDCP_Overload	= 50
+} e_E2N_CauseRadioNetwork;
+
+/* E2N_CauseRadioNetwork */
+typedef long	 E2N_CauseRadioNetwork_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_CauseRadioNetwork_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CauseRadioNetwork;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseRadioNetwork_specs_1;
+asn_struct_free_f CauseRadioNetwork_free;
+asn_struct_print_f CauseRadioNetwork_print;
+asn_constr_check_f CauseRadioNetwork_constraint;
+ber_type_decoder_f CauseRadioNetwork_decode_ber;
+der_type_encoder_f CauseRadioNetwork_encode_der;
+xer_type_decoder_f CauseRadioNetwork_decode_xer;
+xer_type_encoder_f CauseRadioNetwork_encode_xer;
+per_type_decoder_f CauseRadioNetwork_decode_uper;
+per_type_encoder_f CauseRadioNetwork_encode_uper;
+per_type_decoder_f CauseRadioNetwork_decode_aper;
+per_type_encoder_f CauseRadioNetwork_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CauseRadioNetwork_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CauseTransport.c b/asn1c_defs/E2N_CauseTransport.c
new file mode 100644
index 0000000..b23cb83
--- /dev/null
+++ b/asn1c_defs/E2N_CauseTransport.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CauseTransport.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_CauseTransport_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_CauseTransport_value2enum_1[] = {
+	{ 0,	30,	"transport-resource-unavailable" },
+	{ 1,	11,	"unspecified" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_CauseTransport_enum2value_1[] = {
+	0,	/* transport-resource-unavailable(0) */
+	1	/* unspecified(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_CauseTransport_specs_1 = {
+	asn_MAP_E2N_CauseTransport_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_CauseTransport_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CauseTransport_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CauseTransport = {
+	"CauseTransport",
+	"CauseTransport",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_CauseTransport_tags_1,
+	sizeof(asn_DEF_E2N_CauseTransport_tags_1)
+		/sizeof(asn_DEF_E2N_CauseTransport_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CauseTransport_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CauseTransport_tags_1)
+		/sizeof(asn_DEF_E2N_CauseTransport_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CauseTransport_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_CauseTransport_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CauseTransport.h b/asn1c_defs/E2N_CauseTransport.h
new file mode 100644
index 0000000..245c97f
--- /dev/null
+++ b/asn1c_defs/E2N_CauseTransport.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CauseTransport_H_
+#define	_E2N_CauseTransport_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CauseTransport {
+	E2N_CauseTransport_transport_resource_unavailable	= 0,
+	E2N_CauseTransport_unspecified	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_CauseTransport;
+
+/* E2N_CauseTransport */
+typedef long	 E2N_CauseTransport_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_CauseTransport_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CauseTransport;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1;
+asn_struct_free_f CauseTransport_free;
+asn_struct_print_f CauseTransport_print;
+asn_constr_check_f CauseTransport_constraint;
+ber_type_decoder_f CauseTransport_decode_ber;
+der_type_encoder_f CauseTransport_encode_der;
+xer_type_decoder_f CauseTransport_decode_xer;
+xer_type_encoder_f CauseTransport_encode_xer;
+per_type_decoder_f CauseTransport_decode_uper;
+per_type_encoder_f CauseTransport_encode_uper;
+per_type_decoder_f CauseTransport_decode_aper;
+per_type_encoder_f CauseTransport_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CauseTransport_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_Criticality.c b/asn1c_defs/E2N_Criticality.c
new file mode 100644
index 0000000..127c091
--- /dev/null
+++ b/asn1c_defs/E2N_Criticality.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_Criticality.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_Criticality_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_Criticality_value2enum_1[] = {
+	{ 0,	6,	"reject" },
+	{ 1,	6,	"ignore" },
+	{ 2,	6,	"notify" }
+};
+static const unsigned int asn_MAP_E2N_Criticality_enum2value_1[] = {
+	1,	/* ignore(1) */
+	2,	/* notify(2) */
+	0	/* reject(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_Criticality_specs_1 = {
+	asn_MAP_E2N_Criticality_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_Criticality_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_Criticality_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_Criticality = {
+	"Criticality",
+	"Criticality",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_Criticality_tags_1,
+	sizeof(asn_DEF_E2N_Criticality_tags_1)
+		/sizeof(asn_DEF_E2N_Criticality_tags_1[0]), /* 1 */
+	asn_DEF_E2N_Criticality_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_Criticality_tags_1)
+		/sizeof(asn_DEF_E2N_Criticality_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_Criticality_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_Criticality_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_Criticality.h b/asn1c_defs/E2N_Criticality.h
new file mode 100644
index 0000000..f8a38fa
--- /dev/null
+++ b/asn1c_defs/E2N_Criticality.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_Criticality_H_
+#define	_E2N_Criticality_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_Criticality {
+	E2N_Criticality_reject	= 0,
+	E2N_Criticality_ignore	= 1,
+	E2N_Criticality_notify	= 2
+} e_E2N_Criticality;
+
+/* E2N_Criticality */
+typedef long	 E2N_Criticality_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_Criticality_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_Criticality;
+extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1;
+asn_struct_free_f Criticality_free;
+asn_struct_print_f Criticality_print;
+asn_constr_check_f Criticality_constraint;
+ber_type_decoder_f Criticality_decode_ber;
+der_type_encoder_f Criticality_encode_der;
+xer_type_decoder_f Criticality_decode_xer;
+xer_type_encoder_f Criticality_encode_xer;
+per_type_decoder_f Criticality_decode_uper;
+per_type_encoder_f Criticality_encode_uper;
+per_type_decoder_f Criticality_decode_aper;
+per_type_encoder_f Criticality_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_Criticality_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.c b/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.c
new file mode 100644
index 0000000..eab3410
--- /dev/null
+++ b/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.c
@@ -0,0 +1,124 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CriticalityDiagnostics-IE-List.h"
+
+#include "E2N_ProtocolExtensionContainer.h"
+asn_per_constraints_t asn_PER_type_E2N_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List__Member, iECriticality),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iECriticality"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List__Member, iE_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List__Member, typeOfError),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_TypeOfError,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"typeOfError"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_CriticalityDiagnostics_IE_List__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolExtensionContainer_480P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_E2N_Member_oms_2[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_E2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* typeOfError */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_Member_specs_2 = {
+	sizeof(struct E2N_CriticalityDiagnostics_IE_List__Member),
+	offsetof(struct E2N_CriticalityDiagnostics_IE_List__Member, _asn_ctx),
+	asn_MAP_E2N_Member_tag2el_2,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_Member_tags_2,
+	sizeof(asn_DEF_E2N_Member_tags_2)
+		/sizeof(asn_DEF_E2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_E2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_E2N_Member_tags_2)
+		/sizeof(asn_DEF_E2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_Member_2,
+	4,	/* Elements count */
+	&asn_SPC_E2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_IE_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_CriticalityDiagnostics_IE_List_specs_1 = {
+	sizeof(struct E2N_CriticalityDiagnostics_IE_List),
+	offsetof(struct E2N_CriticalityDiagnostics_IE_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_IE_List = {
+	"CriticalityDiagnostics-IE-List",
+	"CriticalityDiagnostics-IE-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1,
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_CriticalityDiagnostics_IE_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_CriticalityDiagnostics_IE_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.h b/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.h
new file mode 100644
index 0000000..baefda3
--- /dev/null
+++ b/asn1c_defs/E2N_CriticalityDiagnostics-IE-List.h
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CriticalityDiagnostics_IE_List_H_
+#define	_E2N_CriticalityDiagnostics_IE_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "E2N_Criticality.h"
+#include "E2N_ProtocolIE-ID.h"
+#include "E2N_TypeOfError.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct E2N_CriticalityDiagnostics_IE_List__Member {
+	E2N_Criticality_t	 iECriticality;
+	E2N_ProtocolIE_ID_t	 iE_ID;
+	E2N_TypeOfError_t	 typeOfError;
+	struct E2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CriticalityDiagnostics_IE_List__Member;
+
+/* E2N_CriticalityDiagnostics-IE-List */
+typedef struct E2N_CriticalityDiagnostics_IE_List {
+	A_SEQUENCE_OF(CriticalityDiagnostics_IE_List__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_CriticalityDiagnostics_IE_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_IE_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_CriticalityDiagnostics_IE_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_IE_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2N_CriticalityDiagnostics_IE_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CriticalityDiagnostics_IE_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_CriticalityDiagnostics.c b/asn1c_defs/E2N_CriticalityDiagnostics.c
new file mode 100644
index 0000000..4f471ab
--- /dev/null
+++ b/asn1c_defs/E2N_CriticalityDiagnostics.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_CriticalityDiagnostics.h"
+
+#include "E2N_CriticalityDiagnostics-IE-List.h"
+#include "E2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_1[] = {
+	{ ATF_POINTER, 5, offsetof(struct E2N_CriticalityDiagnostics, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProcedureCode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_POINTER, 4, offsetof(struct E2N_CriticalityDiagnostics, triggeringMessage),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_TriggeringMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggeringMessage"
+		},
+	{ ATF_POINTER, 3, offsetof(struct E2N_CriticalityDiagnostics, procedureCriticality),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"procedureCriticality"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2N_CriticalityDiagnostics, iEsCriticalityDiagnostics),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CriticalityDiagnostics_IE_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iEsCriticalityDiagnostics"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_CriticalityDiagnostics, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolExtensionContainer_480P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_E2N_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_E2N_CriticalityDiagnostics_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_CriticalityDiagnostics_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* iEsCriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_CriticalityDiagnostics_specs_1 = {
+	sizeof(struct E2N_CriticalityDiagnostics),
+	offsetof(struct E2N_CriticalityDiagnostics, _asn_ctx),
+	asn_MAP_E2N_CriticalityDiagnostics_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_E2N_CriticalityDiagnostics_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics = {
+	"CriticalityDiagnostics",
+	"CriticalityDiagnostics",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_CriticalityDiagnostics_tags_1,
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CriticalityDiagnostics_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_CriticalityDiagnostics_1,
+	5,	/* Elements count */
+	&asn_SPC_E2N_CriticalityDiagnostics_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_CriticalityDiagnostics.h b/asn1c_defs/E2N_CriticalityDiagnostics.h
new file mode 100644
index 0000000..e732492
--- /dev/null
+++ b/asn1c_defs/E2N_CriticalityDiagnostics.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_CriticalityDiagnostics_H_
+#define	_E2N_CriticalityDiagnostics_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProcedureCode.h"
+#include "E2N_TriggeringMessage.h"
+#include "E2N_Criticality.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_CriticalityDiagnostics_IE_List;
+struct E2N_ProtocolExtensionContainer;
+
+/* E2N_CriticalityDiagnostics */
+typedef struct E2N_CriticalityDiagnostics {
+	E2N_ProcedureCode_t	*procedureCode;	/* OPTIONAL */
+	E2N_TriggeringMessage_t	*triggeringMessage;	/* OPTIONAL */
+	E2N_Criticality_t	*procedureCriticality;	/* OPTIONAL */
+	struct E2N_CriticalityDiagnostics_IE_List	*iEsCriticalityDiagnostics;	/* OPTIONAL */
+	struct E2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_CriticalityDiagnostics_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_CriticalityDiagnostics_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2AP-PDU.c b/asn1c_defs/E2N_E2AP-PDU.c
new file mode 100644
index 0000000..7feb11e
--- /dev/null
+++ b/asn1c_defs/E2N_E2AP-PDU.c
@@ -0,0 +1,75 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2AP-PDU.h"
+
+#include "E2N_InitiatingMessage.h"
+#include "E2N_SuccessfulOutcome.h"
+#include "E2N_UnsuccessfulOutcome.h"
+static asn_per_constraints_t asn_PER_type_E2N_E2AP_PDU_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_E2AP_PDU_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2N_E2AP_PDU, choice.initiatingMessage),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InitiatingMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"initiatingMessage"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2N_E2AP_PDU, choice.successfulOutcome),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_SuccessfulOutcome,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"successfulOutcome"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2N_E2AP_PDU, choice.unsuccessfulOutcome),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_UnsuccessfulOutcome,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"unsuccessfulOutcome"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2AP_PDU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_E2AP_PDU_specs_1 = {
+	sizeof(struct E2N_E2AP_PDU),
+	offsetof(struct E2N_E2AP_PDU, _asn_ctx),
+	offsetof(struct E2N_E2AP_PDU, present),
+	sizeof(((struct E2N_E2AP_PDU *)0)->present),
+	asn_MAP_E2N_E2AP_PDU_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2AP_PDU = {
+	"E2AP-PDU",
+	"E2AP-PDU",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_E2AP_PDU_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_E2AP_PDU_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_E2AP_PDU_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2AP-PDU.h b/asn1c_defs/E2N_E2AP-PDU.h
new file mode 100644
index 0000000..92d9c9d
--- /dev/null
+++ b/asn1c_defs/E2N_E2AP-PDU.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2AP_PDU_H_
+#define	_E2N_E2AP_PDU_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_E2AP_PDU_PR {
+	E2N_E2AP_PDU_PR_NOTHING,	/* No components present */
+	E2N_E2AP_PDU_PR_initiatingMessage,
+	E2N_E2AP_PDU_PR_successfulOutcome,
+	E2N_E2AP_PDU_PR_unsuccessfulOutcome
+	/* Extensions may appear below */
+	
+} E2N_E2AP_PDU_PR;
+
+/* Forward declarations */
+struct E2N_InitiatingMessage;
+struct E2N_SuccessfulOutcome;
+struct E2N_UnsuccessfulOutcome;
+
+/* E2N_E2AP-PDU */
+typedef struct E2N_E2AP_PDU {
+	E2N_E2AP_PDU_PR present;
+	union E2N_E2AP_PDU_u {
+		struct E2N_InitiatingMessage	*initiatingMessage;
+		struct E2N_SuccessfulOutcome	*successfulOutcome;
+		struct E2N_UnsuccessfulOutcome	*unsuccessfulOutcome;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2AP_PDU_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2AP_PDU;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2AP_PDU_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.c b/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.c
new file mode 100644
index 0000000..3c3797a
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.c
@@ -0,0 +1,136 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-actionDefinition.h"
+
+#include "E2N_ActionParameter-Item.h"
+static int
+memb_E2N_actionParameter_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 255)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_E2N_actionParameter_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  255 }	/* (SIZE(1..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_actionParameter_List_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  255 }	/* (SIZE(1..255)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_actionParameter_List_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ActionParameter_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_actionParameter_List_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_actionParameter_List_specs_3 = {
+	sizeof(struct E2N_E2SM_gNB_X2_actionDefinition__actionParameter_List),
+	offsetof(struct E2N_E2SM_gNB_X2_actionDefinition__actionParameter_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_actionParameter_List_3 = {
+	"actionParameter-List",
+	"actionParameter-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_actionParameter_List_tags_3,
+	sizeof(asn_DEF_E2N_actionParameter_List_tags_3)
+		/sizeof(asn_DEF_E2N_actionParameter_List_tags_3[0]) - 1, /* 1 */
+	asn_DEF_E2N_actionParameter_List_tags_3,	/* Same as above */
+	sizeof(asn_DEF_E2N_actionParameter_List_tags_3)
+		/sizeof(asn_DEF_E2N_actionParameter_List_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_E2N_actionParameter_List_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_actionParameter_List_3,
+	1,	/* Single element */
+	&asn_SPC_E2N_actionParameter_List_specs_3	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_actionDefinition_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_actionDefinition, style_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Style_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"style-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_E2SM_gNB_X2_actionDefinition, actionParameter_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_E2N_actionParameter_List_3,
+		0,
+		{ 0, &asn_PER_memb_E2N_actionParameter_List_constr_3,  memb_E2N_actionParameter_List_constraint_1 },
+		0, 0, /* No default value */
+		"actionParameter-List"
+		},
+};
+static const int asn_MAP_E2N_E2SM_gNB_X2_actionDefinition_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_actionDefinition_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* style-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionParameter-List */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_actionDefinition_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_actionDefinition),
+	offsetof(struct E2N_E2SM_gNB_X2_actionDefinition, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_actionDefinition_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2N_E2SM_gNB_X2_actionDefinition_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_actionDefinition = {
+	"E2SM-gNB-X2-actionDefinition",
+	"E2SM-gNB-X2-actionDefinition",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_actionDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_actionDefinition_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_actionDefinition_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.h b/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.h
new file mode 100644
index 0000000..7b2b1be
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-actionDefinition.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_actionDefinition_H_
+#define	_E2N_E2SM_gNB_X2_actionDefinition_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_Style-ID.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ActionParameter_Item;
+
+/* E2N_E2SM-gNB-X2-actionDefinition */
+typedef struct E2N_E2SM_gNB_X2_actionDefinition {
+	E2N_Style_ID_t	 style_ID;
+	struct E2N_E2SM_gNB_X2_actionDefinition__actionParameter_List {
+		A_SEQUENCE_OF(struct E2N_ActionParameter_Item) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} *actionParameter_List;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_actionDefinition_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_actionDefinition;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_actionDefinition_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.c b/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.c
new file mode 100644
index 0000000..d0171a7
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-callProcessID.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_callProcessID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_callProcessID, callProcess_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CallProcess_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"callProcess-ID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_callProcessID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* callProcess-ID */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_callProcessID_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_callProcessID),
+	offsetof(struct E2N_E2SM_gNB_X2_callProcessID, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_callProcessID_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_callProcessID = {
+	"E2SM-gNB-X2-callProcessID",
+	"E2SM-gNB-X2-callProcessID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_callProcessID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_callProcessID_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_callProcessID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.h b/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.h
new file mode 100644
index 0000000..85b9156
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-callProcessID.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_callProcessID_H_
+#define	_E2N_E2SM_gNB_X2_callProcessID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_CallProcess-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_E2SM-gNB-X2-callProcessID */
+typedef struct E2N_E2SM_gNB_X2_callProcessID {
+	E2N_CallProcess_ID_t	 callProcess_ID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_callProcessID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_callProcessID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_callProcessID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.c b/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.c
new file mode 100644
index 0000000..3f1aad6
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-controlHeader.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_controlHeader_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_controlHeader, interface_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_Interface_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interface-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_controlHeader, interfaceDirection),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceDirection,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceDirection"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_controlHeader_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* interfaceDirection */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_controlHeader_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_controlHeader),
+	offsetof(struct E2N_E2SM_gNB_X2_controlHeader, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_controlHeader_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_controlHeader = {
+	"E2SM-gNB-X2-controlHeader",
+	"E2SM-gNB-X2-controlHeader",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlHeader_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_controlHeader_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_controlHeader_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.h b/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.h
new file mode 100644
index 0000000..eac731d
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-controlHeader.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_controlHeader_H_
+#define	_E2N_E2SM_gNB_X2_controlHeader_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_Interface-ID.h"
+#include "E2N_InterfaceDirection.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_E2SM-gNB-X2-controlHeader */
+typedef struct E2N_E2SM_gNB_X2_controlHeader {
+	E2N_Interface_ID_t	 interface_ID;
+	E2N_InterfaceDirection_t	 interfaceDirection;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_controlHeader_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_controlHeader;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_controlHeader_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.c b/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.c
new file mode 100644
index 0000000..d3dac05
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-controlMessage.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_controlMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_controlMessage, interfaceMessage),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceMessage"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_controlMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interfaceMessage */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_controlMessage_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_controlMessage),
+	offsetof(struct E2N_E2SM_gNB_X2_controlMessage, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_controlMessage_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_controlMessage = {
+	"E2SM-gNB-X2-controlMessage",
+	"E2SM-gNB-X2-controlMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_controlMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_controlMessage_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_controlMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.h b/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.h
new file mode 100644
index 0000000..6d6aec5
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-controlMessage.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_controlMessage_H_
+#define	_E2N_E2SM_gNB_X2_controlMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_InterfaceMessage.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_E2SM-gNB-X2-controlMessage */
+typedef struct E2N_E2SM_gNB_X2_controlMessage {
+	E2N_InterfaceMessage_t	 interfaceMessage;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_controlMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_controlMessage;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_controlMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.c b/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.c
new file mode 100644
index 0000000..20d136e
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.c
@@ -0,0 +1,156 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-eventTriggerDefinition.h"
+
+#include "E2N_InterfaceProtocolIE-Item.h"
+static int
+memb_E2N_interfaceProtocolIE_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 15)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_E2N_interfaceProtocolIE_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  15 }	/* (SIZE(1..15)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_interfaceProtocolIE_List_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  15 }	/* (SIZE(1..15)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_interfaceProtocolIE_List_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_InterfaceProtocolIE_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_interfaceProtocolIE_List_tags_5[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_interfaceProtocolIE_List_specs_5 = {
+	sizeof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List),
+	offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_interfaceProtocolIE_List_5 = {
+	"interfaceProtocolIE-List",
+	"interfaceProtocolIE-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_interfaceProtocolIE_List_tags_5,
+	sizeof(asn_DEF_E2N_interfaceProtocolIE_List_tags_5)
+		/sizeof(asn_DEF_E2N_interfaceProtocolIE_List_tags_5[0]) - 1, /* 1 */
+	asn_DEF_E2N_interfaceProtocolIE_List_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_interfaceProtocolIE_List_tags_5)
+		/sizeof(asn_DEF_E2N_interfaceProtocolIE_List_tags_5[0]), /* 2 */
+	{ 0, &asn_PER_type_E2N_interfaceProtocolIE_List_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_interfaceProtocolIE_List_5,
+	1,	/* Single element */
+	&asn_SPC_E2N_interfaceProtocolIE_List_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_eventTriggerDefinition_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition, interface_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_Interface_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interface-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition, interfaceDirection),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceDirection,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceDirection"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition, interfaceMessageType),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceMessageType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceMessageType"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition, interfaceProtocolIE_List),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		0,
+		&asn_DEF_E2N_interfaceProtocolIE_List_5,
+		0,
+		{ 0, &asn_PER_memb_E2N_interfaceProtocolIE_List_constr_5,  memb_E2N_interfaceProtocolIE_List_constraint_1 },
+		0, 0, /* No default value */
+		"interfaceProtocolIE-List"
+		},
+};
+static const int asn_MAP_E2N_E2SM_gNB_X2_eventTriggerDefinition_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_eventTriggerDefinition_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceDirection */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* interfaceMessageType */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* interfaceProtocolIE-List */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_eventTriggerDefinition_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition),
+	offsetof(struct E2N_E2SM_gNB_X2_eventTriggerDefinition, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_eventTriggerDefinition_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_E2SM_gNB_X2_eventTriggerDefinition_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition = {
+	"E2SM-gNB-X2-eventTriggerDefinition",
+	"E2SM-gNB-X2-eventTriggerDefinition",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_eventTriggerDefinition_1,
+	4,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_eventTriggerDefinition_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.h b/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.h
new file mode 100644
index 0000000..8805611
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-eventTriggerDefinition.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_eventTriggerDefinition_H_
+#define	_E2N_E2SM_gNB_X2_eventTriggerDefinition_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_Interface-ID.h"
+#include "E2N_InterfaceDirection.h"
+#include "E2N_InterfaceMessageType.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_InterfaceProtocolIE_Item;
+
+/* E2N_E2SM-gNB-X2-eventTriggerDefinition */
+typedef struct E2N_E2SM_gNB_X2_eventTriggerDefinition {
+	E2N_Interface_ID_t	 interface_ID;
+	E2N_InterfaceDirection_t	 interfaceDirection;
+	E2N_InterfaceMessageType_t	 interfaceMessageType;
+	struct E2N_E2SM_gNB_X2_eventTriggerDefinition__interfaceProtocolIE_List {
+		A_SEQUENCE_OF(struct E2N_InterfaceProtocolIE_Item) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} *interfaceProtocolIE_List;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_eventTriggerDefinition_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_eventTriggerDefinition;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_eventTriggerDefinition_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.c b/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.c
new file mode 100644
index 0000000..b0bd884
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.c
@@ -0,0 +1,72 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-indicationHeader.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_indicationHeader_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_indicationHeader, interface_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_Interface_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interface-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_indicationHeader, interfaceDirection),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceDirection,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceDirection"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_E2SM_gNB_X2_indicationHeader, timestamp),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_TimeStamp,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"timestamp"
+		},
+};
+static const int asn_MAP_E2N_E2SM_gNB_X2_indicationHeader_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_indicationHeader_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interface-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceDirection */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* timestamp */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_indicationHeader_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_indicationHeader),
+	offsetof(struct E2N_E2SM_gNB_X2_indicationHeader, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_indicationHeader_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2N_E2SM_gNB_X2_indicationHeader_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_indicationHeader = {
+	"E2SM-gNB-X2-indicationHeader",
+	"E2SM-gNB-X2-indicationHeader",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationHeader_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_indicationHeader_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_indicationHeader_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.h b/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.h
new file mode 100644
index 0000000..4008a4f
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-indicationHeader.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_indicationHeader_H_
+#define	_E2N_E2SM_gNB_X2_indicationHeader_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_Interface-ID.h"
+#include "E2N_InterfaceDirection.h"
+#include "E2N_TimeStamp.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_E2SM-gNB-X2-indicationHeader */
+typedef struct E2N_E2SM_gNB_X2_indicationHeader {
+	E2N_Interface_ID_t	 interface_ID;
+	E2N_InterfaceDirection_t	 interfaceDirection;
+	E2N_TimeStamp_t	*timestamp;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_indicationHeader_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_indicationHeader;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_indicationHeader_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.c b/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.c
new file mode 100644
index 0000000..b9617e9
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_E2SM-gNB-X2-indicationMessage.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_E2SM_gNB_X2_indicationMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_E2SM_gNB_X2_indicationMessage, interfaceMessage),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceMessage"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_E2SM_gNB_X2_indicationMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interfaceMessage */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_E2SM_gNB_X2_indicationMessage_specs_1 = {
+	sizeof(struct E2N_E2SM_gNB_X2_indicationMessage),
+	offsetof(struct E2N_E2SM_gNB_X2_indicationMessage, _asn_ctx),
+	asn_MAP_E2N_E2SM_gNB_X2_indicationMessage_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_indicationMessage = {
+	"E2SM-gNB-X2-indicationMessage",
+	"E2SM-gNB-X2-indicationMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1,
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1)
+		/sizeof(asn_DEF_E2N_E2SM_gNB_X2_indicationMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_E2SM_gNB_X2_indicationMessage_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_E2SM_gNB_X2_indicationMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.h b/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.h
new file mode 100644
index 0000000..9fc80b8
--- /dev/null
+++ b/asn1c_defs/E2N_E2SM-gNB-X2-indicationMessage.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_E2SM_gNB_X2_indicationMessage_H_
+#define	_E2N_E2SM_gNB_X2_indicationMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_InterfaceMessage.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_E2SM-gNB-X2-indicationMessage */
+typedef struct E2N_E2SM_gNB_X2_indicationMessage {
+	E2N_InterfaceMessage_t	 interfaceMessage;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_E2SM_gNB_X2_indicationMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_E2SM_gNB_X2_indicationMessage;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_E2SM_gNB_X2_indicationMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ENB-ID.c b/asn1c_defs/E2N_ENB-ID.c
new file mode 100644
index 0000000..bd0755c
--- /dev/null
+++ b/asn1c_defs/E2N_ENB-ID.c
@@ -0,0 +1,226 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ENB-ID.h"
+
+static int
+memb_E2N_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 28)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 18)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 21)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_macro_eNB_ID_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  20,  20 }	/* (SIZE(20..20)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_home_eNB_ID_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  28,  28 }	/* (SIZE(28..28)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_short_Macro_eNB_ID_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  18,  18 }	/* (SIZE(18..18)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_long_Macro_eNB_ID_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  21,  21 }	/* (SIZE(21..21)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ENB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_ENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ENB_ID, choice.macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_E2N_macro_eNB_ID_constr_2,  memb_E2N_macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"macro-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ENB_ID, choice.home_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_E2N_home_eNB_ID_constr_3,  memb_E2N_home_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"home-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ENB_ID, choice.short_Macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_E2N_short_Macro_eNB_ID_constr_5,  memb_E2N_short_Macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"short-Macro-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_ENB_ID, choice.long_Macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_E2N_long_Macro_eNB_ID_constr_6,  memb_E2N_long_Macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"long-Macro-eNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_ENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_ENB_ID_specs_1 = {
+	sizeof(struct E2N_ENB_ID),
+	offsetof(struct E2N_ENB_ID, _asn_ctx),
+	offsetof(struct E2N_ENB_ID, present),
+	sizeof(((struct E2N_ENB_ID *)0)->present),
+	asn_MAP_E2N_ENB_ID_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ENB_ID = {
+	"ENB-ID",
+	"ENB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_ENB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_ENB_ID_1,
+	4,	/* Elements count */
+	&asn_SPC_E2N_ENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ENB-ID.h b/asn1c_defs/E2N_ENB-ID.h
new file mode 100644
index 0000000..4935cad
--- /dev/null
+++ b/asn1c_defs/E2N_ENB-ID.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ENB_ID_H_
+#define	_E2N_ENB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_ENB_ID_PR {
+	E2N_ENB_ID_PR_NOTHING,	/* No components present */
+	E2N_ENB_ID_PR_macro_eNB_ID,
+	E2N_ENB_ID_PR_home_eNB_ID,
+	/* Extensions may appear below */
+	E2N_ENB_ID_PR_short_Macro_eNB_ID,
+	E2N_ENB_ID_PR_long_Macro_eNB_ID
+} E2N_ENB_ID_PR;
+
+/* E2N_ENB-ID */
+typedef struct E2N_ENB_ID {
+	E2N_ENB_ID_PR present;
+	union E2N_ENB_ID_u {
+		BIT_STRING_t	 macro_eNB_ID;
+		BIT_STRING_t	 home_eNB_ID;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		BIT_STRING_t	 short_Macro_eNB_ID;
+		BIT_STRING_t	 long_Macro_eNB_ID;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ENB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ENB_ID;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_ENB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_ENB_ID_1[4];
+extern asn_per_constraints_t asn_PER_type_E2N_ENB_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ENB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_GNB-ID.c b/asn1c_defs/E2N_GNB-ID.c
new file mode 100644
index 0000000..42c5da3
--- /dev/null
+++ b/asn1c_defs/E2N_GNB-ID.c
@@ -0,0 +1,88 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_GNB-ID.h"
+
+static int
+memb_E2N_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 22 && size <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_gNB_ID_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  22,  32 }	/* (SIZE(22..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_GNB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_GNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GNB_ID, choice.gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_E2N_gNB_ID_constr_2,  memb_E2N_gNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"gNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_GNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_GNB_ID_specs_1 = {
+	sizeof(struct E2N_GNB_ID),
+	offsetof(struct E2N_GNB_ID, _asn_ctx),
+	offsetof(struct E2N_GNB_ID, present),
+	sizeof(((struct E2N_GNB_ID *)0)->present),
+	asn_MAP_E2N_GNB_ID_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0,
+	1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_GNB_ID = {
+	"GNB-ID",
+	"GNB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_GNB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_GNB_ID_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_GNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_GNB-ID.h b/asn1c_defs/E2N_GNB-ID.h
new file mode 100644
index 0000000..bc9ed2e
--- /dev/null
+++ b/asn1c_defs/E2N_GNB-ID.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_GNB_ID_H_
+#define	_E2N_GNB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_GNB_ID_PR {
+	E2N_GNB_ID_PR_NOTHING,	/* No components present */
+	E2N_GNB_ID_PR_gNB_ID
+	/* Extensions may appear below */
+	
+} E2N_GNB_ID_PR;
+
+/* E2N_GNB-ID */
+typedef struct E2N_GNB_ID {
+	E2N_GNB_ID_PR present;
+	union E2N_GNB_ID_u {
+		BIT_STRING_t	 gNB_ID;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_GNB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_GNB_ID;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_GNB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_GNB_ID_1[1];
+extern asn_per_constraints_t asn_PER_type_E2N_GNB_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_GNB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_GlobalENB-ID.c b/asn1c_defs/E2N_GlobalENB-ID.c
new file mode 100644
index 0000000..729c405
--- /dev/null
+++ b/asn1c_defs/E2N_GlobalENB-ID.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_GlobalENB-ID.h"
+
+#include "E2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_E2N_GlobalENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalENB_ID, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalENB_ID, eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_ENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_GlobalENB_ID, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolExtensionContainer_480P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_E2N_GlobalENB_ID_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_E2N_GlobalENB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_GlobalENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalENB_ID_specs_1 = {
+	sizeof(struct E2N_GlobalENB_ID),
+	offsetof(struct E2N_GlobalENB_ID, _asn_ctx),
+	asn_MAP_E2N_GlobalENB_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2N_GlobalENB_ID_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_GlobalENB_ID = {
+	"GlobalENB-ID",
+	"GlobalENB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_GlobalENB_ID_tags_1,
+	sizeof(asn_DEF_E2N_GlobalENB_ID_tags_1)
+		/sizeof(asn_DEF_E2N_GlobalENB_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_GlobalENB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_GlobalENB_ID_tags_1)
+		/sizeof(asn_DEF_E2N_GlobalENB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_GlobalENB_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_GlobalENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_GlobalENB-ID.h b/asn1c_defs/E2N_GlobalENB-ID.h
new file mode 100644
index 0000000..f30bd68
--- /dev/null
+++ b/asn1c_defs/E2N_GlobalENB-ID.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_GlobalENB_ID_H_
+#define	_E2N_GlobalENB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_PLMN-Identity.h"
+#include "E2N_ENB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolExtensionContainer;
+
+/* E2N_GlobalENB-ID */
+typedef struct E2N_GlobalENB_ID {
+	E2N_PLMN_Identity_t	 pLMN_Identity;
+	E2N_ENB_ID_t	 eNB_ID;
+	struct E2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_GlobalENB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_GlobalENB_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalENB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_GlobalENB_ID_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_GlobalENB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_GlobalGNB-ID.c b/asn1c_defs/E2N_GlobalGNB-ID.c
new file mode 100644
index 0000000..350b610
--- /dev/null
+++ b/asn1c_defs/E2N_GlobalGNB-ID.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_GlobalGNB-ID.h"
+
+#include "E2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_E2N_GlobalGNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalGNB_ID, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalGNB_ID, gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_GNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_GlobalGNB_ID, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolExtensionContainer_480P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_E2N_GlobalGNB_ID_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_E2N_GlobalGNB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_GlobalGNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalGNB_ID_specs_1 = {
+	sizeof(struct E2N_GlobalGNB_ID),
+	offsetof(struct E2N_GlobalGNB_ID, _asn_ctx),
+	asn_MAP_E2N_GlobalGNB_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2N_GlobalGNB_ID_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_GlobalGNB_ID = {
+	"GlobalGNB-ID",
+	"GlobalGNB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_GlobalGNB_ID_tags_1,
+	sizeof(asn_DEF_E2N_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_E2N_GlobalGNB_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_GlobalGNB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_E2N_GlobalGNB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_GlobalGNB_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_GlobalGNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_GlobalGNB-ID.h b/asn1c_defs/E2N_GlobalGNB-ID.h
new file mode 100644
index 0000000..b703849
--- /dev/null
+++ b/asn1c_defs/E2N_GlobalGNB-ID.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_GlobalGNB_ID_H_
+#define	_E2N_GlobalGNB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_PLMN-Identity.h"
+#include "E2N_GNB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolExtensionContainer;
+
+/* E2N_GlobalGNB-ID */
+typedef struct E2N_GlobalGNB_ID {
+	E2N_PLMN_Identity_t	 pLMN_Identity;
+	E2N_GNB_ID_t	 gNB_ID;
+	struct E2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_GlobalGNB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_GlobalGNB_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalGNB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_GlobalGNB_ID_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_GlobalGNB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InitiatingMessage.c b/asn1c_defs/E2N_InitiatingMessage.c
new file mode 100644
index 0000000..1394c69
--- /dev/null
+++ b/asn1c_defs/E2N_InitiatingMessage.c
@@ -0,0 +1,338 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InitiatingMessage.h"
+
+static const long asn_VAL_1_E2N_id_ricSubscription = 201;
+static const long asn_VAL_1_E2N_reject = 0;
+static const long asn_VAL_2_E2N_id_ricSubscriptionDelete = 202;
+static const long asn_VAL_2_E2N_reject = 0;
+static const long asn_VAL_3_E2N_id_ricServiceUpdate = 203;
+static const long asn_VAL_3_E2N_reject = 0;
+static const long asn_VAL_4_E2N_id_ricControl = 204;
+static const long asn_VAL_4_E2N_reject = 0;
+static const long asn_VAL_5_E2N_id_ricIndication = 205;
+static const long asn_VAL_5_E2N_ignore = 1;
+static const long asn_VAL_6_E2N_id_ricServiceQuery = 206;
+static const long asn_VAL_6_E2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_1_E2N_id_ricSubscription },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_1_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_2_E2N_id_ricSubscriptionDelete },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_2_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_3_E2N_id_ricServiceUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_3_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICcontrolRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_4_E2N_id_ricControl },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_4_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICindication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_5_E2N_id_ricIndication },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_5_E2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceQuery },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_6_E2N_id_ricServiceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_6_E2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 6, 5, asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_E2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_InitiatingMessage_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_InitiatingMessage, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_InitiatingMessage_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 0; /* &InitiatingMessage */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_InitiatingMessage, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICsubscriptionRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICsubscriptionDeleteRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionDeleteRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICserviceUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICserviceUpdate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICcontrolRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICindication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICindication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICindication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage__value, choice.RICserviceQuery),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceQuery,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICserviceQuery"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 5 }, /* RICsubscriptionRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 4 }, /* RICsubscriptionDeleteRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 3 }, /* RICserviceUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 2 }, /* RICcontrolRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 1 }, /* RICindication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 0 } /* RICserviceQuery */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_4 = {
+	sizeof(struct E2N_InitiatingMessage__value),
+	offsetof(struct E2N_InitiatingMessage__value, _asn_ctx),
+	offsetof(struct E2N_InitiatingMessage__value, present),
+	sizeof(((struct E2N_InitiatingMessage__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_4,
+	6,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_4,
+	6,	/* Elements count */
+	&asn_SPC_E2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_InitiatingMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_E2N_procedureCode_constr_2,  memb_E2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_InitiatingMessage_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_3,  memb_E2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_InitiatingMessage, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_4,
+		select_InitiatingMessage_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_4,  memb_E2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InitiatingMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_InitiatingMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_InitiatingMessage_specs_1 = {
+	sizeof(struct E2N_InitiatingMessage),
+	offsetof(struct E2N_InitiatingMessage, _asn_ctx),
+	asn_MAP_E2N_InitiatingMessage_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InitiatingMessage = {
+	"InitiatingMessage",
+	"InitiatingMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_InitiatingMessage_tags_1,
+	sizeof(asn_DEF_E2N_InitiatingMessage_tags_1)
+		/sizeof(asn_DEF_E2N_InitiatingMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InitiatingMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InitiatingMessage_tags_1)
+		/sizeof(asn_DEF_E2N_InitiatingMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_InitiatingMessage_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_InitiatingMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InitiatingMessage.h b/asn1c_defs/E2N_InitiatingMessage.h
new file mode 100644
index 0000000..e6d33fd
--- /dev/null
+++ b/asn1c_defs/E2N_InitiatingMessage.h
@@ -0,0 +1,85 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InitiatingMessage_H_
+#define	_E2N_InitiatingMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProcedureCode.h"
+#include "E2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "E2N_RICsubscriptionRequest.h"
+#include "E2N_RICsubscriptionResponse.h"
+#include "E2N_RICsubscriptionFailure.h"
+#include "E2N_RICsubscriptionDeleteRequest.h"
+#include "E2N_RICsubscriptionDeleteResponse.h"
+#include "E2N_RICsubscriptionDeleteFailure.h"
+#include "E2N_RICserviceUpdate.h"
+#include "E2N_RICserviceUpdateAcknowledge.h"
+#include "E2N_RICserviceUpdateFailure.h"
+#include "E2N_RICcontrolRequest.h"
+#include "E2N_RICcontrolAcknowledge.h"
+#include "E2N_RICcontrolFailure.h"
+#include "E2N_RICindication.h"
+#include "E2N_RICserviceQuery.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_InitiatingMessage__value_PR {
+	E2N_InitiatingMessage__value_PR_NOTHING,	/* No components present */
+	E2N_InitiatingMessage__value_PR_RICsubscriptionRequest,
+	E2N_InitiatingMessage__value_PR_RICsubscriptionDeleteRequest,
+	E2N_InitiatingMessage__value_PR_RICserviceUpdate,
+	E2N_InitiatingMessage__value_PR_RICcontrolRequest,
+	E2N_InitiatingMessage__value_PR_RICindication,
+	E2N_InitiatingMessage__value_PR_RICserviceQuery
+} E2N_InitiatingMessage__value_PR;
+
+/* E2N_InitiatingMessage */
+typedef struct E2N_InitiatingMessage {
+	E2N_ProcedureCode_t	 procedureCode;
+	E2N_Criticality_t	 criticality;
+	struct E2N_InitiatingMessage__value {
+		E2N_InitiatingMessage__value_PR present;
+		union E2N_InitiatingMessage__E2N_value_u {
+			E2N_RICsubscriptionRequest_t	 RICsubscriptionRequest;
+			E2N_RICsubscriptionDeleteRequest_t	 RICsubscriptionDeleteRequest;
+			E2N_RICserviceUpdate_t	 RICserviceUpdate;
+			E2N_RICcontrolRequest_t	 RICcontrolRequest;
+			E2N_RICindication_t	 RICindication;
+			E2N_RICserviceQuery_t	 RICserviceQuery;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_InitiatingMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InitiatingMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_InitiatingMessage_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_InitiatingMessage_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InitiatingMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_Interface-ID.c b/asn1c_defs/E2N_Interface-ID.c
new file mode 100644
index 0000000..07b5b22
--- /dev/null
+++ b/asn1c_defs/E2N_Interface-ID.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_Interface-ID.h"
+
+#include "E2N_GlobalENB-ID.h"
+#include "E2N_GlobalGNB-ID.h"
+asn_per_constraints_t asn_PER_type_E2N_Interface_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_Interface_ID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct E2N_Interface_ID, choice.global_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-eNB-ID"
+		},
+	{ ATF_POINTER, 0, offsetof(struct E2N_Interface_ID, choice.global_gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-gNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_Interface_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global-gNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_Interface_ID_specs_1 = {
+	sizeof(struct E2N_Interface_ID),
+	offsetof(struct E2N_Interface_ID, _asn_ctx),
+	offsetof(struct E2N_Interface_ID, present),
+	sizeof(((struct E2N_Interface_ID *)0)->present),
+	asn_MAP_E2N_Interface_ID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_Interface_ID = {
+	"Interface-ID",
+	"Interface-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_Interface_ID_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_Interface_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_Interface_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_Interface-ID.h b/asn1c_defs/E2N_Interface-ID.h
new file mode 100644
index 0000000..908506e
--- /dev/null
+++ b/asn1c_defs/E2N_Interface-ID.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_Interface_ID_H_
+#define	_E2N_Interface_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_Interface_ID_PR {
+	E2N_Interface_ID_PR_NOTHING,	/* No components present */
+	E2N_Interface_ID_PR_global_eNB_ID,
+	E2N_Interface_ID_PR_global_gNB_ID
+	/* Extensions may appear below */
+	
+} E2N_Interface_ID_PR;
+
+/* Forward declarations */
+struct E2N_GlobalENB_ID;
+struct E2N_GlobalGNB_ID;
+
+/* E2N_Interface-ID */
+typedef struct E2N_Interface_ID {
+	E2N_Interface_ID_PR present;
+	union E2N_Interface_ID_u {
+		struct E2N_GlobalENB_ID	*global_eNB_ID;
+		struct E2N_GlobalGNB_ID	*global_gNB_ID;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_Interface_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_Interface_ID;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_Interface_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_Interface_ID_1[2];
+extern asn_per_constraints_t asn_PER_type_E2N_Interface_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_Interface_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceDirection.c b/asn1c_defs/E2N_InterfaceDirection.c
new file mode 100644
index 0000000..a978978
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceDirection.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceDirection.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_InterfaceDirection_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_InterfaceDirection_value2enum_1[] = {
+	{ 0,	8,	"incoming" },
+	{ 1,	8,	"outgoing" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_InterfaceDirection_enum2value_1[] = {
+	0,	/* incoming(0) */
+	1	/* outgoing(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_InterfaceDirection_specs_1 = {
+	asn_MAP_E2N_InterfaceDirection_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_InterfaceDirection_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceDirection_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceDirection = {
+	"InterfaceDirection",
+	"InterfaceDirection",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_InterfaceDirection_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceDirection_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceDirection_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceDirection_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceDirection_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceDirection_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_InterfaceDirection_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_InterfaceDirection_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceDirection.h b/asn1c_defs/E2N_InterfaceDirection.h
new file mode 100644
index 0000000..95ecffd
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceDirection.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceDirection_H_
+#define	_E2N_InterfaceDirection_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_InterfaceDirection {
+	E2N_InterfaceDirection_incoming	= 0,
+	E2N_InterfaceDirection_outgoing	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_InterfaceDirection;
+
+/* E2N_InterfaceDirection */
+typedef long	 E2N_InterfaceDirection_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_InterfaceDirection_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceDirection;
+extern const asn_INTEGER_specifics_t asn_SPC_InterfaceDirection_specs_1;
+asn_struct_free_f InterfaceDirection_free;
+asn_struct_print_f InterfaceDirection_print;
+asn_constr_check_f InterfaceDirection_constraint;
+ber_type_decoder_f InterfaceDirection_decode_ber;
+der_type_encoder_f InterfaceDirection_encode_der;
+xer_type_decoder_f InterfaceDirection_decode_xer;
+xer_type_encoder_f InterfaceDirection_encode_xer;
+per_type_decoder_f InterfaceDirection_decode_uper;
+per_type_encoder_f InterfaceDirection_encode_uper;
+per_type_decoder_f InterfaceDirection_decode_aper;
+per_type_encoder_f InterfaceDirection_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceDirection_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceMessage.c b/asn1c_defs/E2N_InterfaceMessage.c
new file mode 100644
index 0000000..5496d9e
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceMessage.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceMessage.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceMessage = {
+	"InterfaceMessage",
+	"InterfaceMessage",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_InterfaceMessage_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceMessage_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceMessage_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceMessage_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceMessage.h b/asn1c_defs/E2N_InterfaceMessage.h
new file mode 100644
index 0000000..109876c
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceMessage.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceMessage_H_
+#define	_E2N_InterfaceMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_InterfaceMessage */
+typedef OCTET_STRING_t	 E2N_InterfaceMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceMessage;
+asn_struct_free_f E2N_InterfaceMessage_free;
+asn_struct_print_f E2N_InterfaceMessage_print;
+asn_constr_check_f E2N_InterfaceMessage_constraint;
+ber_type_decoder_f E2N_InterfaceMessage_decode_ber;
+der_type_encoder_f E2N_InterfaceMessage_encode_der;
+xer_type_decoder_f E2N_InterfaceMessage_decode_xer;
+xer_type_encoder_f E2N_InterfaceMessage_encode_xer;
+per_type_decoder_f E2N_InterfaceMessage_decode_uper;
+per_type_encoder_f E2N_InterfaceMessage_encode_uper;
+per_type_decoder_f E2N_InterfaceMessage_decode_aper;
+per_type_encoder_f E2N_InterfaceMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceMessageType.c b/asn1c_defs/E2N_InterfaceMessageType.c
new file mode 100644
index 0000000..afc892b
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceMessageType.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceMessageType.h"
+
+asn_TYPE_member_t asn_MBR_E2N_InterfaceMessageType_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceMessageType, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProcedureCode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceMessageType, typeOfMessage),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_TypeOfMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"typeOfMessage"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceMessageType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_InterfaceMessageType_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* typeOfMessage */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_InterfaceMessageType_specs_1 = {
+	sizeof(struct E2N_InterfaceMessageType),
+	offsetof(struct E2N_InterfaceMessageType, _asn_ctx),
+	asn_MAP_E2N_InterfaceMessageType_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceMessageType = {
+	"InterfaceMessageType",
+	"InterfaceMessageType",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_InterfaceMessageType_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceMessageType_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceMessageType_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceMessageType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceMessageType_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceMessageType_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_InterfaceMessageType_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_InterfaceMessageType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceMessageType.h b/asn1c_defs/E2N_InterfaceMessageType.h
new file mode 100644
index 0000000..ef5695e
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceMessageType.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceMessageType_H_
+#define	_E2N_InterfaceMessageType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProcedureCode.h"
+#include "E2N_TypeOfMessage.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_InterfaceMessageType */
+typedef struct E2N_InterfaceMessageType {
+	E2N_ProcedureCode_t	 procedureCode;
+	E2N_TypeOfMessage_t	 typeOfMessage;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_InterfaceMessageType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceMessageType;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_InterfaceMessageType_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_InterfaceMessageType_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceMessageType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-ID.c b/asn1c_defs/E2N_InterfaceProtocolIE-ID.c
new file mode 100644
index 0000000..4626192
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceProtocolIE-ID.h"
+
+int
+E2N_InterfaceProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using E2N_ProtocolIE_ID,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_ID = {
+	"InterfaceProtocolIE-ID",
+	"InterfaceProtocolIE-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_InterfaceProtocolIE_ID_constr_1, E2N_InterfaceProtocolIE_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-ID.h b/asn1c_defs/E2N_InterfaceProtocolIE-ID.h
new file mode 100644
index 0000000..216c2c4
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceProtocolIE_ID_H_
+#define	_E2N_InterfaceProtocolIE_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-ID.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_InterfaceProtocolIE-ID */
+typedef E2N_ProtocolIE_ID_t	 E2N_InterfaceProtocolIE_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_ID;
+asn_struct_free_f E2N_InterfaceProtocolIE_ID_free;
+asn_struct_print_f E2N_InterfaceProtocolIE_ID_print;
+asn_constr_check_f E2N_InterfaceProtocolIE_ID_constraint;
+ber_type_decoder_f E2N_InterfaceProtocolIE_ID_decode_ber;
+der_type_encoder_f E2N_InterfaceProtocolIE_ID_encode_der;
+xer_type_decoder_f E2N_InterfaceProtocolIE_ID_decode_xer;
+xer_type_encoder_f E2N_InterfaceProtocolIE_ID_encode_xer;
+per_type_decoder_f E2N_InterfaceProtocolIE_ID_decode_uper;
+per_type_encoder_f E2N_InterfaceProtocolIE_ID_encode_uper;
+per_type_decoder_f E2N_InterfaceProtocolIE_ID_decode_aper;
+per_type_encoder_f E2N_InterfaceProtocolIE_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceProtocolIE_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Item.c b/asn1c_defs/E2N_InterfaceProtocolIE-Item.c
new file mode 100644
index 0000000..2feab8d
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Item.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceProtocolIE-Item.h"
+
+asn_TYPE_member_t asn_MBR_E2N_InterfaceProtocolIE_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Item, interfaceProtocolIE_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceProtocolIE_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceProtocolIE-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Item, interfaceProtocolIE_Test),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceProtocolIE_Test,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceProtocolIE-Test"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Item, interfaceProtocolIE_Value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_InterfaceProtocolIE_Value,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfaceProtocolIE-Value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_InterfaceProtocolIE_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interfaceProtocolIE-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfaceProtocolIE-Test */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* interfaceProtocolIE-Value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_InterfaceProtocolIE_Item_specs_1 = {
+	sizeof(struct E2N_InterfaceProtocolIE_Item),
+	offsetof(struct E2N_InterfaceProtocolIE_Item, _asn_ctx),
+	asn_MAP_E2N_InterfaceProtocolIE_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Item = {
+	"InterfaceProtocolIE-Item",
+	"InterfaceProtocolIE-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_InterfaceProtocolIE_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_InterfaceProtocolIE_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Item.h b/asn1c_defs/E2N_InterfaceProtocolIE-Item.h
new file mode 100644
index 0000000..0608578
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceProtocolIE_Item_H_
+#define	_E2N_InterfaceProtocolIE_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_InterfaceProtocolIE-ID.h"
+#include "E2N_InterfaceProtocolIE-Test.h"
+#include "E2N_InterfaceProtocolIE-Value.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_InterfaceProtocolIE-Item */
+typedef struct E2N_InterfaceProtocolIE_Item {
+	E2N_InterfaceProtocolIE_ID_t	 interfaceProtocolIE_ID;
+	E2N_InterfaceProtocolIE_Test_t	 interfaceProtocolIE_Test;
+	E2N_InterfaceProtocolIE_Value_t	 interfaceProtocolIE_Value;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_InterfaceProtocolIE_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_InterfaceProtocolIE_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_InterfaceProtocolIE_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceProtocolIE_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Test.c b/asn1c_defs/E2N_InterfaceProtocolIE-Test.c
new file mode 100644
index 0000000..0e341a8
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Test.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceProtocolIE-Test.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_Test_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_InterfaceProtocolIE_Test_value2enum_1[] = {
+	{ 0,	5,	"equal" },
+	{ 1,	11,	"greaterthan" },
+	{ 2,	8,	"lessthan" },
+	{ 3,	8,	"contains" },
+	{ 4,	7,	"present" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_InterfaceProtocolIE_Test_enum2value_1[] = {
+	3,	/* contains(3) */
+	0,	/* equal(0) */
+	1,	/* greaterthan(1) */
+	2,	/* lessthan(2) */
+	4	/* present(4) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_InterfaceProtocolIE_Test_specs_1 = {
+	asn_MAP_E2N_InterfaceProtocolIE_Test_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_InterfaceProtocolIE_Test_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Test = {
+	"InterfaceProtocolIE-Test",
+	"InterfaceProtocolIE-Test",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1,
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1[0]), /* 1 */
+	asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1)
+		/sizeof(asn_DEF_E2N_InterfaceProtocolIE_Test_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_InterfaceProtocolIE_Test_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_InterfaceProtocolIE_Test_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Test.h b/asn1c_defs/E2N_InterfaceProtocolIE-Test.h
new file mode 100644
index 0000000..85aacfd
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Test.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceProtocolIE_Test_H_
+#define	_E2N_InterfaceProtocolIE_Test_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_InterfaceProtocolIE_Test {
+	E2N_InterfaceProtocolIE_Test_equal	= 0,
+	E2N_InterfaceProtocolIE_Test_greaterthan	= 1,
+	E2N_InterfaceProtocolIE_Test_lessthan	= 2,
+	E2N_InterfaceProtocolIE_Test_contains	= 3,
+	E2N_InterfaceProtocolIE_Test_present	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_InterfaceProtocolIE_Test;
+
+/* E2N_InterfaceProtocolIE-Test */
+typedef long	 E2N_InterfaceProtocolIE_Test_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_Test_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Test;
+extern const asn_INTEGER_specifics_t asn_SPC_InterfaceProtocolIE_Test_specs_1;
+asn_struct_free_f InterfaceProtocolIE_Test_free;
+asn_struct_print_f InterfaceProtocolIE_Test_print;
+asn_constr_check_f InterfaceProtocolIE_Test_constraint;
+ber_type_decoder_f InterfaceProtocolIE_Test_decode_ber;
+der_type_encoder_f InterfaceProtocolIE_Test_encode_der;
+xer_type_decoder_f InterfaceProtocolIE_Test_decode_xer;
+xer_type_encoder_f InterfaceProtocolIE_Test_encode_xer;
+per_type_decoder_f InterfaceProtocolIE_Test_decode_uper;
+per_type_encoder_f InterfaceProtocolIE_Test_encode_uper;
+per_type_decoder_f InterfaceProtocolIE_Test_decode_aper;
+per_type_encoder_f InterfaceProtocolIE_Test_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceProtocolIE_Test_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Value.c b/asn1c_defs/E2N_InterfaceProtocolIE-Value.c
new file mode 100644
index 0000000..69d8e31
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Value.c
@@ -0,0 +1,92 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_InterfaceProtocolIE-Value.h"
+
+asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_Value_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_InterfaceProtocolIE_Value_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Value, choice.valueInt),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueInt"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Value, choice.valueEnum),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueEnum"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Value, choice.valueBool),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBool"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Value, choice.valueBitS),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueBitS"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_InterfaceProtocolIE_Value, choice.valueOctS),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"valueOctS"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_InterfaceProtocolIE_Value_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueEnum */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueBool */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* valueOctS */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_InterfaceProtocolIE_Value_specs_1 = {
+	sizeof(struct E2N_InterfaceProtocolIE_Value),
+	offsetof(struct E2N_InterfaceProtocolIE_Value, _asn_ctx),
+	offsetof(struct E2N_InterfaceProtocolIE_Value, present),
+	sizeof(((struct E2N_InterfaceProtocolIE_Value *)0)->present),
+	asn_MAP_E2N_InterfaceProtocolIE_Value_tag2el_1,
+	5,	/* Count of tags in the map */
+	0, 0,
+	5	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Value = {
+	"InterfaceProtocolIE-Value",
+	"InterfaceProtocolIE-Value",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_InterfaceProtocolIE_Value_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_InterfaceProtocolIE_Value_1,
+	5,	/* Elements count */
+	&asn_SPC_E2N_InterfaceProtocolIE_Value_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_InterfaceProtocolIE-Value.h b/asn1c_defs/E2N_InterfaceProtocolIE-Value.h
new file mode 100644
index 0000000..30e4791
--- /dev/null
+++ b/asn1c_defs/E2N_InterfaceProtocolIE-Value.h
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_InterfaceProtocolIE_Value_H_
+#define	_E2N_InterfaceProtocolIE_Value_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <BOOLEAN.h>
+#include <BIT_STRING.h>
+#include <OCTET_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_InterfaceProtocolIE_Value_PR {
+	E2N_InterfaceProtocolIE_Value_PR_NOTHING,	/* No components present */
+	E2N_InterfaceProtocolIE_Value_PR_valueInt,
+	E2N_InterfaceProtocolIE_Value_PR_valueEnum,
+	E2N_InterfaceProtocolIE_Value_PR_valueBool,
+	E2N_InterfaceProtocolIE_Value_PR_valueBitS,
+	E2N_InterfaceProtocolIE_Value_PR_valueOctS
+	/* Extensions may appear below */
+	
+} E2N_InterfaceProtocolIE_Value_PR;
+
+/* E2N_InterfaceProtocolIE-Value */
+typedef struct E2N_InterfaceProtocolIE_Value {
+	E2N_InterfaceProtocolIE_Value_PR present;
+	union E2N_InterfaceProtocolIE_Value_u {
+		long	 valueInt;
+		long	 valueEnum;
+		BOOLEAN_t	 valueBool;
+		BIT_STRING_t	 valueBitS;
+		OCTET_STRING_t	 valueOctS;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_InterfaceProtocolIE_Value_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_InterfaceProtocolIE_Value;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_InterfaceProtocolIE_Value_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_InterfaceProtocolIE_Value_1[5];
+extern asn_per_constraints_t asn_PER_type_E2N_InterfaceProtocolIE_Value_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_InterfaceProtocolIE_Value_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_PLMN-Identity.c b/asn1c_defs/E2N_PLMN-Identity.c
new file mode 100644
index 0000000..3cb8b7a
--- /dev/null
+++ b/asn1c_defs/E2N_PLMN-Identity.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_PLMN-Identity.h"
+
+int
+E2N_PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_PLMN_Identity_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_PLMN_Identity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_PLMN_Identity = {
+	"PLMN-Identity",
+	"PLMN-Identity",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_PLMN_Identity_tags_1,
+	sizeof(asn_DEF_E2N_PLMN_Identity_tags_1)
+		/sizeof(asn_DEF_E2N_PLMN_Identity_tags_1[0]), /* 1 */
+	asn_DEF_E2N_PLMN_Identity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_PLMN_Identity_tags_1)
+		/sizeof(asn_DEF_E2N_PLMN_Identity_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_PLMN_Identity_constr_1, E2N_PLMN_Identity_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_PLMN-Identity.h b/asn1c_defs/E2N_PLMN-Identity.h
new file mode 100644
index 0000000..46b809c
--- /dev/null
+++ b/asn1c_defs/E2N_PLMN-Identity.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_PLMN_Identity_H_
+#define	_E2N_PLMN_Identity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_PLMN-Identity */
+typedef OCTET_STRING_t	 E2N_PLMN_Identity_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_PLMN_Identity_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_PLMN_Identity;
+asn_struct_free_f E2N_PLMN_Identity_free;
+asn_struct_print_f E2N_PLMN_Identity_print;
+asn_constr_check_f E2N_PLMN_Identity_constraint;
+ber_type_decoder_f E2N_PLMN_Identity_decode_ber;
+der_type_encoder_f E2N_PLMN_Identity_encode_der;
+xer_type_decoder_f E2N_PLMN_Identity_decode_xer;
+xer_type_encoder_f E2N_PLMN_Identity_encode_xer;
+per_type_decoder_f E2N_PLMN_Identity_decode_uper;
+per_type_encoder_f E2N_PLMN_Identity_encode_uper;
+per_type_decoder_f E2N_PLMN_Identity_decode_aper;
+per_type_encoder_f E2N_PLMN_Identity_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_PLMN_Identity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_Presence.c b/asn1c_defs/E2N_Presence.c
new file mode 100644
index 0000000..91100ad
--- /dev/null
+++ b/asn1c_defs/E2N_Presence.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_Presence.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_Presence_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_Presence_value2enum_1[] = {
+	{ 0,	8,	"optional" },
+	{ 1,	11,	"conditional" },
+	{ 2,	9,	"mandatory" }
+};
+static const unsigned int asn_MAP_E2N_Presence_enum2value_1[] = {
+	1,	/* conditional(1) */
+	2,	/* mandatory(2) */
+	0	/* optional(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_Presence_specs_1 = {
+	asn_MAP_E2N_Presence_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_Presence_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_Presence_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_Presence = {
+	"Presence",
+	"Presence",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_Presence_tags_1,
+	sizeof(asn_DEF_E2N_Presence_tags_1)
+		/sizeof(asn_DEF_E2N_Presence_tags_1[0]), /* 1 */
+	asn_DEF_E2N_Presence_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_Presence_tags_1)
+		/sizeof(asn_DEF_E2N_Presence_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_Presence_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_Presence_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_Presence.h b/asn1c_defs/E2N_Presence.h
new file mode 100644
index 0000000..4e5e808
--- /dev/null
+++ b/asn1c_defs/E2N_Presence.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_Presence_H_
+#define	_E2N_Presence_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_Presence {
+	E2N_Presence_optional	= 0,
+	E2N_Presence_conditional	= 1,
+	E2N_Presence_mandatory	= 2
+} e_E2N_Presence;
+
+/* E2N_Presence */
+typedef long	 E2N_Presence_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_Presence_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_Presence;
+extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1;
+asn_struct_free_f Presence_free;
+asn_struct_print_f Presence_print;
+asn_constr_check_f Presence_constraint;
+ber_type_decoder_f Presence_decode_ber;
+der_type_encoder_f Presence_encode_der;
+xer_type_decoder_f Presence_decode_xer;
+xer_type_encoder_f Presence_encode_xer;
+per_type_decoder_f Presence_decode_uper;
+per_type_encoder_f Presence_encode_uper;
+per_type_decoder_f Presence_decode_aper;
+per_type_encoder_f Presence_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_Presence_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_PrivateIE-Container.c b/asn1c_defs/E2N_PrivateIE-Container.c
new file mode 100644
index 0000000..f81278e
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-Container.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_PrivateIE-Container.h"
+
diff --git a/asn1c_defs/E2N_PrivateIE-Container.h b/asn1c_defs/E2N_PrivateIE-Container.h
new file mode 100644
index 0000000..f62f4cd
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-Container.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_PrivateIE_Container_H_
+#define	_E2N_PrivateIE_Container_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_PrivateIE_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_PrivateIE-Field.c b/asn1c_defs/E2N_PrivateIE-Field.c
new file mode 100644
index 0000000..bcf8ce6
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-Field.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_PrivateIE-Field.h"
+
diff --git a/asn1c_defs/E2N_PrivateIE-Field.h b/asn1c_defs/E2N_PrivateIE-Field.h
new file mode 100644
index 0000000..db303b7
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-Field.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_PrivateIE_Field_H_
+#define	_E2N_PrivateIE_Field_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_PrivateIE_Field_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_PrivateIE-ID.c b/asn1c_defs/E2N_PrivateIE-ID.c
new file mode 100644
index 0000000..5172d47
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-ID.c
@@ -0,0 +1,92 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_PrivateIE-ID.h"
+
+static int
+memb_E2N_local_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_local_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_PrivateIE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_PrivateIE_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_PrivateIE_ID, choice.local),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_E2N_local_constr_2,  memb_E2N_local_constraint_1 },
+		0, 0, /* No default value */
+		"local"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_PrivateIE_ID, choice.global),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OBJECT_IDENTIFIER,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_PrivateIE_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* local */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_PrivateIE_ID_specs_1 = {
+	sizeof(struct E2N_PrivateIE_ID),
+	offsetof(struct E2N_PrivateIE_ID, _asn_ctx),
+	offsetof(struct E2N_PrivateIE_ID, present),
+	sizeof(((struct E2N_PrivateIE_ID *)0)->present),
+	asn_MAP_E2N_PrivateIE_ID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_PrivateIE_ID = {
+	"PrivateIE-ID",
+	"PrivateIE-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_PrivateIE_ID_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_PrivateIE_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_PrivateIE_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_PrivateIE-ID.h b/asn1c_defs/E2N_PrivateIE-ID.h
new file mode 100644
index 0000000..eb0d655
--- /dev/null
+++ b/asn1c_defs/E2N_PrivateIE-ID.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_PrivateIE_ID_H_
+#define	_E2N_PrivateIE_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <OBJECT_IDENTIFIER.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_PrivateIE_ID_PR {
+	E2N_PrivateIE_ID_PR_NOTHING,	/* No components present */
+	E2N_PrivateIE_ID_PR_local,
+	E2N_PrivateIE_ID_PR_global
+} E2N_PrivateIE_ID_PR;
+
+/* E2N_PrivateIE-ID */
+typedef struct E2N_PrivateIE_ID {
+	E2N_PrivateIE_ID_PR present;
+	union E2N_PrivateIE_ID_u {
+		long	 local;
+		OBJECT_IDENTIFIER_t	 global;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_PrivateIE_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_PrivateIE_ID;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_PrivateIE_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_PrivateIE_ID_1[2];
+extern asn_per_constraints_t asn_PER_type_E2N_PrivateIE_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_PrivateIE_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProcedureCode.c b/asn1c_defs/E2N_ProcedureCode.c
new file mode 100644
index 0000000..f4e3542
--- /dev/null
+++ b/asn1c_defs/E2N_ProcedureCode.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProcedureCode.h"
+
+int
+E2N_ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_ProcedureCode_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProcedureCode_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProcedureCode = {
+	"ProcedureCode",
+	"ProcedureCode",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_ProcedureCode_tags_1,
+	sizeof(asn_DEF_E2N_ProcedureCode_tags_1)
+		/sizeof(asn_DEF_E2N_ProcedureCode_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ProcedureCode_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProcedureCode_tags_1)
+		/sizeof(asn_DEF_E2N_ProcedureCode_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProcedureCode_constr_1, E2N_ProcedureCode_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_ProcedureCode.h b/asn1c_defs/E2N_ProcedureCode.h
new file mode 100644
index 0000000..789dc58
--- /dev/null
+++ b/asn1c_defs/E2N_ProcedureCode.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProcedureCode_H_
+#define	_E2N_ProcedureCode_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_ProcedureCode */
+typedef long	 E2N_ProcedureCode_t;
+
+/* Implementation */
+#define E2N_ProcedureCode_id_ricSubscription	((E2N_ProcedureCode_t)201)
+#define E2N_ProcedureCode_id_ricSubscriptionDelete	((E2N_ProcedureCode_t)202)
+#define E2N_ProcedureCode_id_ricServiceUpdate	((E2N_ProcedureCode_t)203)
+#define E2N_ProcedureCode_id_ricControl	((E2N_ProcedureCode_t)204)
+#define E2N_ProcedureCode_id_ricIndication	((E2N_ProcedureCode_t)205)
+#define E2N_ProcedureCode_id_ricServiceQuery	((E2N_ProcedureCode_t)206)
+extern asn_per_constraints_t asn_PER_type_E2N_ProcedureCode_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProcedureCode;
+asn_struct_free_f E2N_ProcedureCode_free;
+asn_struct_print_f E2N_ProcedureCode_print;
+asn_constr_check_f E2N_ProcedureCode_constraint;
+ber_type_decoder_f E2N_ProcedureCode_decode_ber;
+der_type_encoder_f E2N_ProcedureCode_encode_der;
+xer_type_decoder_f E2N_ProcedureCode_decode_xer;
+xer_type_encoder_f E2N_ProcedureCode_encode_xer;
+per_type_decoder_f E2N_ProcedureCode_decode_uper;
+per_type_encoder_f E2N_ProcedureCode_encode_uper;
+per_type_decoder_f E2N_ProcedureCode_decode_aper;
+per_type_encoder_f E2N_ProcedureCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProcedureCode_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolExtensionContainer.c b/asn1c_defs/E2N_ProtocolExtensionContainer.c
new file mode 100644
index 0000000..32ccb89
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolExtensionContainer.c
@@ -0,0 +1,170 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolExtensionContainer.h"
+
+#include "E2N_ProtocolExtensionField.h"
+asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P0_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P1_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P2_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P3_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P0_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_CriticalityDiagnostics_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P0_specs_1 = {
+	sizeof(struct E2N_ProtocolExtensionContainer_480P0),
+	offsetof(struct E2N_ProtocolExtensionContainer_480P0, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P0 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1,
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolExtensionContainer_480P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolExtensionContainer_480P0_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolExtensionContainer_480P0_specs_1	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P1_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P1_specs_3 = {
+	sizeof(struct E2N_ProtocolExtensionContainer_480P1),
+	offsetof(struct E2N_ProtocolExtensionContainer_480P1, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P1 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3,
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3[0]), /* 1 */
+	asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P1_tags_3[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolExtensionContainer_480P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolExtensionContainer_480P1_3,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolExtensionContainer_480P1_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P2_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_GlobalENB_ID_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P2_specs_5 = {
+	sizeof(struct E2N_ProtocolExtensionContainer_480P2),
+	offsetof(struct E2N_ProtocolExtensionContainer_480P2, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P2 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5,
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5[0]), /* 1 */
+	asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P2_tags_5[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolExtensionContainer_480P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolExtensionContainer_480P2_5,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolExtensionContainer_480P2_specs_5	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P3_7[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_GlobalGNB_ID_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P3_specs_7 = {
+	sizeof(struct E2N_ProtocolExtensionContainer_480P3),
+	offsetof(struct E2N_ProtocolExtensionContainer_480P3, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P3 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7,
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7[0]), /* 1 */
+	asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7)
+		/sizeof(asn_DEF_E2N_ProtocolExtensionContainer_480P3_tags_7[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolExtensionContainer_480P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolExtensionContainer_480P3_7,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolExtensionContainer_480P3_specs_7	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolExtensionContainer.h b/asn1c_defs/E2N_ProtocolExtensionContainer.h
new file mode 100644
index 0000000..22a3dfa
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolExtensionContainer.h
@@ -0,0 +1,77 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolExtensionContainer_H_
+#define	_E2N_ProtocolExtensionContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_CriticalityDiagnostics_ExtIEs;
+struct E2N_CriticalityDiagnostics_IE_List_ExtIEs;
+struct E2N_GlobalENB_ID_ExtIEs;
+struct E2N_GlobalGNB_ID_ExtIEs;
+
+/* E2N_ProtocolExtensionContainer */
+typedef struct E2N_ProtocolExtensionContainer_480P0 {
+	A_SEQUENCE_OF(struct E2N_CriticalityDiagnostics_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolExtensionContainer_480P0_t;
+typedef struct E2N_ProtocolExtensionContainer_480P1 {
+	A_SEQUENCE_OF(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolExtensionContainer_480P1_t;
+typedef struct E2N_ProtocolExtensionContainer_480P2 {
+	A_SEQUENCE_OF(struct E2N_GlobalENB_ID_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolExtensionContainer_480P2_t;
+typedef struct E2N_ProtocolExtensionContainer_480P3 {
+	A_SEQUENCE_OF(struct E2N_GlobalGNB_ID_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolExtensionContainer_480P3_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P0;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P0_1[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P1;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P1_3[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P1_constr_3;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P2;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P2_specs_5;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P2_5[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P2_constr_5;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolExtensionContainer_480P3;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolExtensionContainer_480P3_specs_7;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolExtensionContainer_480P3_7[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolExtensionContainer_480P3_constr_7;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolExtensionContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolExtensionField.c b/asn1c_defs/E2N_ProtocolExtensionField.c
new file mode 100644
index 0000000..b16ce40
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolExtensionField.c
@@ -0,0 +1,661 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolExtensionField.h"
+
+static int
+memb_E2N_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_extensionValue_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_extensionValue_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_extensionValue_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_extensionValue_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_extensionValue_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_extensionValue_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_11 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_extensionValue_constr_12 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_14 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_15 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_extensionValue_constr_16 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_extensionValue_specs_4 = {
+	sizeof(struct E2N_CriticalityDiagnostics_ExtIEs__extensionValue),
+	offsetof(struct E2N_CriticalityDiagnostics_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct E2N_CriticalityDiagnostics_ExtIEs__extensionValue, present),
+	sizeof(((struct E2N_CriticalityDiagnostics_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_extensionValue_4 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_E2N_extensionValue_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_ExtIEs_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_2,  memb_E2N_id_constraint_1 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_3,  memb_E2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_extensionValue_4,
+		0,
+		{ 0, &asn_PER_memb_E2N_extensionValue_constr_4,  memb_E2N_extensionValue_constraint_1 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_CriticalityDiagnostics_ExtIEs_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_CriticalityDiagnostics_ExtIEs_specs_1 = {
+	sizeof(struct E2N_CriticalityDiagnostics_ExtIEs),
+	offsetof(struct E2N_CriticalityDiagnostics_ExtIEs, _asn_ctx),
+	asn_MAP_E2N_CriticalityDiagnostics_ExtIEs_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_ExtIEs = {
+	"CriticalityDiagnostics-ExtIEs",
+	"CriticalityDiagnostics-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1,
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1[0]), /* 1 */
+	asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_ExtIEs_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_CriticalityDiagnostics_ExtIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_CriticalityDiagnostics_ExtIEs_specs_1	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_E2N_extensionValue_specs_8 = {
+	sizeof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue),
+	offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, present),
+	sizeof(((struct E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_extensionValue_8 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_E2N_extensionValue_specs_8	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_IE_List_ExtIEs_5[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_6,  memb_E2N_id_constraint_5 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_7,  memb_E2N_criticality_constraint_5 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_extensionValue_8,
+		0,
+		{ 0, &asn_PER_memb_E2N_extensionValue_constr_8,  memb_E2N_extensionValue_constraint_5 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_5 = {
+	sizeof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs),
+	offsetof(struct E2N_CriticalityDiagnostics_IE_List_ExtIEs, _asn_ctx),
+	asn_MAP_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_5,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs = {
+	"CriticalityDiagnostics-IE-List-ExtIEs",
+	"CriticalityDiagnostics-IE-List-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5,
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5[0]), /* 1 */
+	asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5)
+		/sizeof(asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_CriticalityDiagnostics_IE_List_ExtIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_E2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_5	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_E2N_extensionValue_specs_12 = {
+	sizeof(struct E2N_GlobalENB_ID_ExtIEs__extensionValue),
+	offsetof(struct E2N_GlobalENB_ID_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct E2N_GlobalENB_ID_ExtIEs__extensionValue, present),
+	sizeof(((struct E2N_GlobalENB_ID_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_extensionValue_12 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_E2N_extensionValue_specs_12	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_GlobalENB_ID_ExtIEs_9[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalENB_ID_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_10,  memb_E2N_id_constraint_9 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalENB_ID_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_11,  memb_E2N_criticality_constraint_9 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalENB_ID_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_extensionValue_12,
+		0,
+		{ 0, &asn_PER_memb_E2N_extensionValue_constr_12,  memb_E2N_extensionValue_constraint_9 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_GlobalENB_ID_ExtIEs_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalENB_ID_ExtIEs_specs_9 = {
+	sizeof(struct E2N_GlobalENB_ID_ExtIEs),
+	offsetof(struct E2N_GlobalENB_ID_ExtIEs, _asn_ctx),
+	asn_MAP_E2N_GlobalENB_ID_ExtIEs_tag2el_9,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_GlobalENB_ID_ExtIEs = {
+	"GlobalENB-ID-ExtIEs",
+	"GlobalENB-ID-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9,
+	sizeof(asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9)
+		/sizeof(asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9[0]), /* 1 */
+	asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9,	/* Same as above */
+	sizeof(asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9)
+		/sizeof(asn_DEF_E2N_GlobalENB_ID_ExtIEs_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_GlobalENB_ID_ExtIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_E2N_GlobalENB_ID_ExtIEs_specs_9	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_E2N_extensionValue_specs_16 = {
+	sizeof(struct E2N_GlobalGNB_ID_ExtIEs__extensionValue),
+	offsetof(struct E2N_GlobalGNB_ID_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct E2N_GlobalGNB_ID_ExtIEs__extensionValue, present),
+	sizeof(((struct E2N_GlobalGNB_ID_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_extensionValue_16 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_E2N_extensionValue_specs_16	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_GlobalGNB_ID_ExtIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalGNB_ID_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_14,  memb_E2N_id_constraint_13 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalGNB_ID_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_15,  memb_E2N_criticality_constraint_13 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_GlobalGNB_ID_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_extensionValue_16,
+		0,
+		{ 0, &asn_PER_memb_E2N_extensionValue_constr_16,  memb_E2N_extensionValue_constraint_13 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_GlobalGNB_ID_ExtIEs_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalGNB_ID_ExtIEs_specs_13 = {
+	sizeof(struct E2N_GlobalGNB_ID_ExtIEs),
+	offsetof(struct E2N_GlobalGNB_ID_ExtIEs, _asn_ctx),
+	asn_MAP_E2N_GlobalGNB_ID_ExtIEs_tag2el_13,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_GlobalGNB_ID_ExtIEs = {
+	"GlobalGNB-ID-ExtIEs",
+	"GlobalGNB-ID-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13,
+	sizeof(asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13)
+		/sizeof(asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13[0]), /* 1 */
+	asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13)
+		/sizeof(asn_DEF_E2N_GlobalGNB_ID_ExtIEs_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_GlobalGNB_ID_ExtIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_E2N_GlobalGNB_ID_ExtIEs_specs_13	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolExtensionField.h b/asn1c_defs/E2N_ProtocolExtensionField.h
new file mode 100644
index 0000000..9e54ed4
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolExtensionField.h
@@ -0,0 +1,126 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolExtensionField_H_
+#define	_E2N_ProtocolExtensionField_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-ID.h"
+#include "E2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR {
+	E2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} E2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR;
+typedef enum E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR {
+	E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR;
+typedef enum E2N_GlobalENB_ID_ExtIEs__extensionValue_PR {
+	E2N_GlobalENB_ID_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} E2N_GlobalENB_ID_ExtIEs__extensionValue_PR;
+typedef enum E2N_GlobalGNB_ID_ExtIEs__extensionValue_PR {
+	E2N_GlobalGNB_ID_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} E2N_GlobalGNB_ID_ExtIEs__extensionValue_PR;
+
+/* E2N_ProtocolExtensionField */
+typedef struct E2N_CriticalityDiagnostics_ExtIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_CriticalityDiagnostics_ExtIEs__extensionValue {
+		E2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR present;
+		union E2N_CriticalityDiagnostics_ExtIEs__E2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_CriticalityDiagnostics_ExtIEs_t;
+typedef struct E2N_CriticalityDiagnostics_IE_List_ExtIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue {
+		E2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR present;
+		union E2N_CriticalityDiagnostics_IE_List_ExtIEs__E2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_CriticalityDiagnostics_IE_List_ExtIEs_t;
+typedef struct E2N_GlobalENB_ID_ExtIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_GlobalENB_ID_ExtIEs__extensionValue {
+		E2N_GlobalENB_ID_ExtIEs__extensionValue_PR present;
+		union E2N_GlobalENB_ID_ExtIEs__E2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_GlobalENB_ID_ExtIEs_t;
+typedef struct E2N_GlobalGNB_ID_ExtIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_GlobalGNB_ID_ExtIEs__extensionValue {
+		E2N_GlobalGNB_ID_ExtIEs__extensionValue_PR present;
+		union E2N_GlobalGNB_ID_ExtIEs__E2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_GlobalGNB_ID_ExtIEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_CriticalityDiagnostics_ExtIEs_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_ExtIEs_1[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_CriticalityDiagnostics_IE_List_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_5;
+extern asn_TYPE_member_t asn_MBR_E2N_CriticalityDiagnostics_IE_List_ExtIEs_5[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_GlobalENB_ID_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalENB_ID_ExtIEs_specs_9;
+extern asn_TYPE_member_t asn_MBR_E2N_GlobalENB_ID_ExtIEs_9[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_GlobalGNB_ID_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_GlobalGNB_ID_ExtIEs_specs_13;
+extern asn_TYPE_member_t asn_MBR_E2N_GlobalGNB_ID_ExtIEs_13[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolExtensionField_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-Container.c b/asn1c_defs/E2N_ProtocolIE-Container.c
new file mode 100644
index 0000000..1847550
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Container.c
@@ -0,0 +1,570 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-Container.h"
+
+#include "E2N_ProtocolIE-Field.h"
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P0_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P1_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P2_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P3_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P4_constr_9 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P5_constr_11 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P6_constr_13 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P7_constr_15 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P8_constr_17 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P9_constr_19 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P10_constr_21 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P11_constr_23 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P12_constr_25 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P13_constr_27 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P0_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P0_specs_1 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P0),
+	offsetof(struct E2N_ProtocolIE_Container_429P0, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P0 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P0_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P0_specs_1	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P1_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P1_specs_3 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P1),
+	offsetof(struct E2N_ProtocolIE_Container_429P1, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P1 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P1_tags_3[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P1_3,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P1_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P2_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P2_specs_5 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P2),
+	offsetof(struct E2N_ProtocolIE_Container_429P2, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P2 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P2_tags_5[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P2_5,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P2_specs_5	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P3_7[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P3_specs_7 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P3),
+	offsetof(struct E2N_ProtocolIE_Container_429P3, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P3 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P3_tags_7[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P3_7,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P3_specs_7	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P4_9[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P4_specs_9 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P4),
+	offsetof(struct E2N_ProtocolIE_Container_429P4, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P4 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P4_tags_9[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P4_constr_9, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P4_9,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P4_specs_9	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P5_11[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P5_specs_11 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P5),
+	offsetof(struct E2N_ProtocolIE_Container_429P5, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P5 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P5_tags_11[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P5_constr_11, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P5_11,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P5_specs_11	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P6_13[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICindication_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P6_specs_13 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P6),
+	offsetof(struct E2N_ProtocolIE_Container_429P6, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P6 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P6_tags_13[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P6_constr_13, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P6_13,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P6_specs_13	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P7_15[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P7_specs_15 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P7),
+	offsetof(struct E2N_ProtocolIE_Container_429P7, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P7 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P7_tags_15[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P7_constr_15, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P7_15,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P7_specs_15	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P8_17[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P8_specs_17 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P8),
+	offsetof(struct E2N_ProtocolIE_Container_429P8, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P8 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P8_tags_17[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P8_constr_17, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P8_17,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P8_specs_17	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P9_19[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P9_specs_19 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P9),
+	offsetof(struct E2N_ProtocolIE_Container_429P9, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P9 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P9_tags_19[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P9_constr_19, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P9_19,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P9_specs_19	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P10_21[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P10_specs_21 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P10),
+	offsetof(struct E2N_ProtocolIE_Container_429P10, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P10 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P10_tags_21[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P10_constr_21, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P10_21,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P10_specs_21	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P11_23[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P11_specs_23 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P11),
+	offsetof(struct E2N_ProtocolIE_Container_429P11, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P11 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P11_tags_23[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P11_constr_23, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P11_23,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P11_specs_23	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P12_25[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdateFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P12_specs_25 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P12),
+	offsetof(struct E2N_ProtocolIE_Container_429P12, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P12 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P12_tags_25[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P12_constr_25, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P12_25,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P12_specs_25	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P13_27[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceQuery_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P13_specs_27 = {
+	sizeof(struct E2N_ProtocolIE_Container_429P13),
+	offsetof(struct E2N_ProtocolIE_Container_429P13, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P13 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27,
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Container_429P13_tags_27[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_Container_429P13_constr_27, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_ProtocolIE_Container_429P13_27,
+	1,	/* Single element */
+	&asn_SPC_E2N_ProtocolIE_Container_429P13_specs_27	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolIE-Container.h b/asn1c_defs/E2N_ProtocolIE-Container.h
new file mode 100644
index 0000000..0fc22ef
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Container.h
@@ -0,0 +1,187 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_Container_H_
+#define	_E2N_ProtocolIE_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_RICsubscriptionRequest_IEs;
+struct E2N_RICsubscriptionResponse_IEs;
+struct E2N_RICsubscriptionFailure_IEs;
+struct E2N_RICsubscriptionDeleteRequest_IEs;
+struct E2N_RICsubscriptionDeleteResponse_IEs;
+struct E2N_RICsubscriptionDeleteFailure_IEs;
+struct E2N_RICindication_IEs;
+struct E2N_RICcontrolRequest_IEs;
+struct E2N_RICcontrolAcknowledge_IEs;
+struct E2N_RICcontrolFailure_IEs;
+struct E2N_RICserviceUpdate_IEs;
+struct E2N_RICserviceUpdateAcknowledge_IEs;
+struct E2N_RICserviceUpdateFailure_IEs;
+struct E2N_RICserviceQuery_IEs;
+
+/* E2N_ProtocolIE-Container */
+typedef struct E2N_ProtocolIE_Container_429P0 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P0_t;
+typedef struct E2N_ProtocolIE_Container_429P1 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P1_t;
+typedef struct E2N_ProtocolIE_Container_429P2 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P2_t;
+typedef struct E2N_ProtocolIE_Container_429P3 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionDeleteRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P3_t;
+typedef struct E2N_ProtocolIE_Container_429P4 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionDeleteResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P4_t;
+typedef struct E2N_ProtocolIE_Container_429P5 {
+	A_SEQUENCE_OF(struct E2N_RICsubscriptionDeleteFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P5_t;
+typedef struct E2N_ProtocolIE_Container_429P6 {
+	A_SEQUENCE_OF(struct E2N_RICindication_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P6_t;
+typedef struct E2N_ProtocolIE_Container_429P7 {
+	A_SEQUENCE_OF(struct E2N_RICcontrolRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P7_t;
+typedef struct E2N_ProtocolIE_Container_429P8 {
+	A_SEQUENCE_OF(struct E2N_RICcontrolAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P8_t;
+typedef struct E2N_ProtocolIE_Container_429P9 {
+	A_SEQUENCE_OF(struct E2N_RICcontrolFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P9_t;
+typedef struct E2N_ProtocolIE_Container_429P10 {
+	A_SEQUENCE_OF(struct E2N_RICserviceUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P10_t;
+typedef struct E2N_ProtocolIE_Container_429P11 {
+	A_SEQUENCE_OF(struct E2N_RICserviceUpdateAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P11_t;
+typedef struct E2N_ProtocolIE_Container_429P12 {
+	A_SEQUENCE_OF(struct E2N_RICserviceUpdateFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P12_t;
+typedef struct E2N_ProtocolIE_Container_429P13 {
+	A_SEQUENCE_OF(struct E2N_RICserviceQuery_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_ProtocolIE_Container_429P13_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P0;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P0_1[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P1;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P1_3[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P1_constr_3;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P2;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P2_specs_5;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P2_5[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P2_constr_5;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P3;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P3_specs_7;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P3_7[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P3_constr_7;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P4;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P4_specs_9;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P4_9[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P4_constr_9;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P5;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P5_specs_11;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P5_11[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P5_constr_11;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P6;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P6_specs_13;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P6_13[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P6_constr_13;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P7;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P7_specs_15;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P7_15[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P7_constr_15;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P8;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P8_specs_17;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P8_17[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P8_constr_17;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P9;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P9_specs_19;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P9_19[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P9_constr_19;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P10;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P10_specs_21;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P10_21[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P10_constr_21;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P11;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P11_specs_23;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P11_23[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P11_constr_23;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P12;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P12_specs_25;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P12_25[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P12_constr_25;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Container_429P13;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_ProtocolIE_Container_429P13_specs_27;
+extern asn_TYPE_member_t asn_MBR_E2N_ProtocolIE_Container_429P13_27[1];
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_Container_429P13_constr_27;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerList.c b/asn1c_defs/E2N_ProtocolIE-ContainerList.c
new file mode 100644
index 0000000..78ea478
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerList.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-ContainerList.h"
+
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerList.h b/asn1c_defs/E2N_ProtocolIE-ContainerList.h
new file mode 100644
index 0000000..f79ee85
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerList.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_ContainerList_H_
+#define	_E2N_ProtocolIE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerPair.c b/asn1c_defs/E2N_ProtocolIE-ContainerPair.c
new file mode 100644
index 0000000..241a920
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerPair.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-ContainerPair.h"
+
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerPair.h b/asn1c_defs/E2N_ProtocolIE-ContainerPair.h
new file mode 100644
index 0000000..c10f220
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerPair.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_ContainerPair_H_
+#define	_E2N_ProtocolIE_ContainerPair_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_ContainerPair_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerPairList.c b/asn1c_defs/E2N_ProtocolIE-ContainerPairList.c
new file mode 100644
index 0000000..70ed9a5
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerPairList.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-ContainerPairList.h"
+
diff --git a/asn1c_defs/E2N_ProtocolIE-ContainerPairList.h b/asn1c_defs/E2N_ProtocolIE-ContainerPairList.h
new file mode 100644
index 0000000..e90c79a
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ContainerPairList.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_ContainerPairList_H_
+#define	_E2N_ProtocolIE_ContainerPairList_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_ContainerPairList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-Field.c b/asn1c_defs/E2N_ProtocolIE-Field.c
new file mode 100644
index 0000000..d448afb
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Field.c
@@ -0,0 +1,5538 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-Field.h"
+
+static const long asn_VAL_4_E2N_id_RICaction_ToBeSetup_Item = 60011;
+static const long asn_VAL_4_E2N_ignore = 1;
+static const long asn_VAL_4_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICaction_ToBeSetup_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_4_E2N_id_RICaction_ToBeSetup_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_4_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_ToBeSetup_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_4_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICaction_ToBeSetup_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RICaction_ToBeSetup_ItemIEs_1_rows }
+};
+static const long asn_VAL_9_E2N_id_RICaction_Admitted_Item = 60013;
+static const long asn_VAL_9_E2N_ignore = 1;
+static const long asn_VAL_9_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICaction_Admitted_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_9_E2N_id_RICaction_Admitted_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_9_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_Admitted_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_9_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICaction_Admitted_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RICaction_Admitted_ItemIEs_1_rows }
+};
+static const long asn_VAL_10_E2N_id_RICaction_NotAdmitted_Item = 60015;
+static const long asn_VAL_10_E2N_ignore = 1;
+static const long asn_VAL_10_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICaction_NotAdmitted_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_10_E2N_id_RICaction_NotAdmitted_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_10_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_NotAdmitted_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_10_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICaction_NotAdmitted_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RICaction_NotAdmitted_ItemIEs_1_rows }
+};
+static const long asn_VAL_48_E2N_id_RANfunction_Item = 60001;
+static const long asn_VAL_48_E2N_ignore = 1;
+static const long asn_VAL_48_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RANfunction_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_48_E2N_id_RANfunction_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_48_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunction_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_48_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RANfunction_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RANfunction_ItemIEs_1_rows }
+};
+static const long asn_VAL_49_E2N_id_RANfunctionID_Item = 60004;
+static const long asn_VAL_49_E2N_ignore = 1;
+static const long asn_VAL_49_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RANfunctionID_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_49_E2N_id_RANfunctionID_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_49_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_49_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RANfunctionID_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RANfunctionID_ItemIEs_1_rows }
+};
+static const long asn_VAL_52_E2N_id_RANfunctionIEcause_Item = 60005;
+static const long asn_VAL_52_E2N_ignore = 1;
+static const long asn_VAL_52_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RANfunctionIDcause_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_52_E2N_id_RANfunctionIEcause_Item },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_52_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionIDcause_Item },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_52_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RANfunctionIDcause_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RANfunctionIDcause_ItemIEs_1_rows }
+};
+static const long asn_VAL_1_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_1_E2N_reject = 0;
+static const long asn_VAL_1_E2N_mandatory = 2;
+static const long asn_VAL_2_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_2_E2N_reject = 0;
+static const long asn_VAL_2_E2N_mandatory = 2;
+static const long asn_VAL_3_E2N_id_RICsubscription = 60033;
+static const long asn_VAL_3_E2N_reject = 0;
+static const long asn_VAL_3_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_1_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_1_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_1_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_2_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_2_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_2_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_3_E2N_id_RICsubscription },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_3_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICsubscription },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_3_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionRequest_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2N_RICsubscriptionRequest_IEs_1_rows }
+};
+static const long asn_VAL_5_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_5_E2N_reject = 0;
+static const long asn_VAL_5_E2N_mandatory = 2;
+static const long asn_VAL_6_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_6_E2N_reject = 0;
+static const long asn_VAL_6_E2N_mandatory = 2;
+static const long asn_VAL_7_E2N_id_RICactions_Admitted = 60012;
+static const long asn_VAL_7_E2N_reject = 0;
+static const long asn_VAL_7_E2N_mandatory = 2;
+static const long asn_VAL_8_E2N_id_RICactions_NotAdmitted = 60014;
+static const long asn_VAL_8_E2N_reject = 0;
+static const long asn_VAL_8_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_5_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_5_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_5_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_6_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_6_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_6_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_7_E2N_id_RICactions_Admitted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_7_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_Admitted_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_7_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_8_E2N_id_RICactions_NotAdmitted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_8_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_NotAdmitted_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_8_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionResponse_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2N_RICsubscriptionResponse_IEs_1_rows }
+};
+static const long asn_VAL_11_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_11_E2N_reject = 0;
+static const long asn_VAL_11_E2N_mandatory = 2;
+static const long asn_VAL_12_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_12_E2N_reject = 0;
+static const long asn_VAL_12_E2N_mandatory = 2;
+static const long asn_VAL_13_E2N_id_RICactions_NotAdmitted = 60014;
+static const long asn_VAL_13_E2N_reject = 0;
+static const long asn_VAL_13_E2N_mandatory = 2;
+static const long asn_VAL_14_E2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_14_E2N_ignore = 1;
+static const long asn_VAL_14_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_11_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_11_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_11_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_12_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_12_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_12_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_13_E2N_id_RICactions_NotAdmitted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_13_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICaction_NotAdmitted_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_13_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_14_E2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_14_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_14_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2N_RICsubscriptionFailure_IEs_1_rows }
+};
+static const long asn_VAL_15_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_15_E2N_reject = 0;
+static const long asn_VAL_15_E2N_mandatory = 2;
+static const long asn_VAL_16_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_16_E2N_reject = 0;
+static const long asn_VAL_16_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionDeleteRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_15_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_15_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_15_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_16_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_16_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_16_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionDeleteRequest_IEs_1[] = {
+	{ 2, 4, asn_IOS_E2N_RICsubscriptionDeleteRequest_IEs_1_rows }
+};
+static const long asn_VAL_17_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_17_E2N_reject = 0;
+static const long asn_VAL_17_E2N_mandatory = 2;
+static const long asn_VAL_18_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_18_E2N_reject = 0;
+static const long asn_VAL_18_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionDeleteResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_17_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_17_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_17_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_18_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_18_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_18_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionDeleteResponse_IEs_1[] = {
+	{ 2, 4, asn_IOS_E2N_RICsubscriptionDeleteResponse_IEs_1_rows }
+};
+static const long asn_VAL_19_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_19_E2N_reject = 0;
+static const long asn_VAL_19_E2N_mandatory = 2;
+static const long asn_VAL_20_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_20_E2N_reject = 0;
+static const long asn_VAL_20_E2N_mandatory = 2;
+static const long asn_VAL_21_E2N_id_RICcause = 60020;
+static const long asn_VAL_21_E2N_ignore = 1;
+static const long asn_VAL_21_E2N_mandatory = 2;
+static const long asn_VAL_22_E2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_22_E2N_ignore = 1;
+static const long asn_VAL_22_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICsubscriptionDeleteFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_19_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_19_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_19_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_20_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_20_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_20_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_21_E2N_id_RICcause },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_21_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcause },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_21_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_22_E2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_22_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_22_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICsubscriptionDeleteFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2N_RICsubscriptionDeleteFailure_IEs_1_rows }
+};
+static const long asn_VAL_23_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_23_E2N_reject = 0;
+static const long asn_VAL_23_E2N_mandatory = 2;
+static const long asn_VAL_24_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_24_E2N_reject = 0;
+static const long asn_VAL_24_E2N_mandatory = 2;
+static const long asn_VAL_25_E2N_id_RICactionID = 60017;
+static const long asn_VAL_25_E2N_reject = 0;
+static const long asn_VAL_25_E2N_mandatory = 2;
+static const long asn_VAL_26_E2N_id_RICindicationSN = 60028;
+static const long asn_VAL_26_E2N_reject = 0;
+static const long asn_VAL_26_E2N_mandatory = 2;
+static const long asn_VAL_27_E2N_id_RICindicationType = 60029;
+static const long asn_VAL_27_E2N_reject = 0;
+static const long asn_VAL_27_E2N_mandatory = 2;
+static const long asn_VAL_28_E2N_id_RICindicationHeader = 60026;
+static const long asn_VAL_28_E2N_reject = 0;
+static const long asn_VAL_28_E2N_mandatory = 2;
+static const long asn_VAL_29_E2N_id_RICindicationMessage = 60027;
+static const long asn_VAL_29_E2N_reject = 0;
+static const long asn_VAL_29_E2N_mandatory = 2;
+static const long asn_VAL_30_E2N_id_RICcallProcessID = 60019;
+static const long asn_VAL_30_E2N_reject = 0;
+static const long asn_VAL_30_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICindication_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_23_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_23_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_23_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_24_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_24_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_24_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_25_E2N_id_RICactionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_25_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICactionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_25_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_26_E2N_id_RICindicationSN },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_26_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICindicationSN },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_26_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_27_E2N_id_RICindicationType },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_27_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICindicationType },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_27_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_28_E2N_id_RICindicationHeader },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_28_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICindicationHeader },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_28_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_29_E2N_id_RICindicationMessage },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_29_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICindicationMessage },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_29_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_30_E2N_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_30_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_30_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICindication_IEs_1[] = {
+	{ 8, 4, asn_IOS_E2N_RICindication_IEs_1_rows }
+};
+static const long asn_VAL_31_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_31_E2N_reject = 0;
+static const long asn_VAL_31_E2N_mandatory = 2;
+static const long asn_VAL_32_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_32_E2N_reject = 0;
+static const long asn_VAL_32_E2N_mandatory = 2;
+static const long asn_VAL_33_E2N_id_RICcallProcessID = 60019;
+static const long asn_VAL_33_E2N_reject = 0;
+static const long asn_VAL_33_E2N_optional = 0;
+static const long asn_VAL_34_E2N_id_RICcontrolHeader = 60022;
+static const long asn_VAL_34_E2N_reject = 0;
+static const long asn_VAL_34_E2N_mandatory = 2;
+static const long asn_VAL_35_E2N_id_RICcontrolMessage = 60023;
+static const long asn_VAL_35_E2N_reject = 0;
+static const long asn_VAL_35_E2N_mandatory = 2;
+static const long asn_VAL_36_E2N_id_RICcontrolAckRequest = 60021;
+static const long asn_VAL_36_E2N_reject = 0;
+static const long asn_VAL_36_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICcontrolRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_31_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_31_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_31_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_32_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_32_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_32_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_33_E2N_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_33_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_33_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_34_E2N_id_RICcontrolHeader },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_34_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcontrolHeader },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_34_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_35_E2N_id_RICcontrolMessage },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_35_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcontrolMessage },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_35_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_36_E2N_id_RICcontrolAckRequest },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_36_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcontrolAckRequest },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_36_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICcontrolRequest_IEs_1[] = {
+	{ 6, 4, asn_IOS_E2N_RICcontrolRequest_IEs_1_rows }
+};
+static const long asn_VAL_37_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_37_E2N_reject = 0;
+static const long asn_VAL_37_E2N_mandatory = 2;
+static const long asn_VAL_38_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_38_E2N_reject = 0;
+static const long asn_VAL_38_E2N_mandatory = 2;
+static const long asn_VAL_39_E2N_id_RICcallProcessID = 60019;
+static const long asn_VAL_39_E2N_reject = 0;
+static const long asn_VAL_39_E2N_optional = 0;
+static const long asn_VAL_40_E2N_id_RICcontrolStatus = 60024;
+static const long asn_VAL_40_E2N_reject = 0;
+static const long asn_VAL_40_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICcontrolAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_37_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_37_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_37_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_38_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_38_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_38_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_39_E2N_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_39_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_39_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_40_E2N_id_RICcontrolStatus },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_40_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcontrolStatus },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_40_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICcontrolAcknowledge_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2N_RICcontrolAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_41_E2N_id_RICrequestID = 60030;
+static const long asn_VAL_41_E2N_reject = 0;
+static const long asn_VAL_41_E2N_mandatory = 2;
+static const long asn_VAL_42_E2N_id_RANfunctionID = 60003;
+static const long asn_VAL_42_E2N_reject = 0;
+static const long asn_VAL_42_E2N_mandatory = 2;
+static const long asn_VAL_43_E2N_id_RICcallProcessID = 60019;
+static const long asn_VAL_43_E2N_reject = 0;
+static const long asn_VAL_43_E2N_optional = 0;
+static const long asn_VAL_44_E2N_id_RICcause = 60020;
+static const long asn_VAL_44_E2N_ignore = 1;
+static const long asn_VAL_44_E2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_E2N_RICcontrolFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_41_E2N_id_RICrequestID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_41_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICrequestID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_41_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_42_E2N_id_RANfunctionID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_42_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_42_E2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_43_E2N_id_RICcallProcessID },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_43_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcallProcessID },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_43_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_44_E2N_id_RICcause },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_44_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RICcause },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_44_E2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICcontrolFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_E2N_RICcontrolFailure_IEs_1_rows }
+};
+static const long asn_VAL_45_E2N_id_RANfunctionsAdded = 60007;
+static const long asn_VAL_45_E2N_reject = 0;
+static const long asn_VAL_45_E2N_optional = 0;
+static const long asn_VAL_46_E2N_id_RANfunctionsModified = 60009;
+static const long asn_VAL_46_E2N_reject = 0;
+static const long asn_VAL_46_E2N_optional = 0;
+static const long asn_VAL_47_E2N_id_RANfunctionsDeleted = 60008;
+static const long asn_VAL_47_E2N_reject = 0;
+static const long asn_VAL_47_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICserviceUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_45_E2N_id_RANfunctionsAdded },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_45_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctions_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_45_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_46_E2N_id_RANfunctionsModified },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_46_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctions_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_46_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_47_E2N_id_RANfunctionsDeleted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_47_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_47_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICserviceUpdate_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2N_RICserviceUpdate_IEs_1_rows }
+};
+static const long asn_VAL_50_E2N_id_RANfunctionsAccepted = 60006;
+static const long asn_VAL_50_E2N_reject = 0;
+static const long asn_VAL_50_E2N_optional = 0;
+static const long asn_VAL_51_E2N_id_RANfunctionsRejected = 60010;
+static const long asn_VAL_51_E2N_reject = 0;
+static const long asn_VAL_51_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICserviceUpdateAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_50_E2N_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_50_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_50_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_51_E2N_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_51_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionsIDcause_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_51_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICserviceUpdateAcknowledge_IEs_1[] = {
+	{ 2, 4, asn_IOS_E2N_RICserviceUpdateAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_53_E2N_id_RANfunctionsRejected = 60010;
+static const long asn_VAL_53_E2N_ignore = 1;
+static const long asn_VAL_53_E2N_optional = 0;
+static const long asn_VAL_54_E2N_id_TimeToWait = 22;
+static const long asn_VAL_54_E2N_ignore = 1;
+static const long asn_VAL_54_E2N_optional = 0;
+static const long asn_VAL_55_E2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_55_E2N_ignore = 1;
+static const long asn_VAL_55_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICserviceUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_53_E2N_id_RANfunctionsRejected },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_53_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionsIDcause_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_53_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_54_E2N_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_54_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_54_E2N_optional },
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_55_E2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_55_E2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_E2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_55_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICserviceUpdateFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_E2N_RICserviceUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_56_E2N_id_RANfunctionsAccepted = 60006;
+static const long asn_VAL_56_E2N_reject = 0;
+static const long asn_VAL_56_E2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_E2N_RICserviceQuery_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_E2N_ProtocolIE_ID, &asn_VAL_56_E2N_id_RANfunctionsAccepted },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_56_E2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_E2N_RANfunctionsID_List },
+	{ "&presence", aioc__value, &asn_DEF_E2N_Presence, &asn_VAL_56_E2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_E2N_RICserviceQuery_IEs_1[] = {
+	{ 1, 4, asn_IOS_E2N_RICserviceQuery_IEs_1_rows }
+};
+static int
+memb_E2N_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICaction_ToBeSetup_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_ToBeSetup_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICaction_ToBeSetup_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_ToBeSetup_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICaction_Admitted_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_Admitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_Admitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICaction_Admitted_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_Admitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_Admitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICaction_NotAdmitted_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_NotAdmitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICaction_NotAdmitted_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICaction_NotAdmitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RANfunction_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunction_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunction_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RANfunction_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunction_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunction_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RANfunctionID_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunctionID_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunctionID_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RANfunctionID_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunctionID_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunctionID_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RANfunctionIDcause_ItemIEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunctionIDcause_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunctionIDcause_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RANfunctionIDcause_ItemIEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RANfunctionIDcause_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RANfunctionIDcause_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionRequest_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionRequest_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionResponse_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionResponse_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionFailure_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionFailure_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteRequest_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteRequest_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteResponse_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteResponse_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteFailure_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICsubscriptionDeleteFailure_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICsubscriptionDeleteFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICindication_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICindication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICindication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICindication_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICindication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICindication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICcontrolRequest_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICcontrolRequest_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICcontrolAcknowledge_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICcontrolAcknowledge_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICcontrolFailure_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICcontrolFailure_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICcontrolFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICcontrolFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdate_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdate_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdate_IEs, id));
+	const int indexToPresence[4] = {
+		E2N_RICserviceUpdate_IEs__value_PR_NOTHING,
+		E2N_RICserviceUpdate_IEs__value_PR_RANfunctions_List,
+		E2N_RICserviceUpdate_IEs__value_PR_RANfunctions_List,
+		E2N_RICserviceUpdate_IEs__value_PR_RANfunctionsID_List
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdateAcknowledge_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdateAcknowledge_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdateFailure_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICserviceUpdateFailure_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_E2N_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RICserviceQuery_IEs_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceQuery_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceQuery_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RICserviceQuery_IEs_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_RICserviceQuery_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_RICserviceQuery_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_11 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_12 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_14 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_15 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_16 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_18 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_19 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_20 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_22 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_23 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_24 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_26 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_27 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_28 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_30 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_31 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_32 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_34 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_35 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_36 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_38 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_39 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_40 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_42 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_43 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_44 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_46 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_47 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_48 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_50 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_51 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_52 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_54 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_55 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_56 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_58 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_59 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_60 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_62 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_63 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_64 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_66 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_67 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_68 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_70 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_71 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_72 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_74 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_75 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_76 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_id_constr_78 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_79 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_80 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs__value, choice.RICaction_ToBeSetup_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_ToBeSetup_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-ToBeSetup-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-ToBeSetup-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_4 = {
+	sizeof(struct E2N_RICaction_ToBeSetup_ItemIEs__value),
+	offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs__value, present),
+	sizeof(((struct E2N_RICaction_ToBeSetup_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_4,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_4,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICaction_ToBeSetup_ItemIEs_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_2,  memb_E2N_id_constraint_1 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICaction_ToBeSetup_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_3,  memb_E2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_4,
+		select_RICaction_ToBeSetup_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_4,  memb_E2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_ToBeSetup_ItemIEs_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_ToBeSetup_ItemIEs_specs_1 = {
+	sizeof(struct E2N_RICaction_ToBeSetup_ItemIEs),
+	offsetof(struct E2N_RICaction_ToBeSetup_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RICaction_ToBeSetup_ItemIEs_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs = {
+	"RICaction-ToBeSetup-ItemIEs",
+	"RICaction-ToBeSetup-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_ToBeSetup_ItemIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_8[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_Admitted_ItemIEs__value, choice.RICaction_Admitted_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_Admitted_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-Admitted-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_8[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-Admitted-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_8 = {
+	sizeof(struct E2N_RICaction_Admitted_ItemIEs__value),
+	offsetof(struct E2N_RICaction_Admitted_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RICaction_Admitted_ItemIEs__value, present),
+	sizeof(((struct E2N_RICaction_Admitted_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_8,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_8 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_8,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_8	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICaction_Admitted_ItemIEs_5[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_Admitted_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_6,  memb_E2N_id_constraint_5 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_Admitted_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICaction_Admitted_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_7,  memb_E2N_criticality_constraint_5 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_Admitted_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_8,
+		select_RICaction_Admitted_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_8,  memb_E2N_value_constraint_5 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_Admitted_ItemIEs_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_Admitted_ItemIEs_specs_5 = {
+	sizeof(struct E2N_RICaction_Admitted_ItemIEs),
+	offsetof(struct E2N_RICaction_Admitted_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RICaction_Admitted_ItemIEs_tag2el_5,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_ItemIEs = {
+	"RICaction-Admitted-ItemIEs",
+	"RICaction-Admitted-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5,
+	sizeof(asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */
+	asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_ItemIEs_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_Admitted_ItemIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_Admitted_ItemIEs_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_12[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs__value, choice.RICaction_NotAdmitted_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_NotAdmitted_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-NotAdmitted-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_12[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICaction-NotAdmitted-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_12 = {
+	sizeof(struct E2N_RICaction_NotAdmitted_ItemIEs__value),
+	offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs__value, present),
+	sizeof(((struct E2N_RICaction_NotAdmitted_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_12,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_12 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_12,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_12	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICaction_NotAdmitted_ItemIEs_9[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_10,  memb_E2N_id_constraint_9 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICaction_NotAdmitted_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_11,  memb_E2N_criticality_constraint_9 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_12,
+		select_RICaction_NotAdmitted_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_12,  memb_E2N_value_constraint_9 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_NotAdmitted_ItemIEs_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_NotAdmitted_ItemIEs_specs_9 = {
+	sizeof(struct E2N_RICaction_NotAdmitted_ItemIEs),
+	offsetof(struct E2N_RICaction_NotAdmitted_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RICaction_NotAdmitted_ItemIEs_tag2el_9,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs = {
+	"RICaction-NotAdmitted-ItemIEs",
+	"RICaction-NotAdmitted-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9,
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */
+	asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_NotAdmitted_ItemIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_NotAdmitted_ItemIEs_specs_9	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_16[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_ItemIEs__value, choice.RANfunction_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunction_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunction-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_16[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunction-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_16 = {
+	sizeof(struct E2N_RANfunction_ItemIEs__value),
+	offsetof(struct E2N_RANfunction_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RANfunction_ItemIEs__value, present),
+	sizeof(((struct E2N_RANfunction_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_16,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_16 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_16,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_16	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RANfunction_ItemIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_14,  memb_E2N_id_constraint_13 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RANfunction_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_15,  memb_E2N_criticality_constraint_13 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_16,
+		select_RANfunction_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_16,  memb_E2N_value_constraint_13 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunction_ItemIEs_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunction_ItemIEs_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunction_ItemIEs_specs_13 = {
+	sizeof(struct E2N_RANfunction_ItemIEs),
+	offsetof(struct E2N_RANfunction_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RANfunction_ItemIEs_tag2el_13,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunction_ItemIEs = {
+	"RANfunction-ItemIEs",
+	"RANfunction-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunction_ItemIEs_tags_13,
+	sizeof(asn_DEF_E2N_RANfunction_ItemIEs_tags_13)
+		/sizeof(asn_DEF_E2N_RANfunction_ItemIEs_tags_13[0]), /* 1 */
+	asn_DEF_E2N_RANfunction_ItemIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunction_ItemIEs_tags_13)
+		/sizeof(asn_DEF_E2N_RANfunction_ItemIEs_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunction_ItemIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunction_ItemIEs_specs_13	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_20[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionID_ItemIEs__value, choice.RANfunctionID_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_20[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionID-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_20 = {
+	sizeof(struct E2N_RANfunctionID_ItemIEs__value),
+	offsetof(struct E2N_RANfunctionID_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RANfunctionID_ItemIEs__value, present),
+	sizeof(((struct E2N_RANfunctionID_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_20,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_20 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_20,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_20	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RANfunctionID_ItemIEs_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionID_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_18,  memb_E2N_id_constraint_17 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionID_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RANfunctionID_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_19,  memb_E2N_criticality_constraint_17 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionID_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_20,
+		select_RANfunctionID_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_20,  memb_E2N_value_constraint_17 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunctionID_ItemIEs_tag2el_17[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionID_ItemIEs_specs_17 = {
+	sizeof(struct E2N_RANfunctionID_ItemIEs),
+	offsetof(struct E2N_RANfunctionID_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RANfunctionID_ItemIEs_tag2el_17,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID_ItemIEs = {
+	"RANfunctionID-ItemIEs",
+	"RANfunctionID-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17,
+	sizeof(asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17)
+		/sizeof(asn_DEF_E2N_RANfunctionID_ItemIEs_tags_17[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionID_ItemIEs_17,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_24[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_ItemIEs__value, choice.RANfunctionIDcause_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionIDcause_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionIDcause-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_24[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionIDcause-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_24 = {
+	sizeof(struct E2N_RANfunctionIDcause_ItemIEs__value),
+	offsetof(struct E2N_RANfunctionIDcause_ItemIEs__value, _asn_ctx),
+	offsetof(struct E2N_RANfunctionIDcause_ItemIEs__value, present),
+	sizeof(((struct E2N_RANfunctionIDcause_ItemIEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_24,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_24 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_24,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_24	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RANfunctionIDcause_ItemIEs_21[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_22,  memb_E2N_id_constraint_21 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RANfunctionIDcause_ItemIEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_23,  memb_E2N_criticality_constraint_21 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_24,
+		select_RANfunctionIDcause_ItemIEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_24,  memb_E2N_value_constraint_21 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunctionIDcause_ItemIEs_tag2el_21[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionIDcause_ItemIEs_specs_21 = {
+	sizeof(struct E2N_RANfunctionIDcause_ItemIEs),
+	offsetof(struct E2N_RANfunctionIDcause_ItemIEs, _asn_ctx),
+	asn_MAP_E2N_RANfunctionIDcause_ItemIEs_tag2el_21,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionIDcause_ItemIEs = {
+	"RANfunctionIDcause-ItemIEs",
+	"RANfunctionIDcause-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21,
+	sizeof(asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21)
+		/sizeof(asn_DEF_E2N_RANfunctionIDcause_ItemIEs_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionIDcause_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_28[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs__value, choice.RICsubscription),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscription,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscription"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_28[] = { 1, 0, 2 };
+static const unsigned asn_MAP_E2N_value_from_canonical_28[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_28[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* RICsubscription */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_28 = {
+	sizeof(struct E2N_RICsubscriptionRequest_IEs__value),
+	offsetof(struct E2N_RICsubscriptionRequest_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionRequest_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionRequest_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_28,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_28,
+	asn_MAP_E2N_value_from_canonical_28,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_28 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_28,
+	3,	/* Elements count */
+	&asn_SPC_E2N_value_specs_28	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionRequest_IEs_25[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_26,  memb_E2N_id_constraint_25 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionRequest_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_27,  memb_E2N_criticality_constraint_25 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_28,
+		select_RICsubscriptionRequest_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_28,  memb_E2N_value_constraint_25 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionRequest_IEs_tag2el_25[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionRequest_IEs_specs_25 = {
+	sizeof(struct E2N_RICsubscriptionRequest_IEs),
+	offsetof(struct E2N_RICsubscriptionRequest_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionRequest_IEs_tag2el_25,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionRequest_IEs = {
+	"RICsubscriptionRequest-IEs",
+	"RICsubscriptionRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25,
+	sizeof(asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25)
+		/sizeof(asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25)
+		/sizeof(asn_DEF_E2N_RICsubscriptionRequest_IEs_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionRequest_IEs_25,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionRequest_IEs_specs_25	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_32[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs__value, choice.RICaction_Admitted_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_Admitted_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-Admitted-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs__value, choice.RICaction_NotAdmitted_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_NotAdmitted_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-NotAdmitted-List"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_32[] = { 1, 0, 2, 3 };
+static const unsigned asn_MAP_E2N_value_from_canonical_32[] = { 1, 0, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_32[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-Admitted-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* RICaction-NotAdmitted-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_32 = {
+	sizeof(struct E2N_RICsubscriptionResponse_IEs__value),
+	offsetof(struct E2N_RICsubscriptionResponse_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionResponse_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionResponse_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_32,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_32,
+	asn_MAP_E2N_value_from_canonical_32,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_32 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_32,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_32	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionResponse_IEs_29[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_30,  memb_E2N_id_constraint_29 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionResponse_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_31,  memb_E2N_criticality_constraint_29 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_32,
+		select_RICsubscriptionResponse_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_32,  memb_E2N_value_constraint_29 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionResponse_IEs_tag2el_29[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionResponse_IEs_specs_29 = {
+	sizeof(struct E2N_RICsubscriptionResponse_IEs),
+	offsetof(struct E2N_RICsubscriptionResponse_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionResponse_IEs_tag2el_29,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionResponse_IEs = {
+	"RICsubscriptionResponse-IEs",
+	"RICsubscriptionResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29,
+	sizeof(asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29)
+		/sizeof(asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29)
+		/sizeof(asn_DEF_E2N_RICsubscriptionResponse_IEs_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionResponse_IEs_29,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionResponse_IEs_specs_29	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_36[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs__value, choice.RICaction_NotAdmitted_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICaction_NotAdmitted_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICaction-NotAdmitted-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_36[] = { 1, 0, 2, 3 };
+static const unsigned asn_MAP_E2N_value_from_canonical_36[] = { 1, 0, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_36[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* RICaction-NotAdmitted-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_36 = {
+	sizeof(struct E2N_RICsubscriptionFailure_IEs__value),
+	offsetof(struct E2N_RICsubscriptionFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionFailure_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionFailure_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_36,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_36,
+	asn_MAP_E2N_value_from_canonical_36,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_36 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_36,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_36	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionFailure_IEs_33[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_34,  memb_E2N_id_constraint_33 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionFailure_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_35,  memb_E2N_criticality_constraint_33 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_36,
+		select_RICsubscriptionFailure_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_36,  memb_E2N_value_constraint_33 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionFailure_IEs_tag2el_33[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionFailure_IEs_specs_33 = {
+	sizeof(struct E2N_RICsubscriptionFailure_IEs),
+	offsetof(struct E2N_RICsubscriptionFailure_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionFailure_IEs_tag2el_33,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionFailure_IEs = {
+	"RICsubscriptionFailure-IEs",
+	"RICsubscriptionFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33,
+	sizeof(asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33)
+		/sizeof(asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33)
+		/sizeof(asn_DEF_E2N_RICsubscriptionFailure_IEs_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionFailure_IEs_33,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionFailure_IEs_specs_33	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_40[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_40[] = { 1, 0 };
+static const unsigned asn_MAP_E2N_value_from_canonical_40[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_40[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_40 = {
+	sizeof(struct E2N_RICsubscriptionDeleteRequest_IEs__value),
+	offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionDeleteRequest_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_40,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_40,
+	asn_MAP_E2N_value_from_canonical_40,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_40 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_40,
+	2,	/* Elements count */
+	&asn_SPC_E2N_value_specs_40	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteRequest_IEs_37[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_38,  memb_E2N_id_constraint_37 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionDeleteRequest_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_39,  memb_E2N_criticality_constraint_37 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_40,
+		select_RICsubscriptionDeleteRequest_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_40,  memb_E2N_value_constraint_37 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteRequest_IEs_tag2el_37[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteRequest_IEs_specs_37 = {
+	sizeof(struct E2N_RICsubscriptionDeleteRequest_IEs),
+	offsetof(struct E2N_RICsubscriptionDeleteRequest_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteRequest_IEs_tag2el_37,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs = {
+	"RICsubscriptionDeleteRequest-IEs",
+	"RICsubscriptionDeleteRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteRequest_IEs_37,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteRequest_IEs_specs_37	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_44[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_44[] = { 1, 0 };
+static const unsigned asn_MAP_E2N_value_from_canonical_44[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_44[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_44 = {
+	sizeof(struct E2N_RICsubscriptionDeleteResponse_IEs__value),
+	offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionDeleteResponse_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_44,
+	2,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_44,
+	asn_MAP_E2N_value_from_canonical_44,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_44 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_44,
+	2,	/* Elements count */
+	&asn_SPC_E2N_value_specs_44	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteResponse_IEs_41[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_42,  memb_E2N_id_constraint_41 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionDeleteResponse_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_43,  memb_E2N_criticality_constraint_41 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_44,
+		select_RICsubscriptionDeleteResponse_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_44,  memb_E2N_value_constraint_41 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteResponse_IEs_tag2el_41[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteResponse_IEs_specs_41 = {
+	sizeof(struct E2N_RICsubscriptionDeleteResponse_IEs),
+	offsetof(struct E2N_RICsubscriptionDeleteResponse_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteResponse_IEs_tag2el_41,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs = {
+	"RICsubscriptionDeleteResponse-IEs",
+	"RICsubscriptionDeleteResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs_tags_41[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteResponse_IEs_41,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteResponse_IEs_specs_41	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_48[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, choice.RICcause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_E2N_RICcause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_48[] = { 1, 0, 3, 2 };
+static const unsigned asn_MAP_E2N_value_from_canonical_48[] = { 1, 0, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_48[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 2, 0, 0 } /* ric */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_48 = {
+	sizeof(struct E2N_RICsubscriptionDeleteFailure_IEs__value),
+	offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs__value, present),
+	sizeof(((struct E2N_RICsubscriptionDeleteFailure_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_48,
+	8,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_48,
+	asn_MAP_E2N_value_from_canonical_48,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_48 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_48,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_48	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteFailure_IEs_45[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_46,  memb_E2N_id_constraint_45 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICsubscriptionDeleteFailure_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_47,  memb_E2N_criticality_constraint_45 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_48,
+		select_RICsubscriptionDeleteFailure_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_48,  memb_E2N_value_constraint_45 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteFailure_IEs_tag2el_45[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteFailure_IEs_specs_45 = {
+	sizeof(struct E2N_RICsubscriptionDeleteFailure_IEs),
+	offsetof(struct E2N_RICsubscriptionDeleteFailure_IEs, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteFailure_IEs_tag2el_45,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs = {
+	"RICsubscriptionDeleteFailure-IEs",
+	"RICsubscriptionDeleteFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs_tags_45[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteFailure_IEs_45,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteFailure_IEs_specs_45	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_52[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICactionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RICactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICactionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICindicationSN),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RICindicationSN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICindicationSN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICindicationType),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_E2N_RICindicationType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICindicationType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICindicationHeader),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICindicationHeader,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICindicationHeader"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICindicationMessage),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICindicationMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICindicationMessage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs__value, choice.RICcallProcessID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcallProcessID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcallProcessID"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_52[] = { 1, 2, 3, 5, 6, 7, 4, 0 };
+static const unsigned asn_MAP_E2N_value_from_canonical_52[] = { 7, 0, 1, 2, 6, 3, 4, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_52[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 2 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* RICactionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* RICindicationSN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 2 }, /* RICindicationHeader */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* RICindicationMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* RICcallProcessID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* RICindicationType */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_52 = {
+	sizeof(struct E2N_RICindication_IEs__value),
+	offsetof(struct E2N_RICindication_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICindication_IEs__value, present),
+	sizeof(((struct E2N_RICindication_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_52,
+	8,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_52,
+	asn_MAP_E2N_value_from_canonical_52,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_52 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_52,
+	8,	/* Elements count */
+	&asn_SPC_E2N_value_specs_52	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICindication_IEs_49[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_50,  memb_E2N_id_constraint_49 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICindication_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_51,  memb_E2N_criticality_constraint_49 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_52,
+		select_RICindication_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_52,  memb_E2N_value_constraint_49 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICindication_IEs_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICindication_IEs_tag2el_49[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICindication_IEs_specs_49 = {
+	sizeof(struct E2N_RICindication_IEs),
+	offsetof(struct E2N_RICindication_IEs, _asn_ctx),
+	asn_MAP_E2N_RICindication_IEs_tag2el_49,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindication_IEs = {
+	"RICindication-IEs",
+	"RICindication-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICindication_IEs_tags_49,
+	sizeof(asn_DEF_E2N_RICindication_IEs_tags_49)
+		/sizeof(asn_DEF_E2N_RICindication_IEs_tags_49[0]), /* 1 */
+	asn_DEF_E2N_RICindication_IEs_tags_49,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindication_IEs_tags_49)
+		/sizeof(asn_DEF_E2N_RICindication_IEs_tags_49[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICindication_IEs_49,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICindication_IEs_specs_49	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_56[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RICcallProcessID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcallProcessID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcallProcessID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RICcontrolHeader),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolHeader,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolHeader"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RICcontrolMessage),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolMessage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs__value, choice.RICcontrolAckRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolAckRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolAckRequest"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_56[] = { 1, 2, 3, 4, 5, 0 };
+static const unsigned asn_MAP_E2N_value_from_canonical_56[] = { 5, 0, 1, 2, 3, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_56[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 2 }, /* RICcallProcessID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, -1, 1 }, /* RICcontrolHeader */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, -2, 0 }, /* RICcontrolMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* RICcontrolAckRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_56 = {
+	sizeof(struct E2N_RICcontrolRequest_IEs__value),
+	offsetof(struct E2N_RICcontrolRequest_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICcontrolRequest_IEs__value, present),
+	sizeof(((struct E2N_RICcontrolRequest_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_56,
+	6,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_56,
+	asn_MAP_E2N_value_from_canonical_56,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_56 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_56,
+	6,	/* Elements count */
+	&asn_SPC_E2N_value_specs_56	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolRequest_IEs_53[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_54,  memb_E2N_id_constraint_53 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICcontrolRequest_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_55,  memb_E2N_criticality_constraint_53 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_56,
+		select_RICcontrolRequest_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_56,  memb_E2N_value_constraint_53 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolRequest_IEs_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolRequest_IEs_tag2el_53[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolRequest_IEs_specs_53 = {
+	sizeof(struct E2N_RICcontrolRequest_IEs),
+	offsetof(struct E2N_RICcontrolRequest_IEs, _asn_ctx),
+	asn_MAP_E2N_RICcontrolRequest_IEs_tag2el_53,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolRequest_IEs = {
+	"RICcontrolRequest-IEs",
+	"RICcontrolRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolRequest_IEs_tags_53,
+	sizeof(asn_DEF_E2N_RICcontrolRequest_IEs_tags_53)
+		/sizeof(asn_DEF_E2N_RICcontrolRequest_IEs_tags_53[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolRequest_IEs_tags_53,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolRequest_IEs_tags_53)
+		/sizeof(asn_DEF_E2N_RICcontrolRequest_IEs_tags_53[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolRequest_IEs_53,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolRequest_IEs_specs_53	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_60[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, choice.RICcallProcessID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcallProcessID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcallProcessID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, choice.RICcontrolStatus),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolStatus"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_60[] = { 1, 2, 3, 0 };
+static const unsigned asn_MAP_E2N_value_from_canonical_60[] = { 3, 0, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_60[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* RICcallProcessID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 0 }, /* RICcontrolStatus */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RICrequestID */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_60 = {
+	sizeof(struct E2N_RICcontrolAcknowledge_IEs__value),
+	offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICcontrolAcknowledge_IEs__value, present),
+	sizeof(((struct E2N_RICcontrolAcknowledge_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_60,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_60,
+	asn_MAP_E2N_value_from_canonical_60,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_60 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_60,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_60	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolAcknowledge_IEs_57[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_58,  memb_E2N_id_constraint_57 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICcontrolAcknowledge_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_59,  memb_E2N_criticality_constraint_57 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_60,
+		select_RICcontrolAcknowledge_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_60,  memb_E2N_value_constraint_57 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolAcknowledge_IEs_tag2el_57[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolAcknowledge_IEs_specs_57 = {
+	sizeof(struct E2N_RICcontrolAcknowledge_IEs),
+	offsetof(struct E2N_RICcontrolAcknowledge_IEs, _asn_ctx),
+	asn_MAP_E2N_RICcontrolAcknowledge_IEs_tag2el_57,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAcknowledge_IEs = {
+	"RICcontrolAcknowledge-IEs",
+	"RICcontrolAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57,
+	sizeof(asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57)
+		/sizeof(asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57)
+		/sizeof(asn_DEF_E2N_RICcontrolAcknowledge_IEs_tags_57[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolAcknowledge_IEs_57,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolAcknowledge_IEs_specs_57	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_64[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs__value, choice.RICrequestID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICrequestID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICrequestID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs__value, choice.RANfunctionID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs__value, choice.RICcallProcessID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_E2N_RICcallProcessID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcallProcessID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs__value, choice.RICcause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_E2N_RICcause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcause"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_64[] = { 1, 2, 0, 3 };
+static const unsigned asn_MAP_E2N_value_from_canonical_64[] = { 2, 0, 1, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_64[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* RANfunctionID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* RICcallProcessID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* RICrequestID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* ric */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_64 = {
+	sizeof(struct E2N_RICcontrolFailure_IEs__value),
+	offsetof(struct E2N_RICcontrolFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICcontrolFailure_IEs__value, present),
+	sizeof(((struct E2N_RICcontrolFailure_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_64,
+	8,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_64,
+	asn_MAP_E2N_value_from_canonical_64,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_64 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_64,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_64	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolFailure_IEs_61[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_62,  memb_E2N_id_constraint_61 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICcontrolFailure_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_63,  memb_E2N_criticality_constraint_61 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_64,
+		select_RICcontrolFailure_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_64,  memb_E2N_value_constraint_61 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolFailure_IEs_tags_61[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolFailure_IEs_tag2el_61[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolFailure_IEs_specs_61 = {
+	sizeof(struct E2N_RICcontrolFailure_IEs),
+	offsetof(struct E2N_RICcontrolFailure_IEs, _asn_ctx),
+	asn_MAP_E2N_RICcontrolFailure_IEs_tag2el_61,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolFailure_IEs = {
+	"RICcontrolFailure-IEs",
+	"RICcontrolFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolFailure_IEs_tags_61,
+	sizeof(asn_DEF_E2N_RICcontrolFailure_IEs_tags_61)
+		/sizeof(asn_DEF_E2N_RICcontrolFailure_IEs_tags_61[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolFailure_IEs_tags_61,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolFailure_IEs_tags_61)
+		/sizeof(asn_DEF_E2N_RICcontrolFailure_IEs_tags_61[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolFailure_IEs_61,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolFailure_IEs_specs_61	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_68[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate_IEs__value, choice.RANfunctions_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctions_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctions-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate_IEs__value, choice.RANfunctionsID_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionsID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionsID-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_68[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctions-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsID-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_68 = {
+	sizeof(struct E2N_RICserviceUpdate_IEs__value),
+	offsetof(struct E2N_RICserviceUpdate_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICserviceUpdate_IEs__value, present),
+	sizeof(((struct E2N_RICserviceUpdate_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_68,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_68 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_68,
+	2,	/* Elements count */
+	&asn_SPC_E2N_value_specs_68	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdate_IEs_65[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_66,  memb_E2N_id_constraint_65 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICserviceUpdate_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_67,  memb_E2N_criticality_constraint_65 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_68,
+		select_RICserviceUpdate_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_68,  memb_E2N_value_constraint_65 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdate_IEs_tags_65[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdate_IEs_tag2el_65[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdate_IEs_specs_65 = {
+	sizeof(struct E2N_RICserviceUpdate_IEs),
+	offsetof(struct E2N_RICserviceUpdate_IEs, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdate_IEs_tag2el_65,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdate_IEs = {
+	"RICserviceUpdate-IEs",
+	"RICserviceUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdate_IEs_tags_65,
+	sizeof(asn_DEF_E2N_RICserviceUpdate_IEs_tags_65)
+		/sizeof(asn_DEF_E2N_RICserviceUpdate_IEs_tags_65[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdate_IEs_tags_65,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdate_IEs_tags_65)
+		/sizeof(asn_DEF_E2N_RICserviceUpdate_IEs_tags_65[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdate_IEs_65,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdate_IEs_specs_65	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_72[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsID_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionsID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionsID-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs__value, choice.RANfunctionsIDcause_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionsIDcause_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionsIDcause-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_72[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsID-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RANfunctionsIDcause-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_72 = {
+	sizeof(struct E2N_RICserviceUpdateAcknowledge_IEs__value),
+	offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs__value, present),
+	sizeof(((struct E2N_RICserviceUpdateAcknowledge_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_72,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_72 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_72,
+	2,	/* Elements count */
+	&asn_SPC_E2N_value_specs_72	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateAcknowledge_IEs_69[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_70,  memb_E2N_id_constraint_69 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICserviceUpdateAcknowledge_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_71,  memb_E2N_criticality_constraint_69 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_72,
+		select_RICserviceUpdateAcknowledge_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_72,  memb_E2N_value_constraint_69 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdateAcknowledge_IEs_tag2el_69[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateAcknowledge_IEs_specs_69 = {
+	sizeof(struct E2N_RICserviceUpdateAcknowledge_IEs),
+	offsetof(struct E2N_RICserviceUpdateAcknowledge_IEs, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdateAcknowledge_IEs_tag2el_69,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs = {
+	"RICserviceUpdateAcknowledge-IEs",
+	"RICserviceUpdateAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69,
+	sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs_tags_69[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdateAcknowledge_IEs_69,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdateAcknowledge_IEs_specs_69	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_76[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs__value, choice.RANfunctionsIDcause_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionsIDcause_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionsIDcause-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_E2N_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_E2N_value_to_canonical_76[] = { 1, 0, 2 };
+static const unsigned asn_MAP_E2N_value_from_canonical_76[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_76[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* RANfunctionsIDcause-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_76 = {
+	sizeof(struct E2N_RICserviceUpdateFailure_IEs__value),
+	offsetof(struct E2N_RICserviceUpdateFailure_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICserviceUpdateFailure_IEs__value, present),
+	sizeof(((struct E2N_RICserviceUpdateFailure_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_76,
+	3,	/* Count of tags in the map */
+	asn_MAP_E2N_value_to_canonical_76,
+	asn_MAP_E2N_value_from_canonical_76,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_76 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_76,
+	3,	/* Elements count */
+	&asn_SPC_E2N_value_specs_76	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateFailure_IEs_73[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_74,  memb_E2N_id_constraint_73 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICserviceUpdateFailure_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_75,  memb_E2N_criticality_constraint_73 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_76,
+		select_RICserviceUpdateFailure_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_76,  memb_E2N_value_constraint_73 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdateFailure_IEs_tag2el_73[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateFailure_IEs_specs_73 = {
+	sizeof(struct E2N_RICserviceUpdateFailure_IEs),
+	offsetof(struct E2N_RICserviceUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdateFailure_IEs_tag2el_73,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateFailure_IEs = {
+	"RICserviceUpdateFailure-IEs",
+	"RICserviceUpdateFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73,
+	sizeof(asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateFailure_IEs_tags_73[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdateFailure_IEs_73,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdateFailure_IEs_specs_73	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_E2N_value_80[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceQuery_IEs__value, choice.RANfunctionsID_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RANfunctionsID_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RANfunctionsID-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_80[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RANfunctionsID-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_80 = {
+	sizeof(struct E2N_RICserviceQuery_IEs__value),
+	offsetof(struct E2N_RICserviceQuery_IEs__value, _asn_ctx),
+	offsetof(struct E2N_RICserviceQuery_IEs__value, present),
+	sizeof(((struct E2N_RICserviceQuery_IEs__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_80,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_80 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_80,
+	1,	/* Elements count */
+	&asn_SPC_E2N_value_specs_80	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceQuery_IEs_77[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceQuery_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_E2N_id_constr_78,  memb_E2N_id_constraint_77 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceQuery_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_RICserviceQuery_IEs_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_79,  memb_E2N_criticality_constraint_77 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceQuery_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_80,
+		select_RICserviceQuery_IEs_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_80,  memb_E2N_value_constraint_77 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceQuery_IEs_tags_77[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceQuery_IEs_tag2el_77[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceQuery_IEs_specs_77 = {
+	sizeof(struct E2N_RICserviceQuery_IEs),
+	offsetof(struct E2N_RICserviceQuery_IEs, _asn_ctx),
+	asn_MAP_E2N_RICserviceQuery_IEs_tag2el_77,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceQuery_IEs = {
+	"RICserviceQuery-IEs",
+	"RICserviceQuery-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceQuery_IEs_tags_77,
+	sizeof(asn_DEF_E2N_RICserviceQuery_IEs_tags_77)
+		/sizeof(asn_DEF_E2N_RICserviceQuery_IEs_tags_77[0]), /* 1 */
+	asn_DEF_E2N_RICserviceQuery_IEs_tags_77,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceQuery_IEs_tags_77)
+		/sizeof(asn_DEF_E2N_RICserviceQuery_IEs_tags_77[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceQuery_IEs_77,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICserviceQuery_IEs_specs_77	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolIE-Field.h b/asn1c_defs/E2N_ProtocolIE-Field.h
new file mode 100644
index 0000000..f13d3cc
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Field.h
@@ -0,0 +1,596 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_Field_H_
+#define	_E2N_ProtocolIE_Field_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-ID.h"
+#include "E2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "E2N_RICaction-ToBeSetup-Item.h"
+#include "E2N_Presence.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+#include "E2N_RICaction-Admitted-Item.h"
+#include "E2N_RICaction-NotAdmitted-Item.h"
+#include "E2N_RANfunction-Item.h"
+#include "E2N_RANfunctionID-Item.h"
+#include "E2N_RANfunctionIDcause-Item.h"
+#include "E2N_RICrequestID.h"
+#include "E2N_RANfunctionID.h"
+#include "E2N_RICsubscription.h"
+#include "E2N_RICaction-Admitted-List.h"
+#include "E2N_RICaction-NotAdmitted-List.h"
+#include "E2N_CriticalityDiagnostics.h"
+#include "E2N_RICcause.h"
+#include "E2N_RICactionID.h"
+#include "E2N_RICindicationSN.h"
+#include "E2N_RICindicationType.h"
+#include "E2N_RICindicationHeader.h"
+#include "E2N_RICindicationMessage.h"
+#include "E2N_RICcallProcessID.h"
+#include "E2N_RICcontrolHeader.h"
+#include "E2N_RICcontrolMessage.h"
+#include "E2N_RICcontrolAckRequest.h"
+#include "E2N_RICcontrolStatus.h"
+#include "E2N_RANfunctions-List.h"
+#include "E2N_RANfunctionsID-List.h"
+#include "E2N_RANfunctionsIDcause-List.h"
+#include "E2N_TimeToWait.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICaction_ToBeSetup_ItemIEs__value_PR {
+	E2N_RICaction_ToBeSetup_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item
+} E2N_RICaction_ToBeSetup_ItemIEs__value_PR;
+typedef enum E2N_RICaction_Admitted_ItemIEs__value_PR {
+	E2N_RICaction_Admitted_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item
+} E2N_RICaction_Admitted_ItemIEs__value_PR;
+typedef enum E2N_RICaction_NotAdmitted_ItemIEs__value_PR {
+	E2N_RICaction_NotAdmitted_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item
+} E2N_RICaction_NotAdmitted_ItemIEs__value_PR;
+typedef enum E2N_RANfunction_ItemIEs__value_PR {
+	E2N_RANfunction_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RANfunction_ItemIEs__value_PR_RANfunction_Item
+} E2N_RANfunction_ItemIEs__value_PR;
+typedef enum E2N_RANfunctionID_ItemIEs__value_PR {
+	E2N_RANfunctionID_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RANfunctionID_ItemIEs__value_PR_RANfunctionID_Item
+} E2N_RANfunctionID_ItemIEs__value_PR;
+typedef enum E2N_RANfunctionIDcause_ItemIEs__value_PR {
+	E2N_RANfunctionIDcause_ItemIEs__value_PR_NOTHING,	/* No components present */
+	E2N_RANfunctionIDcause_ItemIEs__value_PR_RANfunctionIDcause_Item
+} E2N_RANfunctionIDcause_ItemIEs__value_PR;
+typedef enum E2N_RICsubscriptionRequest_IEs__value_PR {
+	E2N_RICsubscriptionRequest_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionRequest_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionRequest_IEs__value_PR_RANfunctionID,
+	E2N_RICsubscriptionRequest_IEs__value_PR_RICsubscription
+} E2N_RICsubscriptionRequest_IEs__value_PR;
+typedef enum E2N_RICsubscriptionResponse_IEs__value_PR {
+	E2N_RICsubscriptionResponse_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionResponse_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionResponse_IEs__value_PR_RANfunctionID,
+	E2N_RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List,
+	E2N_RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List
+} E2N_RICsubscriptionResponse_IEs__value_PR;
+typedef enum E2N_RICsubscriptionFailure_IEs__value_PR {
+	E2N_RICsubscriptionFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionFailure_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionFailure_IEs__value_PR_RANfunctionID,
+	E2N_RICsubscriptionFailure_IEs__value_PR_RICaction_NotAdmitted_List,
+	E2N_RICsubscriptionFailure_IEs__value_PR_CriticalityDiagnostics
+} E2N_RICsubscriptionFailure_IEs__value_PR;
+typedef enum E2N_RICsubscriptionDeleteRequest_IEs__value_PR {
+	E2N_RICsubscriptionDeleteRequest_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID
+} E2N_RICsubscriptionDeleteRequest_IEs__value_PR;
+typedef enum E2N_RICsubscriptionDeleteResponse_IEs__value_PR {
+	E2N_RICsubscriptionDeleteResponse_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionDeleteResponse_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionDeleteResponse_IEs__value_PR_RANfunctionID
+} E2N_RICsubscriptionDeleteResponse_IEs__value_PR;
+typedef enum E2N_RICsubscriptionDeleteFailure_IEs__value_PR {
+	E2N_RICsubscriptionDeleteFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICsubscriptionDeleteFailure_IEs__value_PR_RICrequestID,
+	E2N_RICsubscriptionDeleteFailure_IEs__value_PR_RANfunctionID,
+	E2N_RICsubscriptionDeleteFailure_IEs__value_PR_RICcause,
+	E2N_RICsubscriptionDeleteFailure_IEs__value_PR_CriticalityDiagnostics
+} E2N_RICsubscriptionDeleteFailure_IEs__value_PR;
+typedef enum E2N_RICindication_IEs__value_PR {
+	E2N_RICindication_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICindication_IEs__value_PR_RICrequestID,
+	E2N_RICindication_IEs__value_PR_RANfunctionID,
+	E2N_RICindication_IEs__value_PR_RICactionID,
+	E2N_RICindication_IEs__value_PR_RICindicationSN,
+	E2N_RICindication_IEs__value_PR_RICindicationType,
+	E2N_RICindication_IEs__value_PR_RICindicationHeader,
+	E2N_RICindication_IEs__value_PR_RICindicationMessage,
+	E2N_RICindication_IEs__value_PR_RICcallProcessID
+} E2N_RICindication_IEs__value_PR;
+typedef enum E2N_RICcontrolRequest_IEs__value_PR {
+	E2N_RICcontrolRequest_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICcontrolRequest_IEs__value_PR_RICrequestID,
+	E2N_RICcontrolRequest_IEs__value_PR_RANfunctionID,
+	E2N_RICcontrolRequest_IEs__value_PR_RICcallProcessID,
+	E2N_RICcontrolRequest_IEs__value_PR_RICcontrolHeader,
+	E2N_RICcontrolRequest_IEs__value_PR_RICcontrolMessage,
+	E2N_RICcontrolRequest_IEs__value_PR_RICcontrolAckRequest
+} E2N_RICcontrolRequest_IEs__value_PR;
+typedef enum E2N_RICcontrolAcknowledge_IEs__value_PR {
+	E2N_RICcontrolAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICcontrolAcknowledge_IEs__value_PR_RICrequestID,
+	E2N_RICcontrolAcknowledge_IEs__value_PR_RANfunctionID,
+	E2N_RICcontrolAcknowledge_IEs__value_PR_RICcallProcessID,
+	E2N_RICcontrolAcknowledge_IEs__value_PR_RICcontrolStatus
+} E2N_RICcontrolAcknowledge_IEs__value_PR;
+typedef enum E2N_RICcontrolFailure_IEs__value_PR {
+	E2N_RICcontrolFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICcontrolFailure_IEs__value_PR_RICrequestID,
+	E2N_RICcontrolFailure_IEs__value_PR_RANfunctionID,
+	E2N_RICcontrolFailure_IEs__value_PR_RICcallProcessID,
+	E2N_RICcontrolFailure_IEs__value_PR_RICcause
+} E2N_RICcontrolFailure_IEs__value_PR;
+typedef enum E2N_RICserviceUpdate_IEs__value_PR {
+	E2N_RICserviceUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICserviceUpdate_IEs__value_PR_RANfunctions_List,
+	E2N_RICserviceUpdate_IEs__value_PR_RANfunctionsID_List
+} E2N_RICserviceUpdate_IEs__value_PR;
+typedef enum E2N_RICserviceUpdateAcknowledge_IEs__value_PR {
+	E2N_RICserviceUpdateAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsID_List,
+	E2N_RICserviceUpdateAcknowledge_IEs__value_PR_RANfunctionsIDcause_List
+} E2N_RICserviceUpdateAcknowledge_IEs__value_PR;
+typedef enum E2N_RICserviceUpdateFailure_IEs__value_PR {
+	E2N_RICserviceUpdateFailure_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICserviceUpdateFailure_IEs__value_PR_RANfunctionsIDcause_List,
+	E2N_RICserviceUpdateFailure_IEs__value_PR_TimeToWait,
+	E2N_RICserviceUpdateFailure_IEs__value_PR_CriticalityDiagnostics
+} E2N_RICserviceUpdateFailure_IEs__value_PR;
+typedef enum E2N_RICserviceQuery_IEs__value_PR {
+	E2N_RICserviceQuery_IEs__value_PR_NOTHING,	/* No components present */
+	E2N_RICserviceQuery_IEs__value_PR_RANfunctionsID_List
+} E2N_RICserviceQuery_IEs__value_PR;
+
+/* E2N_ProtocolIE-Field */
+typedef struct E2N_RICaction_ToBeSetup_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICaction_ToBeSetup_ItemIEs__value {
+		E2N_RICaction_ToBeSetup_ItemIEs__value_PR present;
+		union E2N_RICaction_ToBeSetup_ItemIEs__E2N_value_u {
+			E2N_RICaction_ToBeSetup_Item_t	 RICaction_ToBeSetup_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_ToBeSetup_ItemIEs_t;
+typedef struct E2N_RICaction_Admitted_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICaction_Admitted_ItemIEs__value {
+		E2N_RICaction_Admitted_ItemIEs__value_PR present;
+		union E2N_RICaction_Admitted_ItemIEs__E2N_value_u {
+			E2N_RICaction_Admitted_Item_t	 RICaction_Admitted_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_Admitted_ItemIEs_t;
+typedef struct E2N_RICaction_NotAdmitted_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICaction_NotAdmitted_ItemIEs__value {
+		E2N_RICaction_NotAdmitted_ItemIEs__value_PR present;
+		union E2N_RICaction_NotAdmitted_ItemIEs__E2N_value_u {
+			E2N_RICaction_NotAdmitted_Item_t	 RICaction_NotAdmitted_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_NotAdmitted_ItemIEs_t;
+typedef struct E2N_RANfunction_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RANfunction_ItemIEs__value {
+		E2N_RANfunction_ItemIEs__value_PR present;
+		union E2N_RANfunction_ItemIEs__E2N_value_u {
+			E2N_RANfunction_Item_t	 RANfunction_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunction_ItemIEs_t;
+typedef struct E2N_RANfunctionID_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RANfunctionID_ItemIEs__value {
+		E2N_RANfunctionID_ItemIEs__value_PR present;
+		union E2N_RANfunctionID_ItemIEs__E2N_value_u {
+			E2N_RANfunctionID_Item_t	 RANfunctionID_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionID_ItemIEs_t;
+typedef struct E2N_RANfunctionIDcause_ItemIEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RANfunctionIDcause_ItemIEs__value {
+		E2N_RANfunctionIDcause_ItemIEs__value_PR present;
+		union E2N_RANfunctionIDcause_ItemIEs__E2N_value_u {
+			E2N_RANfunctionIDcause_Item_t	 RANfunctionIDcause_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionIDcause_ItemIEs_t;
+typedef struct E2N_RICsubscriptionRequest_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionRequest_IEs__value {
+		E2N_RICsubscriptionRequest_IEs__value_PR present;
+		union E2N_RICsubscriptionRequest_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICsubscription_t	 RICsubscription;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionRequest_IEs_t;
+typedef struct E2N_RICsubscriptionResponse_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionResponse_IEs__value {
+		E2N_RICsubscriptionResponse_IEs__value_PR present;
+		union E2N_RICsubscriptionResponse_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICaction_Admitted_List_t	 RICaction_Admitted_List;
+			E2N_RICaction_NotAdmitted_List_t	 RICaction_NotAdmitted_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionResponse_IEs_t;
+typedef struct E2N_RICsubscriptionFailure_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionFailure_IEs__value {
+		E2N_RICsubscriptionFailure_IEs__value_PR present;
+		union E2N_RICsubscriptionFailure_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICaction_NotAdmitted_List_t	 RICaction_NotAdmitted_List;
+			E2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionFailure_IEs_t;
+typedef struct E2N_RICsubscriptionDeleteRequest_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionDeleteRequest_IEs__value {
+		E2N_RICsubscriptionDeleteRequest_IEs__value_PR present;
+		union E2N_RICsubscriptionDeleteRequest_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteRequest_IEs_t;
+typedef struct E2N_RICsubscriptionDeleteResponse_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionDeleteResponse_IEs__value {
+		E2N_RICsubscriptionDeleteResponse_IEs__value_PR present;
+		union E2N_RICsubscriptionDeleteResponse_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteResponse_IEs_t;
+typedef struct E2N_RICsubscriptionDeleteFailure_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICsubscriptionDeleteFailure_IEs__value {
+		E2N_RICsubscriptionDeleteFailure_IEs__value_PR present;
+		union E2N_RICsubscriptionDeleteFailure_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICcause_t	 RICcause;
+			E2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteFailure_IEs_t;
+typedef struct E2N_RICindication_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICindication_IEs__value {
+		E2N_RICindication_IEs__value_PR present;
+		union E2N_RICindication_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICactionID_t	 RICactionID;
+			E2N_RICindicationSN_t	 RICindicationSN;
+			E2N_RICindicationType_t	 RICindicationType;
+			E2N_RICindicationHeader_t	 RICindicationHeader;
+			E2N_RICindicationMessage_t	 RICindicationMessage;
+			E2N_RICcallProcessID_t	 RICcallProcessID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICindication_IEs_t;
+typedef struct E2N_RICcontrolRequest_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICcontrolRequest_IEs__value {
+		E2N_RICcontrolRequest_IEs__value_PR present;
+		union E2N_RICcontrolRequest_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICcallProcessID_t	 RICcallProcessID;
+			E2N_RICcontrolHeader_t	 RICcontrolHeader;
+			E2N_RICcontrolMessage_t	 RICcontrolMessage;
+			E2N_RICcontrolAckRequest_t	 RICcontrolAckRequest;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolRequest_IEs_t;
+typedef struct E2N_RICcontrolAcknowledge_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICcontrolAcknowledge_IEs__value {
+		E2N_RICcontrolAcknowledge_IEs__value_PR present;
+		union E2N_RICcontrolAcknowledge_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICcallProcessID_t	 RICcallProcessID;
+			E2N_RICcontrolStatus_t	 RICcontrolStatus;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolAcknowledge_IEs_t;
+typedef struct E2N_RICcontrolFailure_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICcontrolFailure_IEs__value {
+		E2N_RICcontrolFailure_IEs__value_PR present;
+		union E2N_RICcontrolFailure_IEs__E2N_value_u {
+			E2N_RICrequestID_t	 RICrequestID;
+			E2N_RANfunctionID_t	 RANfunctionID;
+			E2N_RICcallProcessID_t	 RICcallProcessID;
+			E2N_RICcause_t	 RICcause;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolFailure_IEs_t;
+typedef struct E2N_RICserviceUpdate_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICserviceUpdate_IEs__value {
+		E2N_RICserviceUpdate_IEs__value_PR present;
+		union E2N_RICserviceUpdate_IEs__E2N_value_u {
+			E2N_RANfunctions_List_t	 RANfunctions_List;
+			E2N_RANfunctionsID_List_t	 RANfunctionsID_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdate_IEs_t;
+typedef struct E2N_RICserviceUpdateAcknowledge_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICserviceUpdateAcknowledge_IEs__value {
+		E2N_RICserviceUpdateAcknowledge_IEs__value_PR present;
+		union E2N_RICserviceUpdateAcknowledge_IEs__E2N_value_u {
+			E2N_RANfunctionsID_List_t	 RANfunctionsID_List;
+			E2N_RANfunctionsIDcause_List_t	 RANfunctionsIDcause_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdateAcknowledge_IEs_t;
+typedef struct E2N_RICserviceUpdateFailure_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICserviceUpdateFailure_IEs__value {
+		E2N_RICserviceUpdateFailure_IEs__value_PR present;
+		union E2N_RICserviceUpdateFailure_IEs__E2N_value_u {
+			E2N_RANfunctionsIDcause_List_t	 RANfunctionsIDcause_List;
+			E2N_TimeToWait_t	 TimeToWait;
+			E2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdateFailure_IEs_t;
+typedef struct E2N_RICserviceQuery_IEs {
+	E2N_ProtocolIE_ID_t	 id;
+	E2N_Criticality_t	 criticality;
+	struct E2N_RICserviceQuery_IEs__value {
+		E2N_RICserviceQuery_IEs__value_PR present;
+		union E2N_RICserviceQuery_IEs__E2N_value_u {
+			E2N_RANfunctionsID_List_t	 RANfunctionsID_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceQuery_IEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_ToBeSetup_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_ToBeSetup_ItemIEs_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICaction_ToBeSetup_ItemIEs_1[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_Admitted_ItemIEs_specs_5;
+extern asn_TYPE_member_t asn_MBR_E2N_RICaction_Admitted_ItemIEs_5[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_NotAdmitted_ItemIEs_specs_9;
+extern asn_TYPE_member_t asn_MBR_E2N_RICaction_NotAdmitted_ItemIEs_9[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunction_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunction_ItemIEs_specs_13;
+extern asn_TYPE_member_t asn_MBR_E2N_RANfunction_ItemIEs_13[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionID_ItemIEs_specs_17;
+extern asn_TYPE_member_t asn_MBR_E2N_RANfunctionID_ItemIEs_17[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionIDcause_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionIDcause_ItemIEs_specs_21;
+extern asn_TYPE_member_t asn_MBR_E2N_RANfunctionIDcause_ItemIEs_21[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionRequest_IEs_specs_25;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionRequest_IEs_25[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionResponse_IEs_specs_29;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionResponse_IEs_29[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionFailure_IEs_specs_33;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionFailure_IEs_33[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteRequest_IEs_specs_37;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteRequest_IEs_37[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteResponse_IEs_specs_41;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteResponse_IEs_41[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteFailure_IEs_specs_45;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteFailure_IEs_45[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindication_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICindication_IEs_specs_49;
+extern asn_TYPE_member_t asn_MBR_E2N_RICindication_IEs_49[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolRequest_IEs_specs_53;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolRequest_IEs_53[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolAcknowledge_IEs_specs_57;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolAcknowledge_IEs_57[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolFailure_IEs_specs_61;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolFailure_IEs_61[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdate_IEs_specs_65;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdate_IEs_65[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateAcknowledge_IEs_specs_69;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateAcknowledge_IEs_69[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateFailure_IEs_specs_73;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateFailure_IEs_73[3];
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceQuery_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceQuery_IEs_specs_77;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceQuery_IEs_77[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_Field_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-FieldPair.c b/asn1c_defs/E2N_ProtocolIE-FieldPair.c
new file mode 100644
index 0000000..fcf4e4d
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-FieldPair.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-FieldPair.h"
+
diff --git a/asn1c_defs/E2N_ProtocolIE-FieldPair.h b/asn1c_defs/E2N_ProtocolIE-FieldPair.h
new file mode 100644
index 0000000..d6dcd41
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-FieldPair.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_FieldPair_H_
+#define	_E2N_ProtocolIE_FieldPair_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_FieldPair_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-ID.c b/asn1c_defs/E2N_ProtocolIE-ID.c
new file mode 100644
index 0000000..bb541d6
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-ID.h"
+
+int
+E2N_ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_ID = {
+	"ProtocolIE-ID",
+	"ProtocolIE-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_ProtocolIE_ID_tags_1,
+	sizeof(asn_DEF_E2N_ProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_ProtocolIE_ID_constr_1, E2N_ProtocolIE_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolIE-ID.h b/asn1c_defs/E2N_ProtocolIE-ID.h
new file mode 100644
index 0000000..b836283
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-ID.h
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_ID_H_
+#define	_E2N_ProtocolIE_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_ProtocolIE-ID */
+typedef long	 E2N_ProtocolIE_ID_t;
+
+/* Implementation */
+#define E2N_ProtocolIE_ID_id_RANfunction_Item	((E2N_ProtocolIE_ID_t)60001)
+#define E2N_ProtocolIE_ID_id_RANfunctionDefinition	((E2N_ProtocolIE_ID_t)60002)
+#define E2N_ProtocolIE_ID_id_RANfunctionID	((E2N_ProtocolIE_ID_t)60003)
+#define E2N_ProtocolIE_ID_id_RANfunctionID_Item	((E2N_ProtocolIE_ID_t)60004)
+#define E2N_ProtocolIE_ID_id_RANfunctionIEcause_Item	((E2N_ProtocolIE_ID_t)60005)
+#define E2N_ProtocolIE_ID_id_RANfunctionsAccepted	((E2N_ProtocolIE_ID_t)60006)
+#define E2N_ProtocolIE_ID_id_RANfunctionsAdded	((E2N_ProtocolIE_ID_t)60007)
+#define E2N_ProtocolIE_ID_id_RANfunctionsDeleted	((E2N_ProtocolIE_ID_t)60008)
+#define E2N_ProtocolIE_ID_id_RANfunctionsModified	((E2N_ProtocolIE_ID_t)60009)
+#define E2N_ProtocolIE_ID_id_RANfunctionsRejected	((E2N_ProtocolIE_ID_t)60010)
+#define E2N_ProtocolIE_ID_id_RICaction_ToBeSetup_Item	((E2N_ProtocolIE_ID_t)60011)
+#define E2N_ProtocolIE_ID_id_RICactions_Admitted	((E2N_ProtocolIE_ID_t)60012)
+#define E2N_ProtocolIE_ID_id_RICaction_Admitted_Item	((E2N_ProtocolIE_ID_t)60013)
+#define E2N_ProtocolIE_ID_id_RICactions_NotAdmitted	((E2N_ProtocolIE_ID_t)60014)
+#define E2N_ProtocolIE_ID_id_RICaction_NotAdmitted_Item	((E2N_ProtocolIE_ID_t)60015)
+#define E2N_ProtocolIE_ID_id_RICactionDefinition	((E2N_ProtocolIE_ID_t)60016)
+#define E2N_ProtocolIE_ID_id_RICactionID	((E2N_ProtocolIE_ID_t)60017)
+#define E2N_ProtocolIE_ID_id_RICactionType	((E2N_ProtocolIE_ID_t)60018)
+#define E2N_ProtocolIE_ID_id_RICcallProcessID	((E2N_ProtocolIE_ID_t)60019)
+#define E2N_ProtocolIE_ID_id_RICcause	((E2N_ProtocolIE_ID_t)60020)
+#define E2N_ProtocolIE_ID_id_RICcontrolAckRequest	((E2N_ProtocolIE_ID_t)60021)
+#define E2N_ProtocolIE_ID_id_RICcontrolHeader	((E2N_ProtocolIE_ID_t)60022)
+#define E2N_ProtocolIE_ID_id_RICcontrolMessage	((E2N_ProtocolIE_ID_t)60023)
+#define E2N_ProtocolIE_ID_id_RICcontrolStatus	((E2N_ProtocolIE_ID_t)60024)
+#define E2N_ProtocolIE_ID_id_RICeventTriggerDefinition	((E2N_ProtocolIE_ID_t)60025)
+#define E2N_ProtocolIE_ID_id_RICindicationHeader	((E2N_ProtocolIE_ID_t)60026)
+#define E2N_ProtocolIE_ID_id_RICindicationMessage	((E2N_ProtocolIE_ID_t)60027)
+#define E2N_ProtocolIE_ID_id_RICindicationSN	((E2N_ProtocolIE_ID_t)60028)
+#define E2N_ProtocolIE_ID_id_RICindicationType	((E2N_ProtocolIE_ID_t)60029)
+#define E2N_ProtocolIE_ID_id_RICrequestID	((E2N_ProtocolIE_ID_t)60030)
+#define E2N_ProtocolIE_ID_id_RICrequestorID	((E2N_ProtocolIE_ID_t)60031)
+#define E2N_ProtocolIE_ID_id_RICrequestSequenceNumber	((E2N_ProtocolIE_ID_t)60032)
+#define E2N_ProtocolIE_ID_id_RICsubscription	((E2N_ProtocolIE_ID_t)60033)
+#define E2N_ProtocolIE_ID_id_RICsubsequentAction	((E2N_ProtocolIE_ID_t)60034)
+#define E2N_ProtocolIE_ID_id_RICsubsequentActionType	((E2N_ProtocolIE_ID_t)60035)
+#define E2N_ProtocolIE_ID_id_RICtimeToWait	((E2N_ProtocolIE_ID_t)60036)
+#define E2N_ProtocolIE_ID_id_CriticalityDiagnostics	((E2N_ProtocolIE_ID_t)17)
+#define E2N_ProtocolIE_ID_id_GlobalENB_ID	((E2N_ProtocolIE_ID_t)21)
+#define E2N_ProtocolIE_ID_id_TimeToWait	((E2N_ProtocolIE_ID_t)22)
+extern asn_per_constraints_t asn_PER_type_E2N_ProtocolIE_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_ID;
+asn_struct_free_f E2N_ProtocolIE_ID_free;
+asn_struct_print_f E2N_ProtocolIE_ID_print;
+asn_constr_check_f E2N_ProtocolIE_ID_constraint;
+ber_type_decoder_f E2N_ProtocolIE_ID_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_ID_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_ID_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_ID_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_ID_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_ID_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_ID_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_ProtocolIE-Single-Container.c b/asn1c_defs/E2N_ProtocolIE-Single-Container.c
new file mode 100644
index 0000000..a434f0b
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Single-Container.c
@@ -0,0 +1,147 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_ProtocolIE-Single-Container.h"
+
+/*
+ * This type is implemented using E2N_RICaction_ToBeSetup_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2N_RICaction_Admitted_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2N_RICaction_NotAdmitted_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2N_RANfunction_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2N_RANfunctionID_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using E2N_RANfunctionIDcause_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P0 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P0_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_ToBeSetup_ItemIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P1 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P1_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_Admitted_ItemIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_Admitted_ItemIEs_specs_5	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P2 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P2_tags_3[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_NotAdmitted_ItemIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RICaction_NotAdmitted_ItemIEs_specs_9	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P3 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P3_tags_4[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunction_ItemIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunction_ItemIEs_specs_13	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P4 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P4_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionID_ItemIEs_17,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P5 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6,
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6[0]), /* 1 */
+	asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6,	/* Same as above */
+	sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6)
+		/sizeof(asn_DEF_E2N_ProtocolIE_Single_Container_432P5_tags_6[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionIDcause_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_ProtocolIE-Single-Container.h b/asn1c_defs/E2N_ProtocolIE-Single-Container.h
new file mode 100644
index 0000000..9b2aff2
--- /dev/null
+++ b/asn1c_defs/E2N_ProtocolIE-Single-Container.h
@@ -0,0 +1,108 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_ProtocolIE_Single_Container_H_
+#define	_E2N_ProtocolIE_Single_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Field.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_ProtocolIE-Single-Container */
+typedef E2N_RICaction_ToBeSetup_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P0_t;
+typedef E2N_RICaction_Admitted_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P1_t;
+typedef E2N_RICaction_NotAdmitted_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P2_t;
+typedef E2N_RANfunction_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P3_t;
+typedef E2N_RANfunctionID_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P4_t;
+typedef E2N_RANfunctionIDcause_ItemIEs_t	 E2N_ProtocolIE_Single_Container_432P5_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P0;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P0_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P0_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P0_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P0_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P0_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P0_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P0_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P0_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P0_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P0_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P0_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P1;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P1_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P1_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P1_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P1_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P1_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P1_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P1_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P1_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P1_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P1_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P1_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P2;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P2_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P2_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P2_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P2_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P2_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P2_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P2_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P2_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P2_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P2_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P2_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P3;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P3_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P3_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P3_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P3_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P3_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P3_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P3_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P3_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P3_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P3_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P3_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P4;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P4_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P4_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P4_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P4_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P4_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P4_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P4_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P4_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P4_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P4_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P4_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_ProtocolIE_Single_Container_432P5;
+asn_struct_free_f E2N_ProtocolIE_Single_Container_432P5_free;
+asn_struct_print_f E2N_ProtocolIE_Single_Container_432P5_print;
+asn_constr_check_f E2N_ProtocolIE_Single_Container_432P5_constraint;
+ber_type_decoder_f E2N_ProtocolIE_Single_Container_432P5_decode_ber;
+der_type_encoder_f E2N_ProtocolIE_Single_Container_432P5_encode_der;
+xer_type_decoder_f E2N_ProtocolIE_Single_Container_432P5_decode_xer;
+xer_type_encoder_f E2N_ProtocolIE_Single_Container_432P5_encode_xer;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P5_decode_uper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P5_encode_uper;
+per_type_decoder_f E2N_ProtocolIE_Single_Container_432P5_decode_aper;
+per_type_encoder_f E2N_ProtocolIE_Single_Container_432P5_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_ProtocolIE_Single_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunction-Item.c b/asn1c_defs/E2N_RANfunction-Item.c
new file mode 100644
index 0000000..5e8f037
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunction-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunction-Item.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RANfunction_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_Item, ranFunctionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunction_Item, ranFunctionDefinition),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RANfunctionDefinition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionDefinition"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunction_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunction_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ranFunctionDefinition */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunction_Item_specs_1 = {
+	sizeof(struct E2N_RANfunction_Item),
+	offsetof(struct E2N_RANfunction_Item, _asn_ctx),
+	asn_MAP_E2N_RANfunction_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunction_Item = {
+	"RANfunction-Item",
+	"RANfunction-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunction_Item_tags_1,
+	sizeof(asn_DEF_E2N_RANfunction_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunction_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunction_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunction_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunction_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunction_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RANfunction_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunction-Item.h b/asn1c_defs/E2N_RANfunction-Item.h
new file mode 100644
index 0000000..dd099ef
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunction-Item.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunction_Item_H_
+#define	_E2N_RANfunction_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RANfunctionID.h"
+#include "E2N_RANfunctionDefinition.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RANfunction-Item */
+typedef struct E2N_RANfunction_Item {
+	E2N_RANfunctionID_t	 ranFunctionID;
+	E2N_RANfunctionDefinition_t	 ranFunctionDefinition;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunction_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunction_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunction_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionDefinition.c b/asn1c_defs/E2N_RANfunctionDefinition.c
new file mode 100644
index 0000000..2a3446b
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionDefinition.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionDefinition.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionDefinition = {
+	"RANfunctionDefinition",
+	"RANfunctionDefinition",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RANfunctionDefinition_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionDefinition.h b/asn1c_defs/E2N_RANfunctionDefinition.h
new file mode 100644
index 0000000..2cb7d6c
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionDefinition.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionDefinition_H_
+#define	_E2N_RANfunctionDefinition_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RANfunctionDefinition */
+typedef OCTET_STRING_t	 E2N_RANfunctionDefinition_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionDefinition;
+asn_struct_free_f E2N_RANfunctionDefinition_free;
+asn_struct_print_f E2N_RANfunctionDefinition_print;
+asn_constr_check_f E2N_RANfunctionDefinition_constraint;
+ber_type_decoder_f E2N_RANfunctionDefinition_decode_ber;
+der_type_encoder_f E2N_RANfunctionDefinition_encode_der;
+xer_type_decoder_f E2N_RANfunctionDefinition_decode_xer;
+xer_type_encoder_f E2N_RANfunctionDefinition_encode_xer;
+per_type_decoder_f E2N_RANfunctionDefinition_decode_uper;
+per_type_encoder_f E2N_RANfunctionDefinition_encode_uper;
+per_type_decoder_f E2N_RANfunctionDefinition_decode_aper;
+per_type_encoder_f E2N_RANfunctionDefinition_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionDefinition_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionID-Item.c b/asn1c_defs/E2N_RANfunctionID-Item.c
new file mode 100644
index 0000000..1af375d
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionID-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionID-Item.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RANfunctionID_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionID_Item, ranFunctionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionID_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunctionID_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranFunctionID */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionID_Item_specs_1 = {
+	sizeof(struct E2N_RANfunctionID_Item),
+	offsetof(struct E2N_RANfunctionID_Item, _asn_ctx),
+	asn_MAP_E2N_RANfunctionID_Item_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID_Item = {
+	"RANfunctionID-Item",
+	"RANfunctionID-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunctionID_Item_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionID_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionID_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionID_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionID_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionID_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionID_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionID_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionID-Item.h b/asn1c_defs/E2N_RANfunctionID-Item.h
new file mode 100644
index 0000000..0886114
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionID-Item.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionID_Item_H_
+#define	_E2N_RANfunctionID_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RANfunctionID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RANfunctionID-Item */
+typedef struct E2N_RANfunctionID_Item {
+	E2N_RANfunctionID_t	 ranFunctionID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionID_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionID_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionID.c b/asn1c_defs/E2N_RANfunctionID.c
new file mode 100644
index 0000000..853fd09
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionID.h"
+
+int
+E2N_RANfunctionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_RANfunctionID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID = {
+	"RANfunctionID",
+	"RANfunctionID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_RANfunctionID_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionID_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionID_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RANfunctionID_constr_1, E2N_RANfunctionID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionID.h b/asn1c_defs/E2N_RANfunctionID.h
new file mode 100644
index 0000000..282768a
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionID_H_
+#define	_E2N_RANfunctionID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RANfunctionID */
+typedef long	 E2N_RANfunctionID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_RANfunctionID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionID;
+asn_struct_free_f E2N_RANfunctionID_free;
+asn_struct_print_f E2N_RANfunctionID_print;
+asn_constr_check_f E2N_RANfunctionID_constraint;
+ber_type_decoder_f E2N_RANfunctionID_decode_ber;
+der_type_encoder_f E2N_RANfunctionID_encode_der;
+xer_type_decoder_f E2N_RANfunctionID_decode_xer;
+xer_type_encoder_f E2N_RANfunctionID_encode_xer;
+per_type_decoder_f E2N_RANfunctionID_decode_uper;
+per_type_encoder_f E2N_RANfunctionID_encode_uper;
+per_type_decoder_f E2N_RANfunctionID_decode_aper;
+per_type_encoder_f E2N_RANfunctionID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionIDcause-Item.c b/asn1c_defs/E2N_RANfunctionIDcause-Item.c
new file mode 100644
index 0000000..0d593fd
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionIDcause-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionIDcause-Item.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RANfunctionIDcause_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_Item, ranFunctionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RANfunctionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ranFunctionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RANfunctionIDcause_Item, ricCause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_RICcause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricCause"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionIDcause_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RANfunctionIDcause_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunctionID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricCause */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RANfunctionIDcause_Item_specs_1 = {
+	sizeof(struct E2N_RANfunctionIDcause_Item),
+	offsetof(struct E2N_RANfunctionIDcause_Item, _asn_ctx),
+	asn_MAP_E2N_RANfunctionIDcause_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionIDcause_Item = {
+	"RANfunctionIDcause-Item",
+	"RANfunctionIDcause-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RANfunctionIDcause_Item_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionIDcause_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionIDcause_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionIDcause_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionIDcause_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionIDcause_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RANfunctionIDcause_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RANfunctionIDcause_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionIDcause-Item.h b/asn1c_defs/E2N_RANfunctionIDcause-Item.h
new file mode 100644
index 0000000..d9d4c24
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionIDcause-Item.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionIDcause_Item_H_
+#define	_E2N_RANfunctionIDcause_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RANfunctionID.h"
+#include "E2N_RICcause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RANfunctionIDcause-Item */
+typedef struct E2N_RANfunctionIDcause_Item {
+	E2N_RANfunctionID_t	 ranFunctionID;
+	E2N_RICcause_t	 ricCause;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionIDcause_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionIDcause_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionIDcause_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctions-List.c b/asn1c_defs/E2N_RANfunctions-List.c
new file mode 100644
index 0000000..768cc55
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctions-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctions-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_E2N_RANfunctions_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RANfunctions_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctions_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_RANfunctions_List_specs_1 = {
+	sizeof(struct E2N_RANfunctions_List),
+	offsetof(struct E2N_RANfunctions_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctions_List = {
+	"RANfunctions-List",
+	"RANfunctions-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RANfunctions_List_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctions_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctions_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctions_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctions_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctions_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RANfunctions_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RANfunctions_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RANfunctions_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctions-List.h b/asn1c_defs/E2N_RANfunctions-List.h
new file mode 100644
index 0000000..cd8c069
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctions-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctions_List_H_
+#define	_E2N_RANfunctions_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RANfunctions-List */
+typedef struct E2N_RANfunctions_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctions_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctions_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctions_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionsID-List.c b/asn1c_defs/E2N_RANfunctionsID-List.c
new file mode 100644
index 0000000..653c3a2
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionsID-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionsID-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_E2N_RANfunctionsID_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RANfunctionsID_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionsID_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_RANfunctionsID_List_specs_1 = {
+	sizeof(struct E2N_RANfunctionsID_List),
+	offsetof(struct E2N_RANfunctionsID_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionsID_List = {
+	"RANfunctionsID-List",
+	"RANfunctionsID-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RANfunctionsID_List_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionsID_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionsID_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionsID_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionsID_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionsID_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RANfunctionsID_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RANfunctionsID_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RANfunctionsID_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionsID-List.h b/asn1c_defs/E2N_RANfunctionsID-List.h
new file mode 100644
index 0000000..cfbd17b
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionsID-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionsID_List_H_
+#define	_E2N_RANfunctionsID_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RANfunctionsID-List */
+typedef struct E2N_RANfunctionsID_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionsID_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionsID_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionsID_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RANfunctionsIDcause-List.c b/asn1c_defs/E2N_RANfunctionsIDcause-List.c
new file mode 100644
index 0000000..bd2af73
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionsIDcause-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RANfunctionsIDcause-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_E2N_RANfunctionsIDcause_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RANfunctionsIDcause_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RANfunctionsIDcause_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_RANfunctionsIDcause_List_specs_1 = {
+	sizeof(struct E2N_RANfunctionsIDcause_List),
+	offsetof(struct E2N_RANfunctionsIDcause_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionsIDcause_List = {
+	"RANfunctionsIDcause-List",
+	"RANfunctionsIDcause-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RANfunctionsIDcause_List_tags_1,
+	sizeof(asn_DEF_E2N_RANfunctionsIDcause_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionsIDcause_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RANfunctionsIDcause_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RANfunctionsIDcause_List_tags_1)
+		/sizeof(asn_DEF_E2N_RANfunctionsIDcause_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RANfunctionsIDcause_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RANfunctionsIDcause_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RANfunctionsIDcause_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RANfunctionsIDcause-List.h b/asn1c_defs/E2N_RANfunctionsIDcause-List.h
new file mode 100644
index 0000000..25c439e
--- /dev/null
+++ b/asn1c_defs/E2N_RANfunctionsIDcause-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RANfunctionsIDcause_List_H_
+#define	_E2N_RANfunctionsIDcause_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RANfunctionsIDcause-List */
+typedef struct E2N_RANfunctionsIDcause_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RANfunctionsIDcause_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RANfunctionsIDcause_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RANfunctionsIDcause_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICaction-Admitted-Item.c b/asn1c_defs/E2N_RICaction-Admitted-Item.c
new file mode 100644
index 0000000..7cb139e
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-Admitted-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICaction-Admitted-Item.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RICaction_Admitted_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_Admitted_Item, ricActionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricActionID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_Admitted_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_Admitted_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ricActionID */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_Admitted_Item_specs_1 = {
+	sizeof(struct E2N_RICaction_Admitted_Item),
+	offsetof(struct E2N_RICaction_Admitted_Item, _asn_ctx),
+	asn_MAP_E2N_RICaction_Admitted_Item_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_Item = {
+	"RICaction-Admitted-Item",
+	"RICaction-Admitted-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_Admitted_Item_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_Admitted_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_Admitted_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_Admitted_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_Admitted_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICaction_Admitted_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICaction-Admitted-Item.h b/asn1c_defs/E2N_RICaction-Admitted-Item.h
new file mode 100644
index 0000000..6e7b313
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-Admitted-Item.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICaction_Admitted_Item_H_
+#define	_E2N_RICaction_Admitted_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RICactionID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICaction-Admitted-Item */
+typedef struct E2N_RICaction_Admitted_Item {
+	E2N_RICactionID_t	 ricActionID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_Admitted_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICaction_Admitted_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICaction-Admitted-List.c b/asn1c_defs/E2N_RICaction-Admitted-List.c
new file mode 100644
index 0000000..31a4c1d
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-Admitted-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICaction-Admitted-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_E2N_RICaction_Admitted_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RICaction_Admitted_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_Admitted_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_RICaction_Admitted_List_specs_1 = {
+	sizeof(struct E2N_RICaction_Admitted_List),
+	offsetof(struct E2N_RICaction_Admitted_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_List = {
+	"RICaction-Admitted-List",
+	"RICaction-Admitted-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RICaction_Admitted_List_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_Admitted_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_Admitted_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_Admitted_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_Admitted_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICaction_Admitted_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RICaction_Admitted_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RICaction_Admitted_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICaction-Admitted-List.h b/asn1c_defs/E2N_RICaction-Admitted-List.h
new file mode 100644
index 0000000..97206e0
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-Admitted-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICaction_Admitted_List_H_
+#define	_E2N_RICaction_Admitted_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RICaction-Admitted-List */
+typedef struct E2N_RICaction_Admitted_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_Admitted_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_Admitted_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICaction_Admitted_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICaction-NotAdmitted-Item.c b/asn1c_defs/E2N_RICaction-NotAdmitted-Item.c
new file mode 100644
index 0000000..a63c98d
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-NotAdmitted-Item.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICaction-NotAdmitted-Item.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RICaction_NotAdmitted_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_Item, ricActionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricActionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_NotAdmitted_Item, ricCause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_RICcause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricCause"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_NotAdmitted_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricCause */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_NotAdmitted_Item_specs_1 = {
+	sizeof(struct E2N_RICaction_NotAdmitted_Item),
+	offsetof(struct E2N_RICaction_NotAdmitted_Item, _asn_ctx),
+	asn_MAP_E2N_RICaction_NotAdmitted_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_Item = {
+	"RICaction-NotAdmitted-Item",
+	"RICaction-NotAdmitted-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_NotAdmitted_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RICaction_NotAdmitted_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICaction-NotAdmitted-Item.h b/asn1c_defs/E2N_RICaction-NotAdmitted-Item.h
new file mode 100644
index 0000000..937b87d
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-NotAdmitted-Item.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICaction_NotAdmitted_Item_H_
+#define	_E2N_RICaction_NotAdmitted_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RICactionID.h"
+#include "E2N_RICcause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICaction-NotAdmitted-Item */
+typedef struct E2N_RICaction_NotAdmitted_Item {
+	E2N_RICactionID_t	 ricActionID;
+	E2N_RICcause_t	 ricCause;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_NotAdmitted_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICaction_NotAdmitted_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICaction-NotAdmitted-List.c b/asn1c_defs/E2N_RICaction-NotAdmitted-List.c
new file mode 100644
index 0000000..0676f4d
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-NotAdmitted-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICaction-NotAdmitted-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_E2N_RICaction_NotAdmitted_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  0,  16 }	/* (SIZE(0..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RICaction_NotAdmitted_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_E2N_RICaction_NotAdmitted_List_specs_1 = {
+	sizeof(struct E2N_RICaction_NotAdmitted_List),
+	offsetof(struct E2N_RICaction_NotAdmitted_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_List = {
+	"RICaction-NotAdmitted-List",
+	"RICaction-NotAdmitted-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_NotAdmitted_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICaction_NotAdmitted_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RICaction_NotAdmitted_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RICaction_NotAdmitted_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICaction-NotAdmitted-List.h b/asn1c_defs/E2N_RICaction-NotAdmitted-List.h
new file mode 100644
index 0000000..dafc947
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-NotAdmitted-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICaction_NotAdmitted_List_H_
+#define	_E2N_RICaction_NotAdmitted_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RICaction-NotAdmitted-List */
+typedef struct E2N_RICaction_NotAdmitted_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_NotAdmitted_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_NotAdmitted_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICaction_NotAdmitted_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICaction-ToBeSetup-Item.c b/asn1c_defs/E2N_RICaction-ToBeSetup-Item.c
new file mode 100644
index 0000000..c1652ff
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-ToBeSetup-Item.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICaction-ToBeSetup-Item.h"
+
+#include "E2N_RICsubsequentAction.h"
+static asn_TYPE_member_t asn_MBR_E2N_RICaction_ToBeSetup_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_Item, ricActionID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactionID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricActionID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICaction_ToBeSetup_Item, ricActionType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactionType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricActionType"
+		},
+	{ ATF_POINTER, 2, offsetof(struct E2N_RICaction_ToBeSetup_Item, ricActionDefinition),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactionDefinition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricActionDefinition"
+		},
+	{ ATF_POINTER, 1, offsetof(struct E2N_RICaction_ToBeSetup_Item, ricSubsequentAction),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICsubsequentAction,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricSubsequentAction"
+		},
+};
+static const int asn_MAP_E2N_RICaction_ToBeSetup_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICaction_ToBeSetup_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricActionID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ricActionType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ricActionDefinition */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ricSubsequentAction */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RICaction_ToBeSetup_Item_specs_1 = {
+	sizeof(struct E2N_RICaction_ToBeSetup_Item),
+	offsetof(struct E2N_RICaction_ToBeSetup_Item, _asn_ctx),
+	asn_MAP_E2N_RICaction_ToBeSetup_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_E2N_RICaction_ToBeSetup_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_ToBeSetup_Item = {
+	"RICaction-ToBeSetup-Item",
+	"RICaction-ToBeSetup-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1,
+	sizeof(asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1)
+		/sizeof(asn_DEF_E2N_RICaction_ToBeSetup_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICaction_ToBeSetup_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_E2N_RICaction_ToBeSetup_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICaction-ToBeSetup-Item.h b/asn1c_defs/E2N_RICaction-ToBeSetup-Item.h
new file mode 100644
index 0000000..a03d98e
--- /dev/null
+++ b/asn1c_defs/E2N_RICaction-ToBeSetup-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICaction_ToBeSetup_Item_H_
+#define	_E2N_RICaction_ToBeSetup_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RICactionID.h"
+#include "E2N_RICactionType.h"
+#include "E2N_RICactionDefinition.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_RICsubsequentAction;
+
+/* E2N_RICaction-ToBeSetup-Item */
+typedef struct E2N_RICaction_ToBeSetup_Item {
+	E2N_RICactionID_t	 ricActionID;
+	E2N_RICactionType_t	 ricActionType;
+	E2N_RICactionDefinition_t	*ricActionDefinition;	/* OPTIONAL */
+	struct E2N_RICsubsequentAction	*ricSubsequentAction;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICaction_ToBeSetup_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICaction_ToBeSetup_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICaction_ToBeSetup_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICactionDefinition.c b/asn1c_defs/E2N_RICactionDefinition.c
new file mode 100644
index 0000000..ecafb26
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionDefinition.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICactionDefinition.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICactionDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICactionDefinition = {
+	"RICactionDefinition",
+	"RICactionDefinition",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICactionDefinition_tags_1,
+	sizeof(asn_DEF_E2N_RICactionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICactionDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICactionDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICactionDefinition.h b/asn1c_defs/E2N_RICactionDefinition.h
new file mode 100644
index 0000000..f9190c0
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionDefinition.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICactionDefinition_H_
+#define	_E2N_RICactionDefinition_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICactionDefinition */
+typedef OCTET_STRING_t	 E2N_RICactionDefinition_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICactionDefinition;
+asn_struct_free_f E2N_RICactionDefinition_free;
+asn_struct_print_f E2N_RICactionDefinition_print;
+asn_constr_check_f E2N_RICactionDefinition_constraint;
+ber_type_decoder_f E2N_RICactionDefinition_decode_ber;
+der_type_encoder_f E2N_RICactionDefinition_encode_der;
+xer_type_decoder_f E2N_RICactionDefinition_decode_xer;
+xer_type_encoder_f E2N_RICactionDefinition_encode_xer;
+per_type_decoder_f E2N_RICactionDefinition_decode_uper;
+per_type_encoder_f E2N_RICactionDefinition_encode_uper;
+per_type_decoder_f E2N_RICactionDefinition_decode_aper;
+per_type_encoder_f E2N_RICactionDefinition_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICactionDefinition_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICactionID.c b/asn1c_defs/E2N_RICactionID.c
new file mode 100644
index 0000000..077d70b
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICactionID.h"
+
+int
+E2N_RICactionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_RICactionID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICactionID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICactionID = {
+	"RICactionID",
+	"RICactionID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_RICactionID_tags_1,
+	sizeof(asn_DEF_E2N_RICactionID_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICactionID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICactionID_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICactionID_constr_1, E2N_RICactionID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_RICactionID.h b/asn1c_defs/E2N_RICactionID.h
new file mode 100644
index 0000000..5801b7b
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICactionID_H_
+#define	_E2N_RICactionID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICactionID */
+typedef long	 E2N_RICactionID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_RICactionID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICactionID;
+asn_struct_free_f E2N_RICactionID_free;
+asn_struct_print_f E2N_RICactionID_print;
+asn_constr_check_f E2N_RICactionID_constraint;
+ber_type_decoder_f E2N_RICactionID_decode_ber;
+der_type_encoder_f E2N_RICactionID_encode_der;
+xer_type_decoder_f E2N_RICactionID_decode_xer;
+xer_type_encoder_f E2N_RICactionID_encode_xer;
+per_type_decoder_f E2N_RICactionID_decode_uper;
+per_type_encoder_f E2N_RICactionID_encode_uper;
+per_type_decoder_f E2N_RICactionID_decode_aper;
+per_type_encoder_f E2N_RICactionID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICactionID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICactionType.c b/asn1c_defs/E2N_RICactionType.c
new file mode 100644
index 0000000..8eba692
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionType.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICactionType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_RICactionType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICactionType_value2enum_1[] = {
+	{ 0,	6,	"report" },
+	{ 1,	6,	"insert" },
+	{ 2,	6,	"policy" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICactionType_enum2value_1[] = {
+	1,	/* insert(1) */
+	2,	/* policy(2) */
+	0	/* report(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_RICactionType_specs_1 = {
+	asn_MAP_E2N_RICactionType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICactionType_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICactionType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICactionType = {
+	"RICactionType",
+	"RICactionType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICactionType_tags_1,
+	sizeof(asn_DEF_E2N_RICactionType_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionType_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICactionType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICactionType_tags_1)
+		/sizeof(asn_DEF_E2N_RICactionType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICactionType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICactionType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICactionType.h b/asn1c_defs/E2N_RICactionType.h
new file mode 100644
index 0000000..6e869e4
--- /dev/null
+++ b/asn1c_defs/E2N_RICactionType.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICactionType_H_
+#define	_E2N_RICactionType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICactionType {
+	E2N_RICactionType_report	= 0,
+	E2N_RICactionType_insert	= 1,
+	E2N_RICactionType_policy	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICactionType;
+
+/* E2N_RICactionType */
+typedef long	 E2N_RICactionType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_RICactionType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICactionType;
+extern const asn_INTEGER_specifics_t asn_SPC_RICactionType_specs_1;
+asn_struct_free_f RICactionType_free;
+asn_struct_print_f RICactionType_print;
+asn_constr_check_f RICactionType_constraint;
+ber_type_decoder_f RICactionType_decode_ber;
+der_type_encoder_f RICactionType_encode_der;
+xer_type_decoder_f RICactionType_decode_xer;
+xer_type_encoder_f RICactionType_encode_xer;
+per_type_decoder_f RICactionType_decode_uper;
+per_type_encoder_f RICactionType_encode_uper;
+per_type_decoder_f RICactionType_decode_aper;
+per_type_encoder_f RICactionType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICactionType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICactions-ToBeSetup-List.c b/asn1c_defs/E2N_RICactions-ToBeSetup-List.c
new file mode 100644
index 0000000..e2a4f52
--- /dev/null
+++ b/asn1c_defs/E2N_RICactions-ToBeSetup-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICactions-ToBeSetup-List.h"
+
+#include "E2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_E2N_RICactions_ToBeSetup_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_RICactions_ToBeSetup_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_ProtocolIE_Single_Container_432P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_E2N_RICactions_ToBeSetup_List_specs_1 = {
+	sizeof(struct E2N_RICactions_ToBeSetup_List),
+	offsetof(struct E2N_RICactions_ToBeSetup_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICactions_ToBeSetup_List = {
+	"RICactions-ToBeSetup-List",
+	"RICactions-ToBeSetup-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1,
+	sizeof(asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1)
+		/sizeof(asn_DEF_E2N_RICactions_ToBeSetup_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICactions_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_E2N_RICactions_ToBeSetup_List_1,
+	1,	/* Single element */
+	&asn_SPC_E2N_RICactions_ToBeSetup_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICactions-ToBeSetup-List.h b/asn1c_defs/E2N_RICactions-ToBeSetup-List.h
new file mode 100644
index 0000000..e534c9e
--- /dev/null
+++ b/asn1c_defs/E2N_RICactions-ToBeSetup-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICactions_ToBeSetup_List_H_
+#define	_E2N_RICactions_ToBeSetup_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct E2N_ProtocolIE_Single_Container;
+
+/* E2N_RICactions-ToBeSetup-List */
+typedef struct E2N_RICactions_ToBeSetup_List {
+	A_SEQUENCE_OF(struct E2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICactions_ToBeSetup_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICactions_ToBeSetup_List;
+extern asn_SET_OF_specifics_t asn_SPC_E2N_RICactions_ToBeSetup_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICactions_ToBeSetup_List_1[1];
+extern asn_per_constraints_t asn_PER_type_E2N_RICactions_ToBeSetup_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICactions_ToBeSetup_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcallProcessID.c b/asn1c_defs/E2N_RICcallProcessID.c
new file mode 100644
index 0000000..f3a9658
--- /dev/null
+++ b/asn1c_defs/E2N_RICcallProcessID.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcallProcessID.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICcallProcessID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcallProcessID = {
+	"RICcallProcessID",
+	"RICcallProcessID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICcallProcessID_tags_1,
+	sizeof(asn_DEF_E2N_RICcallProcessID_tags_1)
+		/sizeof(asn_DEF_E2N_RICcallProcessID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcallProcessID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcallProcessID_tags_1)
+		/sizeof(asn_DEF_E2N_RICcallProcessID_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcallProcessID.h b/asn1c_defs/E2N_RICcallProcessID.h
new file mode 100644
index 0000000..0c5e562
--- /dev/null
+++ b/asn1c_defs/E2N_RICcallProcessID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcallProcessID_H_
+#define	_E2N_RICcallProcessID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcallProcessID */
+typedef OCTET_STRING_t	 E2N_RICcallProcessID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcallProcessID;
+asn_struct_free_f E2N_RICcallProcessID_free;
+asn_struct_print_f E2N_RICcallProcessID_print;
+asn_constr_check_f E2N_RICcallProcessID_constraint;
+ber_type_decoder_f E2N_RICcallProcessID_decode_ber;
+der_type_encoder_f E2N_RICcallProcessID_encode_der;
+xer_type_decoder_f E2N_RICcallProcessID_decode_xer;
+xer_type_encoder_f E2N_RICcallProcessID_encode_xer;
+per_type_decoder_f E2N_RICcallProcessID_decode_uper;
+per_type_encoder_f E2N_RICcallProcessID_encode_uper;
+per_type_decoder_f E2N_RICcallProcessID_decode_aper;
+per_type_encoder_f E2N_RICcallProcessID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcallProcessID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcause.c b/asn1c_defs/E2N_RICcause.c
new file mode 100644
index 0000000..35fb4bc
--- /dev/null
+++ b/asn1c_defs/E2N_RICcause.c
@@ -0,0 +1,92 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcause.h"
+
+asn_per_constraints_t asn_PER_type_E2N_RICcause_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_E2N_RICcause_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcause, choice.radioNetwork),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseRadioNetwork,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioNetwork"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcause, choice.transport),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseTransport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcause, choice.protocol),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseProtocol,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocol"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcause, choice.misc),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseMisc,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"misc"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcause, choice.ric),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_CauseRIC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ric"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcause_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* misc */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ric */
+};
+asn_CHOICE_specifics_t asn_SPC_E2N_RICcause_specs_1 = {
+	sizeof(struct E2N_RICcause),
+	offsetof(struct E2N_RICcause, _asn_ctx),
+	offsetof(struct E2N_RICcause, present),
+	sizeof(((struct E2N_RICcause *)0)->present),
+	asn_MAP_E2N_RICcause_tag2el_1,
+	5,	/* Count of tags in the map */
+	0, 0,
+	5	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcause = {
+	"RICcause",
+	"RICcause",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_E2N_RICcause_constr_1, CHOICE_constraint },
+	asn_MBR_E2N_RICcause_1,
+	5,	/* Elements count */
+	&asn_SPC_E2N_RICcause_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcause.h b/asn1c_defs/E2N_RICcause.h
new file mode 100644
index 0000000..41ba050
--- /dev/null
+++ b/asn1c_defs/E2N_RICcause.h
@@ -0,0 +1,68 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcause_H_
+#define	_E2N_RICcause_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_CauseRadioNetwork.h"
+#include "E2N_CauseTransport.h"
+#include "E2N_CauseProtocol.h"
+#include "E2N_CauseMisc.h"
+#include "E2N_CauseRIC.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICcause_PR {
+	E2N_RICcause_PR_NOTHING,	/* No components present */
+	E2N_RICcause_PR_radioNetwork,
+	E2N_RICcause_PR_transport,
+	E2N_RICcause_PR_protocol,
+	E2N_RICcause_PR_misc,
+	E2N_RICcause_PR_ric
+	/* Extensions may appear below */
+	
+} E2N_RICcause_PR;
+
+/* E2N_RICcause */
+typedef struct E2N_RICcause {
+	E2N_RICcause_PR present;
+	union E2N_RICcause_u {
+		E2N_CauseRadioNetwork_t	 radioNetwork;
+		E2N_CauseTransport_t	 transport;
+		E2N_CauseProtocol_t	 protocol;
+		E2N_CauseMisc_t	 misc;
+		E2N_CauseRIC_t	 ric;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcause_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcause;
+extern asn_CHOICE_specifics_t asn_SPC_E2N_RICcause_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcause_1[5];
+extern asn_per_constraints_t asn_PER_type_E2N_RICcause_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcause_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolAckRequest.c b/asn1c_defs/E2N_RICcontrolAckRequest.c
new file mode 100644
index 0000000..07eb686
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolAckRequest.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolAckRequest.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_E2N_RICcontrolAckRequest_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICcontrolAckRequest_value2enum_1[] = {
+	{ 0,	5,	"noAck" },
+	{ 1,	3,	"ack" },
+	{ 2,	4,	"nAck" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICcontrolAckRequest_enum2value_1[] = {
+	1,	/* ack(1) */
+	2,	/* nAck(2) */
+	0	/* noAck(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_E2N_RICcontrolAckRequest_specs_1 = {
+	asn_MAP_E2N_RICcontrolAckRequest_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICcontrolAckRequest_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolAckRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAckRequest = {
+	"RICcontrolAckRequest",
+	"RICcontrolAckRequest",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICcontrolAckRequest_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolAckRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolAckRequest_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolAckRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolAckRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolAckRequest_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICcontrolAckRequest_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICcontrolAckRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolAckRequest.h b/asn1c_defs/E2N_RICcontrolAckRequest.h
new file mode 100644
index 0000000..6ae628d
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolAckRequest.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolAckRequest_H_
+#define	_E2N_RICcontrolAckRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICcontrolAckRequest {
+	E2N_RICcontrolAckRequest_noAck	= 0,
+	E2N_RICcontrolAckRequest_ack	= 1,
+	E2N_RICcontrolAckRequest_nAck	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICcontrolAckRequest;
+
+/* E2N_RICcontrolAckRequest */
+typedef long	 E2N_RICcontrolAckRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAckRequest;
+asn_struct_free_f E2N_RICcontrolAckRequest_free;
+asn_struct_print_f E2N_RICcontrolAckRequest_print;
+asn_constr_check_f E2N_RICcontrolAckRequest_constraint;
+ber_type_decoder_f E2N_RICcontrolAckRequest_decode_ber;
+der_type_encoder_f E2N_RICcontrolAckRequest_encode_der;
+xer_type_decoder_f E2N_RICcontrolAckRequest_decode_xer;
+xer_type_encoder_f E2N_RICcontrolAckRequest_encode_xer;
+per_type_decoder_f E2N_RICcontrolAckRequest_decode_uper;
+per_type_encoder_f E2N_RICcontrolAckRequest_encode_uper;
+per_type_decoder_f E2N_RICcontrolAckRequest_decode_aper;
+per_type_encoder_f E2N_RICcontrolAckRequest_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolAckRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolAcknowledge.c b/asn1c_defs/E2N_RICcontrolAcknowledge.c
new file mode 100644
index 0000000..7ee0ab0
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolAcknowledge_specs_1 = {
+	sizeof(struct E2N_RICcontrolAcknowledge),
+	offsetof(struct E2N_RICcontrolAcknowledge, _asn_ctx),
+	asn_MAP_E2N_RICcontrolAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAcknowledge = {
+	"RICcontrolAcknowledge",
+	"RICcontrolAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolAcknowledge_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolAcknowledge.h b/asn1c_defs/E2N_RICcontrolAcknowledge.h
new file mode 100644
index 0000000..d8e717a
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolAcknowledge_H_
+#define	_E2N_RICcontrolAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcontrolAcknowledge */
+typedef struct E2N_RICcontrolAcknowledge {
+	E2N_ProtocolIE_Container_429P8_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolFailure.c b/asn1c_defs/E2N_RICcontrolFailure.c
new file mode 100644
index 0000000..4a2bb51
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolFailure.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P9,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolFailure_specs_1 = {
+	sizeof(struct E2N_RICcontrolFailure),
+	offsetof(struct E2N_RICcontrolFailure, _asn_ctx),
+	asn_MAP_E2N_RICcontrolFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolFailure = {
+	"RICcontrolFailure",
+	"RICcontrolFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolFailure_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolFailure.h b/asn1c_defs/E2N_RICcontrolFailure.h
new file mode 100644
index 0000000..7f43f24
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolFailure_H_
+#define	_E2N_RICcontrolFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcontrolFailure */
+typedef struct E2N_RICcontrolFailure {
+	E2N_ProtocolIE_Container_429P9_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolHeader.c b/asn1c_defs/E2N_RICcontrolHeader.c
new file mode 100644
index 0000000..85d49e9
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolHeader.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolHeader.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolHeader = {
+	"RICcontrolHeader",
+	"RICcontrolHeader",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICcontrolHeader_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolHeader_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolHeader_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolHeader_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolHeader.h b/asn1c_defs/E2N_RICcontrolHeader.h
new file mode 100644
index 0000000..9c82831
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolHeader.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolHeader_H_
+#define	_E2N_RICcontrolHeader_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcontrolHeader */
+typedef OCTET_STRING_t	 E2N_RICcontrolHeader_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolHeader;
+asn_struct_free_f E2N_RICcontrolHeader_free;
+asn_struct_print_f E2N_RICcontrolHeader_print;
+asn_constr_check_f E2N_RICcontrolHeader_constraint;
+ber_type_decoder_f E2N_RICcontrolHeader_decode_ber;
+der_type_encoder_f E2N_RICcontrolHeader_encode_der;
+xer_type_decoder_f E2N_RICcontrolHeader_decode_xer;
+xer_type_encoder_f E2N_RICcontrolHeader_encode_xer;
+per_type_decoder_f E2N_RICcontrolHeader_decode_uper;
+per_type_encoder_f E2N_RICcontrolHeader_encode_uper;
+per_type_decoder_f E2N_RICcontrolHeader_decode_aper;
+per_type_encoder_f E2N_RICcontrolHeader_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolHeader_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolMessage.c b/asn1c_defs/E2N_RICcontrolMessage.c
new file mode 100644
index 0000000..dc296e6
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolMessage.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolMessage.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolMessage = {
+	"RICcontrolMessage",
+	"RICcontrolMessage",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICcontrolMessage_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolMessage_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolMessage_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolMessage_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolMessage.h b/asn1c_defs/E2N_RICcontrolMessage.h
new file mode 100644
index 0000000..bef2a0c
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolMessage.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolMessage_H_
+#define	_E2N_RICcontrolMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcontrolMessage */
+typedef OCTET_STRING_t	 E2N_RICcontrolMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolMessage;
+asn_struct_free_f E2N_RICcontrolMessage_free;
+asn_struct_print_f E2N_RICcontrolMessage_print;
+asn_constr_check_f E2N_RICcontrolMessage_constraint;
+ber_type_decoder_f E2N_RICcontrolMessage_decode_ber;
+der_type_encoder_f E2N_RICcontrolMessage_encode_der;
+xer_type_decoder_f E2N_RICcontrolMessage_decode_xer;
+xer_type_encoder_f E2N_RICcontrolMessage_encode_xer;
+per_type_decoder_f E2N_RICcontrolMessage_decode_uper;
+per_type_encoder_f E2N_RICcontrolMessage_encode_uper;
+per_type_decoder_f E2N_RICcontrolMessage_decode_aper;
+per_type_encoder_f E2N_RICcontrolMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolRequest.c b/asn1c_defs/E2N_RICcontrolRequest.c
new file mode 100644
index 0000000..688b7ec
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolRequest.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICcontrolRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICcontrolRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICcontrolRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolRequest_specs_1 = {
+	sizeof(struct E2N_RICcontrolRequest),
+	offsetof(struct E2N_RICcontrolRequest, _asn_ctx),
+	asn_MAP_E2N_RICcontrolRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolRequest = {
+	"RICcontrolRequest",
+	"RICcontrolRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICcontrolRequest_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolRequest_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICcontrolRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICcontrolRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolRequest.h b/asn1c_defs/E2N_RICcontrolRequest.h
new file mode 100644
index 0000000..055bb42
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolRequest_H_
+#define	_E2N_RICcontrolRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICcontrolRequest */
+typedef struct E2N_RICcontrolRequest {
+	E2N_ProtocolIE_Container_429P7_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICcontrolRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICcontrolRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICcontrolRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICcontrolStatus.c b/asn1c_defs/E2N_RICcontrolStatus.c
new file mode 100644
index 0000000..c7f4273
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolStatus.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICcontrolStatus.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_E2N_RICcontrolStatus_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICcontrolStatus_value2enum_1[] = {
+	{ 0,	7,	"success" },
+	{ 1,	8,	"rejected" },
+	{ 2,	6,	"failed" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICcontrolStatus_enum2value_1[] = {
+	2,	/* failed(2) */
+	1,	/* rejected(1) */
+	0	/* success(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_E2N_RICcontrolStatus_specs_1 = {
+	asn_MAP_E2N_RICcontrolStatus_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICcontrolStatus_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICcontrolStatus_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolStatus = {
+	"RICcontrolStatus",
+	"RICcontrolStatus",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICcontrolStatus_tags_1,
+	sizeof(asn_DEF_E2N_RICcontrolStatus_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolStatus_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICcontrolStatus_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICcontrolStatus_tags_1)
+		/sizeof(asn_DEF_E2N_RICcontrolStatus_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICcontrolStatus_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICcontrolStatus_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICcontrolStatus.h b/asn1c_defs/E2N_RICcontrolStatus.h
new file mode 100644
index 0000000..735d806
--- /dev/null
+++ b/asn1c_defs/E2N_RICcontrolStatus.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICcontrolStatus_H_
+#define	_E2N_RICcontrolStatus_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICcontrolStatus {
+	E2N_RICcontrolStatus_success	= 0,
+	E2N_RICcontrolStatus_rejected	= 1,
+	E2N_RICcontrolStatus_failed	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICcontrolStatus;
+
+/* E2N_RICcontrolStatus */
+typedef long	 E2N_RICcontrolStatus_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICcontrolStatus;
+asn_struct_free_f E2N_RICcontrolStatus_free;
+asn_struct_print_f E2N_RICcontrolStatus_print;
+asn_constr_check_f E2N_RICcontrolStatus_constraint;
+ber_type_decoder_f E2N_RICcontrolStatus_decode_ber;
+der_type_encoder_f E2N_RICcontrolStatus_encode_der;
+xer_type_decoder_f E2N_RICcontrolStatus_decode_xer;
+xer_type_encoder_f E2N_RICcontrolStatus_encode_xer;
+per_type_decoder_f E2N_RICcontrolStatus_decode_uper;
+per_type_encoder_f E2N_RICcontrolStatus_encode_uper;
+per_type_decoder_f E2N_RICcontrolStatus_decode_aper;
+per_type_encoder_f E2N_RICcontrolStatus_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICcontrolStatus_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICeventTriggerDefinition.c b/asn1c_defs/E2N_RICeventTriggerDefinition.c
new file mode 100644
index 0000000..d4ca9f9
--- /dev/null
+++ b/asn1c_defs/E2N_RICeventTriggerDefinition.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICeventTriggerDefinition.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICeventTriggerDefinition_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICeventTriggerDefinition = {
+	"RICeventTriggerDefinition",
+	"RICeventTriggerDefinition",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICeventTriggerDefinition_tags_1,
+	sizeof(asn_DEF_E2N_RICeventTriggerDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RICeventTriggerDefinition_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICeventTriggerDefinition_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICeventTriggerDefinition_tags_1)
+		/sizeof(asn_DEF_E2N_RICeventTriggerDefinition_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICeventTriggerDefinition.h b/asn1c_defs/E2N_RICeventTriggerDefinition.h
new file mode 100644
index 0000000..77df5ac
--- /dev/null
+++ b/asn1c_defs/E2N_RICeventTriggerDefinition.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICeventTriggerDefinition_H_
+#define	_E2N_RICeventTriggerDefinition_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICeventTriggerDefinition */
+typedef OCTET_STRING_t	 E2N_RICeventTriggerDefinition_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICeventTriggerDefinition;
+asn_struct_free_f E2N_RICeventTriggerDefinition_free;
+asn_struct_print_f E2N_RICeventTriggerDefinition_print;
+asn_constr_check_f E2N_RICeventTriggerDefinition_constraint;
+ber_type_decoder_f E2N_RICeventTriggerDefinition_decode_ber;
+der_type_encoder_f E2N_RICeventTriggerDefinition_encode_der;
+xer_type_decoder_f E2N_RICeventTriggerDefinition_decode_xer;
+xer_type_encoder_f E2N_RICeventTriggerDefinition_encode_xer;
+per_type_decoder_f E2N_RICeventTriggerDefinition_decode_uper;
+per_type_encoder_f E2N_RICeventTriggerDefinition_encode_uper;
+per_type_decoder_f E2N_RICeventTriggerDefinition_decode_aper;
+per_type_encoder_f E2N_RICeventTriggerDefinition_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICeventTriggerDefinition_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICindication.c b/asn1c_defs/E2N_RICindication.c
new file mode 100644
index 0000000..e38866c
--- /dev/null
+++ b/asn1c_defs/E2N_RICindication.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICindication.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICindication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICindication, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICindication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICindication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICindication_specs_1 = {
+	sizeof(struct E2N_RICindication),
+	offsetof(struct E2N_RICindication, _asn_ctx),
+	asn_MAP_E2N_RICindication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindication = {
+	"RICindication",
+	"RICindication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICindication_tags_1,
+	sizeof(asn_DEF_E2N_RICindication_tags_1)
+		/sizeof(asn_DEF_E2N_RICindication_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICindication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindication_tags_1)
+		/sizeof(asn_DEF_E2N_RICindication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICindication_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICindication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICindication.h b/asn1c_defs/E2N_RICindication.h
new file mode 100644
index 0000000..53fdc0c
--- /dev/null
+++ b/asn1c_defs/E2N_RICindication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICindication_H_
+#define	_E2N_RICindication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICindication */
+typedef struct E2N_RICindication {
+	E2N_ProtocolIE_Container_429P6_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICindication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindication;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICindication_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICindication_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICindication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICindicationHeader.c b/asn1c_defs/E2N_RICindicationHeader.c
new file mode 100644
index 0000000..a8556bf
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationHeader.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICindicationHeader.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICindicationHeader_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationHeader = {
+	"RICindicationHeader",
+	"RICindicationHeader",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICindicationHeader_tags_1,
+	sizeof(asn_DEF_E2N_RICindicationHeader_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationHeader_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICindicationHeader_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindicationHeader_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationHeader_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICindicationHeader.h b/asn1c_defs/E2N_RICindicationHeader.h
new file mode 100644
index 0000000..dab7b0a
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationHeader.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICindicationHeader_H_
+#define	_E2N_RICindicationHeader_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICindicationHeader */
+typedef OCTET_STRING_t	 E2N_RICindicationHeader_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationHeader;
+asn_struct_free_f E2N_RICindicationHeader_free;
+asn_struct_print_f E2N_RICindicationHeader_print;
+asn_constr_check_f E2N_RICindicationHeader_constraint;
+ber_type_decoder_f E2N_RICindicationHeader_decode_ber;
+der_type_encoder_f E2N_RICindicationHeader_encode_der;
+xer_type_decoder_f E2N_RICindicationHeader_decode_xer;
+xer_type_encoder_f E2N_RICindicationHeader_encode_xer;
+per_type_decoder_f E2N_RICindicationHeader_decode_uper;
+per_type_encoder_f E2N_RICindicationHeader_encode_uper;
+per_type_decoder_f E2N_RICindicationHeader_decode_aper;
+per_type_encoder_f E2N_RICindicationHeader_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICindicationHeader_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICindicationMessage.c b/asn1c_defs/E2N_RICindicationMessage.c
new file mode 100644
index 0000000..90c1209
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationMessage.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICindicationMessage.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_RICindicationMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationMessage = {
+	"RICindicationMessage",
+	"RICindicationMessage",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_RICindicationMessage_tags_1,
+	sizeof(asn_DEF_E2N_RICindicationMessage_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICindicationMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindicationMessage_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationMessage_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICindicationMessage.h b/asn1c_defs/E2N_RICindicationMessage.h
new file mode 100644
index 0000000..5da90ae
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationMessage.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICindicationMessage_H_
+#define	_E2N_RICindicationMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICindicationMessage */
+typedef OCTET_STRING_t	 E2N_RICindicationMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationMessage;
+asn_struct_free_f E2N_RICindicationMessage_free;
+asn_struct_print_f E2N_RICindicationMessage_print;
+asn_constr_check_f E2N_RICindicationMessage_constraint;
+ber_type_decoder_f E2N_RICindicationMessage_decode_ber;
+der_type_encoder_f E2N_RICindicationMessage_encode_der;
+xer_type_decoder_f E2N_RICindicationMessage_decode_xer;
+xer_type_encoder_f E2N_RICindicationMessage_encode_xer;
+per_type_decoder_f E2N_RICindicationMessage_decode_uper;
+per_type_encoder_f E2N_RICindicationMessage_encode_uper;
+per_type_decoder_f E2N_RICindicationMessage_decode_aper;
+per_type_encoder_f E2N_RICindicationMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICindicationMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICindicationSN.c b/asn1c_defs/E2N_RICindicationSN.c
new file mode 100644
index 0000000..264b5c6
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationSN.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICindicationSN.h"
+
+int
+E2N_RICindicationSN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_E2N_RICindicationSN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICindicationSN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationSN = {
+	"RICindicationSN",
+	"RICindicationSN",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_RICindicationSN_tags_1,
+	sizeof(asn_DEF_E2N_RICindicationSN_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationSN_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICindicationSN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindicationSN_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationSN_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICindicationSN_constr_1, E2N_RICindicationSN_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_RICindicationSN.h b/asn1c_defs/E2N_RICindicationSN.h
new file mode 100644
index 0000000..9061d55
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationSN.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICindicationSN_H_
+#define	_E2N_RICindicationSN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICindicationSN */
+typedef long	 E2N_RICindicationSN_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationSN;
+asn_struct_free_f E2N_RICindicationSN_free;
+asn_struct_print_f E2N_RICindicationSN_print;
+asn_constr_check_f E2N_RICindicationSN_constraint;
+ber_type_decoder_f E2N_RICindicationSN_decode_ber;
+der_type_encoder_f E2N_RICindicationSN_encode_der;
+xer_type_decoder_f E2N_RICindicationSN_decode_xer;
+xer_type_encoder_f E2N_RICindicationSN_encode_xer;
+per_type_decoder_f E2N_RICindicationSN_decode_uper;
+per_type_encoder_f E2N_RICindicationSN_encode_uper;
+per_type_decoder_f E2N_RICindicationSN_decode_aper;
+per_type_encoder_f E2N_RICindicationSN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICindicationSN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICindicationType.c b/asn1c_defs/E2N_RICindicationType.c
new file mode 100644
index 0000000..c246c53
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationType.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICindicationType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_E2N_RICindicationType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICindicationType_value2enum_1[] = {
+	{ 0,	6,	"report" },
+	{ 1,	6,	"insert" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICindicationType_enum2value_1[] = {
+	1,	/* insert(1) */
+	0	/* report(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_E2N_RICindicationType_specs_1 = {
+	asn_MAP_E2N_RICindicationType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICindicationType_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICindicationType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationType = {
+	"RICindicationType",
+	"RICindicationType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICindicationType_tags_1,
+	sizeof(asn_DEF_E2N_RICindicationType_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationType_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICindicationType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICindicationType_tags_1)
+		/sizeof(asn_DEF_E2N_RICindicationType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICindicationType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICindicationType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICindicationType.h b/asn1c_defs/E2N_RICindicationType.h
new file mode 100644
index 0000000..4d6d31e
--- /dev/null
+++ b/asn1c_defs/E2N_RICindicationType.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICindicationType_H_
+#define	_E2N_RICindicationType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICindicationType {
+	E2N_RICindicationType_report	= 0,
+	E2N_RICindicationType_insert	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICindicationType;
+
+/* E2N_RICindicationType */
+typedef long	 E2N_RICindicationType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICindicationType;
+asn_struct_free_f E2N_RICindicationType_free;
+asn_struct_print_f E2N_RICindicationType_print;
+asn_constr_check_f E2N_RICindicationType_constraint;
+ber_type_decoder_f E2N_RICindicationType_decode_ber;
+der_type_encoder_f E2N_RICindicationType_encode_der;
+xer_type_decoder_f E2N_RICindicationType_decode_xer;
+xer_type_encoder_f E2N_RICindicationType_encode_xer;
+per_type_decoder_f E2N_RICindicationType_decode_uper;
+per_type_encoder_f E2N_RICindicationType_encode_uper;
+per_type_decoder_f E2N_RICindicationType_decode_aper;
+per_type_encoder_f E2N_RICindicationType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICindicationType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICrequestID.c b/asn1c_defs/E2N_RICrequestID.c
new file mode 100644
index 0000000..74f95e8
--- /dev/null
+++ b/asn1c_defs/E2N_RICrequestID.c
@@ -0,0 +1,120 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICrequestID.h"
+
+static int
+memb_E2N_ricRequestorID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_E2N_ricRequestSequenceNumber_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_ricRequestorID_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_ricRequestSequenceNumber_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_RICrequestID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICrequestID, ricRequestorID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_E2N_ricRequestorID_constr_2,  memb_E2N_ricRequestorID_constraint_1 },
+		0, 0, /* No default value */
+		"ricRequestorID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICrequestID, ricRequestSequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_E2N_ricRequestSequenceNumber_constr_3,  memb_E2N_ricRequestSequenceNumber_constraint_1 },
+		0, 0, /* No default value */
+		"ricRequestSequenceNumber"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICrequestID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICrequestID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricRequestorID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricRequestSequenceNumber */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RICrequestID_specs_1 = {
+	sizeof(struct E2N_RICrequestID),
+	offsetof(struct E2N_RICrequestID, _asn_ctx),
+	asn_MAP_E2N_RICrequestID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICrequestID = {
+	"RICrequestID",
+	"RICrequestID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICrequestID_tags_1,
+	sizeof(asn_DEF_E2N_RICrequestID_tags_1)
+		/sizeof(asn_DEF_E2N_RICrequestID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICrequestID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICrequestID_tags_1)
+		/sizeof(asn_DEF_E2N_RICrequestID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICrequestID_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RICrequestID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICrequestID.h b/asn1c_defs/E2N_RICrequestID.h
new file mode 100644
index 0000000..a72c7a9
--- /dev/null
+++ b/asn1c_defs/E2N_RICrequestID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICrequestID_H_
+#define	_E2N_RICrequestID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICrequestID */
+typedef struct E2N_RICrequestID {
+	long	 ricRequestorID;
+	long	 ricRequestSequenceNumber;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICrequestID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICrequestID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICrequestID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICserviceQuery.c b/asn1c_defs/E2N_RICserviceQuery.c
new file mode 100644
index 0000000..8e12ab1
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceQuery.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICserviceQuery.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceQuery_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceQuery, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P13,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceQuery_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceQuery_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceQuery_specs_1 = {
+	sizeof(struct E2N_RICserviceQuery),
+	offsetof(struct E2N_RICserviceQuery, _asn_ctx),
+	asn_MAP_E2N_RICserviceQuery_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceQuery = {
+	"RICserviceQuery",
+	"RICserviceQuery",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceQuery_tags_1,
+	sizeof(asn_DEF_E2N_RICserviceQuery_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceQuery_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICserviceQuery_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceQuery_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceQuery_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceQuery_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICserviceQuery_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICserviceQuery.h b/asn1c_defs/E2N_RICserviceQuery.h
new file mode 100644
index 0000000..73cefcd
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceQuery.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICserviceQuery_H_
+#define	_E2N_RICserviceQuery_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICserviceQuery */
+typedef struct E2N_RICserviceQuery {
+	E2N_ProtocolIE_Container_429P13_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceQuery_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceQuery;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceQuery_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceQuery_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICserviceQuery_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICserviceUpdate.c b/asn1c_defs/E2N_RICserviceUpdate.c
new file mode 100644
index 0000000..18ce1ef
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICserviceUpdate.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdate_specs_1 = {
+	sizeof(struct E2N_RICserviceUpdate),
+	offsetof(struct E2N_RICserviceUpdate, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdate_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdate = {
+	"RICserviceUpdate",
+	"RICserviceUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdate_tags_1,
+	sizeof(asn_DEF_E2N_RICserviceUpdate_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdate_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdate_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICserviceUpdate.h b/asn1c_defs/E2N_RICserviceUpdate.h
new file mode 100644
index 0000000..7cbfd97
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICserviceUpdate_H_
+#define	_E2N_RICserviceUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICserviceUpdate */
+typedef struct E2N_RICserviceUpdate {
+	E2N_ProtocolIE_Container_429P10_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICserviceUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICserviceUpdateAcknowledge.c b/asn1c_defs/E2N_RICserviceUpdateAcknowledge.c
new file mode 100644
index 0000000..a5c7cac
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICserviceUpdateAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P11,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdateAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateAcknowledge_specs_1 = {
+	sizeof(struct E2N_RICserviceUpdateAcknowledge),
+	offsetof(struct E2N_RICserviceUpdateAcknowledge, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdateAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateAcknowledge = {
+	"RICserviceUpdateAcknowledge",
+	"RICserviceUpdateAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1,
+	sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdateAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdateAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICserviceUpdateAcknowledge.h b/asn1c_defs/E2N_RICserviceUpdateAcknowledge.h
new file mode 100644
index 0000000..6c32327
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdateAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICserviceUpdateAcknowledge_H_
+#define	_E2N_RICserviceUpdateAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICserviceUpdateAcknowledge */
+typedef struct E2N_RICserviceUpdateAcknowledge {
+	E2N_ProtocolIE_Container_429P11_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdateAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICserviceUpdateAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICserviceUpdateFailure.c b/asn1c_defs/E2N_RICserviceUpdateFailure.c
new file mode 100644
index 0000000..879ec48
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICserviceUpdateFailure.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICserviceUpdateFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P12,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICserviceUpdateFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICserviceUpdateFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateFailure_specs_1 = {
+	sizeof(struct E2N_RICserviceUpdateFailure),
+	offsetof(struct E2N_RICserviceUpdateFailure, _asn_ctx),
+	asn_MAP_E2N_RICserviceUpdateFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateFailure = {
+	"RICserviceUpdateFailure",
+	"RICserviceUpdateFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICserviceUpdateFailure_tags_1,
+	sizeof(asn_DEF_E2N_RICserviceUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICserviceUpdateFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICserviceUpdateFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICserviceUpdateFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICserviceUpdateFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICserviceUpdateFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICserviceUpdateFailure.h b/asn1c_defs/E2N_RICserviceUpdateFailure.h
new file mode 100644
index 0000000..5f5ac6d
--- /dev/null
+++ b/asn1c_defs/E2N_RICserviceUpdateFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICserviceUpdateFailure_H_
+#define	_E2N_RICserviceUpdateFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICserviceUpdateFailure */
+typedef struct E2N_RICserviceUpdateFailure {
+	E2N_ProtocolIE_Container_429P12_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICserviceUpdateFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICserviceUpdateFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICserviceUpdateFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICserviceUpdateFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICserviceUpdateFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscription.c b/asn1c_defs/E2N_RICsubscription.c
new file mode 100644
index 0000000..39dcc7a
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscription.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscription.h"
+
+static asn_TYPE_member_t asn_MBR_E2N_RICsubscription_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscription, ricEventTriggerDefinition),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICeventTriggerDefinition,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricEventTriggerDefinition"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscription, ricAction_ToBeSetup_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICactions_ToBeSetup_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricAction-ToBeSetup-List"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscription_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscription_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricEventTriggerDefinition */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricAction-ToBeSetup-List */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscription_specs_1 = {
+	sizeof(struct E2N_RICsubscription),
+	offsetof(struct E2N_RICsubscription, _asn_ctx),
+	asn_MAP_E2N_RICsubscription_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscription = {
+	"RICsubscription",
+	"RICsubscription",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscription_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscription_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscription_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscription_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscription_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscription_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscription_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RICsubscription_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscription.h b/asn1c_defs/E2N_RICsubscription.h
new file mode 100644
index 0000000..98c7ccc
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscription.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscription_H_
+#define	_E2N_RICsubscription_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RICeventTriggerDefinition.h"
+#include "E2N_RICactions-ToBeSetup-List.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscription */
+typedef struct E2N_RICsubscription {
+	E2N_RICeventTriggerDefinition_t	 ricEventTriggerDefinition;
+	E2N_RICactions_ToBeSetup_List_t	 ricAction_ToBeSetup_List;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscription_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscription;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscription_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteFailure.c b/asn1c_defs/E2N_RICsubscriptionDeleteFailure.c
new file mode 100644
index 0000000..a9ffe0d
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionDeleteFailure.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteFailure_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionDeleteFailure),
+	offsetof(struct E2N_RICsubscriptionDeleteFailure, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteFailure = {
+	"RICsubscriptionDeleteFailure",
+	"RICsubscriptionDeleteFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteFailure.h b/asn1c_defs/E2N_RICsubscriptionDeleteFailure.h
new file mode 100644
index 0000000..2c31887
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionDeleteFailure_H_
+#define	_E2N_RICsubscriptionDeleteFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionDeleteFailure */
+typedef struct E2N_RICsubscriptionDeleteFailure {
+	E2N_ProtocolIE_Container_429P5_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionDeleteFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteRequest.c b/asn1c_defs/E2N_RICsubscriptionDeleteRequest.c
new file mode 100644
index 0000000..0440c5c
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionDeleteRequest.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteRequest_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionDeleteRequest),
+	offsetof(struct E2N_RICsubscriptionDeleteRequest, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteRequest = {
+	"RICsubscriptionDeleteRequest",
+	"RICsubscriptionDeleteRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteRequest.h b/asn1c_defs/E2N_RICsubscriptionDeleteRequest.h
new file mode 100644
index 0000000..10f2d95
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionDeleteRequest_H_
+#define	_E2N_RICsubscriptionDeleteRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionDeleteRequest */
+typedef struct E2N_RICsubscriptionDeleteRequest {
+	E2N_ProtocolIE_Container_429P3_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionDeleteRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteResponse.c b/asn1c_defs/E2N_RICsubscriptionDeleteResponse.c
new file mode 100644
index 0000000..d8bad06
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionDeleteResponse.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionDeleteResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionDeleteResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteResponse_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionDeleteResponse),
+	offsetof(struct E2N_RICsubscriptionDeleteResponse, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionDeleteResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteResponse = {
+	"RICsubscriptionDeleteResponse",
+	"RICsubscriptionDeleteResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionDeleteResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionDeleteResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionDeleteResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionDeleteResponse.h b/asn1c_defs/E2N_RICsubscriptionDeleteResponse.h
new file mode 100644
index 0000000..507d55f
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionDeleteResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionDeleteResponse_H_
+#define	_E2N_RICsubscriptionDeleteResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionDeleteResponse */
+typedef struct E2N_RICsubscriptionDeleteResponse {
+	E2N_ProtocolIE_Container_429P4_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionDeleteResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionDeleteResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionDeleteResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionDeleteResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionDeleteResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionFailure.c b/asn1c_defs/E2N_RICsubscriptionFailure.c
new file mode 100644
index 0000000..fdd848e
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionFailure.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionFailure_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionFailure),
+	offsetof(struct E2N_RICsubscriptionFailure, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionFailure = {
+	"RICsubscriptionFailure",
+	"RICsubscriptionFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionFailure_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionFailure_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionFailure_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionFailure.h b/asn1c_defs/E2N_RICsubscriptionFailure.h
new file mode 100644
index 0000000..fcb19f1
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionFailure_H_
+#define	_E2N_RICsubscriptionFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionFailure */
+typedef struct E2N_RICsubscriptionFailure {
+	E2N_ProtocolIE_Container_429P2_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionRequest.c b/asn1c_defs/E2N_RICsubscriptionRequest.c
new file mode 100644
index 0000000..629c080
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionRequest.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionRequest_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionRequest),
+	offsetof(struct E2N_RICsubscriptionRequest, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionRequest = {
+	"RICsubscriptionRequest",
+	"RICsubscriptionRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionRequest_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionRequest_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionRequest_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionRequest.h b/asn1c_defs/E2N_RICsubscriptionRequest.h
new file mode 100644
index 0000000..5bb4f36
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionRequest_H_
+#define	_E2N_RICsubscriptionRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionRequest */
+typedef struct E2N_RICsubscriptionRequest {
+	E2N_ProtocolIE_Container_429P0_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubscriptionResponse.c b/asn1c_defs/E2N_RICsubscriptionResponse.c
new file mode 100644
index 0000000..410ed3e
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubscriptionResponse.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubscriptionResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProtocolIE_Container_429P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubscriptionResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubscriptionResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionResponse_specs_1 = {
+	sizeof(struct E2N_RICsubscriptionResponse),
+	offsetof(struct E2N_RICsubscriptionResponse, _asn_ctx),
+	asn_MAP_E2N_RICsubscriptionResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionResponse = {
+	"RICsubscriptionResponse",
+	"RICsubscriptionResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubscriptionResponse_tags_1,
+	sizeof(asn_DEF_E2N_RICsubscriptionResponse_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionResponse_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubscriptionResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubscriptionResponse_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubscriptionResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubscriptionResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_E2N_RICsubscriptionResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubscriptionResponse.h b/asn1c_defs/E2N_RICsubscriptionResponse.h
new file mode 100644
index 0000000..a285e61
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubscriptionResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubscriptionResponse_H_
+#define	_E2N_RICsubscriptionResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubscriptionResponse */
+typedef struct E2N_RICsubscriptionResponse {
+	E2N_ProtocolIE_Container_429P1_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubscriptionResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubscriptionResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubscriptionResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubscriptionResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubscriptionResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubsequentAction.c b/asn1c_defs/E2N_RICsubsequentAction.c
new file mode 100644
index 0000000..fed3ab2
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubsequentAction.c
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubsequentAction.h"
+
+asn_TYPE_member_t asn_MBR_E2N_RICsubsequentAction_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubsequentAction, ricSubsequentActionType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICsubsequentActionType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricSubsequentActionType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_RICsubsequentAction, ricTimeToWait),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_RICtimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ricTimeToWait"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubsequentAction_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_RICsubsequentAction_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ricSubsequentActionType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ricTimeToWait */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubsequentAction_specs_1 = {
+	sizeof(struct E2N_RICsubsequentAction),
+	offsetof(struct E2N_RICsubsequentAction, _asn_ctx),
+	asn_MAP_E2N_RICsubsequentAction_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubsequentAction = {
+	"RICsubsequentAction",
+	"RICsubsequentAction",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_RICsubsequentAction_tags_1,
+	sizeof(asn_DEF_E2N_RICsubsequentAction_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubsequentAction_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubsequentAction_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubsequentAction_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubsequentAction_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_RICsubsequentAction_1,
+	2,	/* Elements count */
+	&asn_SPC_E2N_RICsubsequentAction_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubsequentAction.h b/asn1c_defs/E2N_RICsubsequentAction.h
new file mode 100644
index 0000000..61d54fa
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubsequentAction.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubsequentAction_H_
+#define	_E2N_RICsubsequentAction_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_RICsubsequentActionType.h"
+#include "E2N_RICtimeToWait.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_RICsubsequentAction */
+typedef struct E2N_RICsubsequentAction {
+	E2N_RICsubsequentActionType_t	 ricSubsequentActionType;
+	E2N_RICtimeToWait_t	 ricTimeToWait;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_RICsubsequentAction_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubsequentAction;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_RICsubsequentAction_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_RICsubsequentAction_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubsequentAction_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICsubsequentActionType.c b/asn1c_defs/E2N_RICsubsequentActionType.c
new file mode 100644
index 0000000..a823fa5
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubsequentActionType.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICsubsequentActionType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_RICsubsequentActionType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICsubsequentActionType_value2enum_1[] = {
+	{ 0,	8,	"continue" },
+	{ 1,	4,	"wait" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICsubsequentActionType_enum2value_1[] = {
+	0,	/* continue(0) */
+	1	/* wait(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_RICsubsequentActionType_specs_1 = {
+	asn_MAP_E2N_RICsubsequentActionType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICsubsequentActionType_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICsubsequentActionType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICsubsequentActionType = {
+	"RICsubsequentActionType",
+	"RICsubsequentActionType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICsubsequentActionType_tags_1,
+	sizeof(asn_DEF_E2N_RICsubsequentActionType_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubsequentActionType_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICsubsequentActionType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICsubsequentActionType_tags_1)
+		/sizeof(asn_DEF_E2N_RICsubsequentActionType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICsubsequentActionType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICsubsequentActionType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICsubsequentActionType.h b/asn1c_defs/E2N_RICsubsequentActionType.h
new file mode 100644
index 0000000..49d4b23
--- /dev/null
+++ b/asn1c_defs/E2N_RICsubsequentActionType.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICsubsequentActionType_H_
+#define	_E2N_RICsubsequentActionType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICsubsequentActionType {
+	E2N_RICsubsequentActionType_continue	= 0,
+	E2N_RICsubsequentActionType_wait	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICsubsequentActionType;
+
+/* E2N_RICsubsequentActionType */
+typedef long	 E2N_RICsubsequentActionType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_RICsubsequentActionType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICsubsequentActionType;
+extern const asn_INTEGER_specifics_t asn_SPC_RICsubsequentActionType_specs_1;
+asn_struct_free_f RICsubsequentActionType_free;
+asn_struct_print_f RICsubsequentActionType_print;
+asn_constr_check_f RICsubsequentActionType_constraint;
+ber_type_decoder_f RICsubsequentActionType_decode_ber;
+der_type_encoder_f RICsubsequentActionType_encode_der;
+xer_type_decoder_f RICsubsequentActionType_decode_xer;
+xer_type_encoder_f RICsubsequentActionType_encode_xer;
+per_type_decoder_f RICsubsequentActionType_decode_uper;
+per_type_encoder_f RICsubsequentActionType_encode_uper;
+per_type_decoder_f RICsubsequentActionType_decode_aper;
+per_type_encoder_f RICsubsequentActionType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICsubsequentActionType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_RICtimeToWait.c b/asn1c_defs/E2N_RICtimeToWait.c
new file mode 100644
index 0000000..8c87e42
--- /dev/null
+++ b/asn1c_defs/E2N_RICtimeToWait.c
@@ -0,0 +1,87 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_RICtimeToWait.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_RICtimeToWait_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  17 }	/* (0..17,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_RICtimeToWait_value2enum_1[] = {
+	{ 0,	4,	"zero" },
+	{ 1,	4,	"w1ms" },
+	{ 2,	4,	"w2ms" },
+	{ 3,	4,	"w5ms" },
+	{ 4,	5,	"w10ms" },
+	{ 5,	5,	"w20ms" },
+	{ 6,	5,	"w30ms" },
+	{ 7,	5,	"w40ms" },
+	{ 8,	5,	"w50ms" },
+	{ 9,	6,	"w100ms" },
+	{ 10,	6,	"w200ms" },
+	{ 11,	6,	"w500ms" },
+	{ 12,	3,	"w1s" },
+	{ 13,	3,	"w2s" },
+	{ 14,	3,	"w5s" },
+	{ 15,	4,	"w10s" },
+	{ 16,	4,	"w20s" },
+	{ 17,	4,	"w60s" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_RICtimeToWait_enum2value_1[] = {
+	9,	/* w100ms(9) */
+	4,	/* w10ms(4) */
+	15,	/* w10s(15) */
+	1,	/* w1ms(1) */
+	12,	/* w1s(12) */
+	10,	/* w200ms(10) */
+	5,	/* w20ms(5) */
+	16,	/* w20s(16) */
+	2,	/* w2ms(2) */
+	13,	/* w2s(13) */
+	6,	/* w30ms(6) */
+	7,	/* w40ms(7) */
+	11,	/* w500ms(11) */
+	8,	/* w50ms(8) */
+	3,	/* w5ms(3) */
+	14,	/* w5s(14) */
+	17,	/* w60s(17) */
+	0	/* zero(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_RICtimeToWait_specs_1 = {
+	asn_MAP_E2N_RICtimeToWait_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_RICtimeToWait_enum2value_1,	/* N => "tag"; sorted by N */
+	18,	/* Number of elements in the maps */
+	19,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_RICtimeToWait_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_RICtimeToWait = {
+	"RICtimeToWait",
+	"RICtimeToWait",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_RICtimeToWait_tags_1,
+	sizeof(asn_DEF_E2N_RICtimeToWait_tags_1)
+		/sizeof(asn_DEF_E2N_RICtimeToWait_tags_1[0]), /* 1 */
+	asn_DEF_E2N_RICtimeToWait_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_RICtimeToWait_tags_1)
+		/sizeof(asn_DEF_E2N_RICtimeToWait_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_RICtimeToWait_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_RICtimeToWait_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_RICtimeToWait.h b/asn1c_defs/E2N_RICtimeToWait.h
new file mode 100644
index 0000000..452603c
--- /dev/null
+++ b/asn1c_defs/E2N_RICtimeToWait.h
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-IEs"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_RICtimeToWait_H_
+#define	_E2N_RICtimeToWait_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_RICtimeToWait {
+	E2N_RICtimeToWait_zero	= 0,
+	E2N_RICtimeToWait_w1ms	= 1,
+	E2N_RICtimeToWait_w2ms	= 2,
+	E2N_RICtimeToWait_w5ms	= 3,
+	E2N_RICtimeToWait_w10ms	= 4,
+	E2N_RICtimeToWait_w20ms	= 5,
+	E2N_RICtimeToWait_w30ms	= 6,
+	E2N_RICtimeToWait_w40ms	= 7,
+	E2N_RICtimeToWait_w50ms	= 8,
+	E2N_RICtimeToWait_w100ms	= 9,
+	E2N_RICtimeToWait_w200ms	= 10,
+	E2N_RICtimeToWait_w500ms	= 11,
+	E2N_RICtimeToWait_w1s	= 12,
+	E2N_RICtimeToWait_w2s	= 13,
+	E2N_RICtimeToWait_w5s	= 14,
+	E2N_RICtimeToWait_w10s	= 15,
+	E2N_RICtimeToWait_w20s	= 16,
+	E2N_RICtimeToWait_w60s	= 17
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_RICtimeToWait;
+
+/* E2N_RICtimeToWait */
+typedef long	 E2N_RICtimeToWait_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_RICtimeToWait_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_RICtimeToWait;
+extern const asn_INTEGER_specifics_t asn_SPC_RICtimeToWait_specs_1;
+asn_struct_free_f RICtimeToWait_free;
+asn_struct_print_f RICtimeToWait_print;
+asn_constr_check_f RICtimeToWait_constraint;
+ber_type_decoder_f RICtimeToWait_decode_ber;
+der_type_encoder_f RICtimeToWait_encode_der;
+xer_type_decoder_f RICtimeToWait_decode_xer;
+xer_type_encoder_f RICtimeToWait_encode_xer;
+per_type_decoder_f RICtimeToWait_decode_uper;
+per_type_encoder_f RICtimeToWait_encode_uper;
+per_type_decoder_f RICtimeToWait_decode_aper;
+per_type_encoder_f RICtimeToWait_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_RICtimeToWait_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_Style-ID.c b/asn1c_defs/E2N_Style-ID.c
new file mode 100644
index 0000000..e15bc43
--- /dev/null
+++ b/asn1c_defs/E2N_Style-ID.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_Style-ID.h"
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_E2N_Style_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_Style_ID = {
+	"Style-ID",
+	"Style-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_E2N_Style_ID_tags_1,
+	sizeof(asn_DEF_E2N_Style_ID_tags_1)
+		/sizeof(asn_DEF_E2N_Style_ID_tags_1[0]), /* 1 */
+	asn_DEF_E2N_Style_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_Style_ID_tags_1)
+		/sizeof(asn_DEF_E2N_Style_ID_tags_1[0]), /* 1 */
+	{ 0, 0, NativeInteger_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/E2N_Style-ID.h b/asn1c_defs/E2N_Style-ID.h
new file mode 100644
index 0000000..7f16f17
--- /dev/null
+++ b/asn1c_defs/E2N_Style-ID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_Style_ID_H_
+#define	_E2N_Style_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_Style-ID */
+typedef long	 E2N_Style_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_Style_ID;
+asn_struct_free_f E2N_Style_ID_free;
+asn_struct_print_f E2N_Style_ID_print;
+asn_constr_check_f E2N_Style_ID_constraint;
+ber_type_decoder_f E2N_Style_ID_decode_ber;
+der_type_encoder_f E2N_Style_ID_encode_der;
+xer_type_decoder_f E2N_Style_ID_decode_xer;
+xer_type_encoder_f E2N_Style_ID_encode_xer;
+per_type_decoder_f E2N_Style_ID_decode_uper;
+per_type_encoder_f E2N_Style_ID_encode_uper;
+per_type_decoder_f E2N_Style_ID_decode_aper;
+per_type_encoder_f E2N_Style_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_Style_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_SuccessfulOutcome.c b/asn1c_defs/E2N_SuccessfulOutcome.c
new file mode 100644
index 0000000..76023bc
--- /dev/null
+++ b/asn1c_defs/E2N_SuccessfulOutcome.c
@@ -0,0 +1,318 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_SuccessfulOutcome.h"
+
+static const long asn_VAL_1_E2N_id_ricSubscription = 201;
+static const long asn_VAL_1_E2N_reject = 0;
+static const long asn_VAL_2_E2N_id_ricSubscriptionDelete = 202;
+static const long asn_VAL_2_E2N_reject = 0;
+static const long asn_VAL_3_E2N_id_ricServiceUpdate = 203;
+static const long asn_VAL_3_E2N_reject = 0;
+static const long asn_VAL_4_E2N_id_ricControl = 204;
+static const long asn_VAL_4_E2N_reject = 0;
+static const long asn_VAL_5_E2N_id_ricIndication = 205;
+static const long asn_VAL_5_E2N_ignore = 1;
+static const long asn_VAL_6_E2N_id_ricServiceQuery = 206;
+static const long asn_VAL_6_E2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_1_E2N_id_ricSubscription },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_1_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_2_E2N_id_ricSubscriptionDelete },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_2_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_3_E2N_id_ricServiceUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_3_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICcontrolRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_4_E2N_id_ricControl },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_4_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICindication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_5_E2N_id_ricIndication },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_5_E2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceQuery },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_6_E2N_id_ricServiceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_6_E2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 6, 5, asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_E2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SuccessfulOutcome_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_SuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SuccessfulOutcome_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 1; /* &SuccessfulOutcome */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_SuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome__value, choice.RICsubscriptionResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome__value, choice.RICsubscriptionDeleteResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionDeleteResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome__value, choice.RICserviceUpdateAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdateAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICserviceUpdateAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome__value, choice.RICcontrolAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolAcknowledge"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* RICsubscriptionResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* RICsubscriptionDeleteResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* RICserviceUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* RICcontrolAcknowledge */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_4 = {
+	sizeof(struct E2N_SuccessfulOutcome__value),
+	offsetof(struct E2N_SuccessfulOutcome__value, _asn_ctx),
+	offsetof(struct E2N_SuccessfulOutcome__value, present),
+	sizeof(((struct E2N_SuccessfulOutcome__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_4,
+	4,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_4,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_SuccessfulOutcome_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_E2N_procedureCode_constr_2,  memb_E2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_SuccessfulOutcome_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_3,  memb_E2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_SuccessfulOutcome, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_4,
+		select_SuccessfulOutcome_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_4,  memb_E2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_SuccessfulOutcome_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_SuccessfulOutcome_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_SuccessfulOutcome_specs_1 = {
+	sizeof(struct E2N_SuccessfulOutcome),
+	offsetof(struct E2N_SuccessfulOutcome, _asn_ctx),
+	asn_MAP_E2N_SuccessfulOutcome_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_SuccessfulOutcome = {
+	"SuccessfulOutcome",
+	"SuccessfulOutcome",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_SuccessfulOutcome_tags_1,
+	sizeof(asn_DEF_E2N_SuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_E2N_SuccessfulOutcome_tags_1[0]), /* 1 */
+	asn_DEF_E2N_SuccessfulOutcome_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_SuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_E2N_SuccessfulOutcome_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_SuccessfulOutcome_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_SuccessfulOutcome_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_SuccessfulOutcome.h b/asn1c_defs/E2N_SuccessfulOutcome.h
new file mode 100644
index 0000000..e9f8d08
--- /dev/null
+++ b/asn1c_defs/E2N_SuccessfulOutcome.h
@@ -0,0 +1,81 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_SuccessfulOutcome_H_
+#define	_E2N_SuccessfulOutcome_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProcedureCode.h"
+#include "E2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "E2N_RICsubscriptionRequest.h"
+#include "E2N_RICsubscriptionResponse.h"
+#include "E2N_RICsubscriptionFailure.h"
+#include "E2N_RICsubscriptionDeleteRequest.h"
+#include "E2N_RICsubscriptionDeleteResponse.h"
+#include "E2N_RICsubscriptionDeleteFailure.h"
+#include "E2N_RICserviceUpdate.h"
+#include "E2N_RICserviceUpdateAcknowledge.h"
+#include "E2N_RICserviceUpdateFailure.h"
+#include "E2N_RICcontrolRequest.h"
+#include "E2N_RICcontrolAcknowledge.h"
+#include "E2N_RICcontrolFailure.h"
+#include "E2N_RICindication.h"
+#include "E2N_RICserviceQuery.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_SuccessfulOutcome__value_PR {
+	E2N_SuccessfulOutcome__value_PR_NOTHING,	/* No components present */
+	E2N_SuccessfulOutcome__value_PR_RICsubscriptionResponse,
+	E2N_SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse,
+	E2N_SuccessfulOutcome__value_PR_RICserviceUpdateAcknowledge,
+	E2N_SuccessfulOutcome__value_PR_RICcontrolAcknowledge
+} E2N_SuccessfulOutcome__value_PR;
+
+/* E2N_SuccessfulOutcome */
+typedef struct E2N_SuccessfulOutcome {
+	E2N_ProcedureCode_t	 procedureCode;
+	E2N_Criticality_t	 criticality;
+	struct E2N_SuccessfulOutcome__value {
+		E2N_SuccessfulOutcome__value_PR present;
+		union E2N_SuccessfulOutcome__E2N_value_u {
+			E2N_RICsubscriptionResponse_t	 RICsubscriptionResponse;
+			E2N_RICsubscriptionDeleteResponse_t	 RICsubscriptionDeleteResponse;
+			E2N_RICserviceUpdateAcknowledge_t	 RICserviceUpdateAcknowledge;
+			E2N_RICcontrolAcknowledge_t	 RICcontrolAcknowledge;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_SuccessfulOutcome_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_SuccessfulOutcome;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_SuccessfulOutcome_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_SuccessfulOutcome_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_SuccessfulOutcome_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_TimeStamp.c b/asn1c_defs/E2N_TimeStamp.c
new file mode 100644
index 0000000..33701d5
--- /dev/null
+++ b/asn1c_defs/E2N_TimeStamp.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_TimeStamp.h"
+
+int
+E2N_TimeStamp_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_TimeStamp_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_E2N_TimeStamp_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_TimeStamp = {
+	"TimeStamp",
+	"TimeStamp",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_E2N_TimeStamp_tags_1,
+	sizeof(asn_DEF_E2N_TimeStamp_tags_1)
+		/sizeof(asn_DEF_E2N_TimeStamp_tags_1[0]), /* 1 */
+	asn_DEF_E2N_TimeStamp_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_TimeStamp_tags_1)
+		/sizeof(asn_DEF_E2N_TimeStamp_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_TimeStamp_constr_1, E2N_TimeStamp_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_TimeStamp.h b/asn1c_defs/E2N_TimeStamp.h
new file mode 100644
index 0000000..72b6ec8
--- /dev/null
+++ b/asn1c_defs/E2N_TimeStamp.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_TimeStamp_H_
+#define	_E2N_TimeStamp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* E2N_TimeStamp */
+typedef OCTET_STRING_t	 E2N_TimeStamp_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_TimeStamp_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_TimeStamp;
+asn_struct_free_f E2N_TimeStamp_free;
+asn_struct_print_f E2N_TimeStamp_print;
+asn_constr_check_f E2N_TimeStamp_constraint;
+ber_type_decoder_f E2N_TimeStamp_decode_ber;
+der_type_encoder_f E2N_TimeStamp_encode_der;
+xer_type_decoder_f E2N_TimeStamp_decode_xer;
+xer_type_encoder_f E2N_TimeStamp_encode_xer;
+per_type_decoder_f E2N_TimeStamp_decode_uper;
+per_type_encoder_f E2N_TimeStamp_encode_uper;
+per_type_decoder_f E2N_TimeStamp_decode_aper;
+per_type_encoder_f E2N_TimeStamp_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_TimeStamp_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_TimeToWait.c b/asn1c_defs/E2N_TimeToWait.c
new file mode 100644
index 0000000..d8bac50
--- /dev/null
+++ b/asn1c_defs/E2N_TimeToWait.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_TimeToWait.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_E2N_TimeToWait_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_TimeToWait_value2enum_1[] = {
+	{ 0,	3,	"v1s" },
+	{ 1,	3,	"v2s" },
+	{ 2,	3,	"v5s" },
+	{ 3,	4,	"v10s" },
+	{ 4,	4,	"v20s" },
+	{ 5,	4,	"v60s" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_TimeToWait_enum2value_1[] = {
+	3,	/* v10s(3) */
+	0,	/* v1s(0) */
+	4,	/* v20s(4) */
+	1,	/* v2s(1) */
+	2,	/* v5s(2) */
+	5	/* v60s(5) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_E2N_TimeToWait_specs_1 = {
+	asn_MAP_E2N_TimeToWait_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_TimeToWait_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_TimeToWait_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_TimeToWait = {
+	"TimeToWait",
+	"TimeToWait",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_TimeToWait_tags_1,
+	sizeof(asn_DEF_E2N_TimeToWait_tags_1)
+		/sizeof(asn_DEF_E2N_TimeToWait_tags_1[0]), /* 1 */
+	asn_DEF_E2N_TimeToWait_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_TimeToWait_tags_1)
+		/sizeof(asn_DEF_E2N_TimeToWait_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_TimeToWait_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_TimeToWait_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_TimeToWait.h b/asn1c_defs/E2N_TimeToWait.h
new file mode 100644
index 0000000..34904f1
--- /dev/null
+++ b/asn1c_defs/E2N_TimeToWait.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_TimeToWait_H_
+#define	_E2N_TimeToWait_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_TimeToWait {
+	E2N_TimeToWait_v1s	= 0,
+	E2N_TimeToWait_v2s	= 1,
+	E2N_TimeToWait_v5s	= 2,
+	E2N_TimeToWait_v10s	= 3,
+	E2N_TimeToWait_v20s	= 4,
+	E2N_TimeToWait_v60s	= 5
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_TimeToWait;
+
+/* E2N_TimeToWait */
+typedef long	 E2N_TimeToWait_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_TimeToWait;
+asn_struct_free_f E2N_TimeToWait_free;
+asn_struct_print_f E2N_TimeToWait_print;
+asn_constr_check_f E2N_TimeToWait_constraint;
+ber_type_decoder_f E2N_TimeToWait_decode_ber;
+der_type_encoder_f E2N_TimeToWait_encode_der;
+xer_type_decoder_f E2N_TimeToWait_decode_xer;
+xer_type_encoder_f E2N_TimeToWait_encode_xer;
+per_type_decoder_f E2N_TimeToWait_decode_uper;
+per_type_encoder_f E2N_TimeToWait_encode_uper;
+per_type_decoder_f E2N_TimeToWait_decode_aper;
+per_type_encoder_f E2N_TimeToWait_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_TimeToWait_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_TriggeringMessage.c b/asn1c_defs/E2N_TriggeringMessage.c
new file mode 100644
index 0000000..14ce170
--- /dev/null
+++ b/asn1c_defs/E2N_TriggeringMessage.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_TriggeringMessage.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_TriggeringMessage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_TriggeringMessage_value2enum_1[] = {
+	{ 0,	18,	"initiating-message" },
+	{ 1,	18,	"successful-outcome" },
+	{ 2,	20,	"unsuccessful-outcome" }
+};
+static const unsigned int asn_MAP_E2N_TriggeringMessage_enum2value_1[] = {
+	0,	/* initiating-message(0) */
+	1,	/* successful-outcome(1) */
+	2	/* unsuccessful-outcome(2) */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_TriggeringMessage_specs_1 = {
+	asn_MAP_E2N_TriggeringMessage_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_TriggeringMessage_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_TriggeringMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_TriggeringMessage = {
+	"TriggeringMessage",
+	"TriggeringMessage",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_TriggeringMessage_tags_1,
+	sizeof(asn_DEF_E2N_TriggeringMessage_tags_1)
+		/sizeof(asn_DEF_E2N_TriggeringMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_TriggeringMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_TriggeringMessage_tags_1)
+		/sizeof(asn_DEF_E2N_TriggeringMessage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_TriggeringMessage_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_TriggeringMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_TriggeringMessage.h b/asn1c_defs/E2N_TriggeringMessage.h
new file mode 100644
index 0000000..0d5fd3e
--- /dev/null
+++ b/asn1c_defs/E2N_TriggeringMessage.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_TriggeringMessage_H_
+#define	_E2N_TriggeringMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_TriggeringMessage {
+	E2N_TriggeringMessage_initiating_message	= 0,
+	E2N_TriggeringMessage_successful_outcome	= 1,
+	E2N_TriggeringMessage_unsuccessful_outcome	= 2
+} e_E2N_TriggeringMessage;
+
+/* E2N_TriggeringMessage */
+typedef long	 E2N_TriggeringMessage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_TriggeringMessage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_TriggeringMessage;
+extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1;
+asn_struct_free_f TriggeringMessage_free;
+asn_struct_print_f TriggeringMessage_print;
+asn_constr_check_f TriggeringMessage_constraint;
+ber_type_decoder_f TriggeringMessage_decode_ber;
+der_type_encoder_f TriggeringMessage_encode_der;
+xer_type_decoder_f TriggeringMessage_decode_xer;
+xer_type_encoder_f TriggeringMessage_encode_xer;
+per_type_decoder_f TriggeringMessage_decode_uper;
+per_type_encoder_f TriggeringMessage_encode_uper;
+per_type_decoder_f TriggeringMessage_decode_aper;
+per_type_encoder_f TriggeringMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_TriggeringMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_TypeOfError.c b/asn1c_defs/E2N_TypeOfError.c
new file mode 100644
index 0000000..2fca445
--- /dev/null
+++ b/asn1c_defs/E2N_TypeOfError.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_TypeOfError.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_TypeOfError_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_TypeOfError_value2enum_1[] = {
+	{ 0,	14,	"not-understood" },
+	{ 1,	7,	"missing" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_E2N_TypeOfError_enum2value_1[] = {
+	1,	/* missing(1) */
+	0	/* not-understood(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_TypeOfError_specs_1 = {
+	asn_MAP_E2N_TypeOfError_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_TypeOfError_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_TypeOfError_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_TypeOfError = {
+	"TypeOfError",
+	"TypeOfError",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_TypeOfError_tags_1,
+	sizeof(asn_DEF_E2N_TypeOfError_tags_1)
+		/sizeof(asn_DEF_E2N_TypeOfError_tags_1[0]), /* 1 */
+	asn_DEF_E2N_TypeOfError_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_TypeOfError_tags_1)
+		/sizeof(asn_DEF_E2N_TypeOfError_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_TypeOfError_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_TypeOfError_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_TypeOfError.h b/asn1c_defs/E2N_TypeOfError.h
new file mode 100644
index 0000000..f929dad
--- /dev/null
+++ b/asn1c_defs/E2N_TypeOfError.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/X2AP-minimized.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_TypeOfError_H_
+#define	_E2N_TypeOfError_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_TypeOfError {
+	E2N_TypeOfError_not_understood	= 0,
+	E2N_TypeOfError_missing	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_E2N_TypeOfError;
+
+/* E2N_TypeOfError */
+typedef long	 E2N_TypeOfError_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_TypeOfError_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_TypeOfError;
+extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1;
+asn_struct_free_f TypeOfError_free;
+asn_struct_print_f TypeOfError_print;
+asn_constr_check_f TypeOfError_constraint;
+ber_type_decoder_f TypeOfError_decode_ber;
+der_type_encoder_f TypeOfError_encode_der;
+xer_type_decoder_f TypeOfError_decode_xer;
+xer_type_encoder_f TypeOfError_encode_xer;
+per_type_decoder_f TypeOfError_decode_uper;
+per_type_encoder_f TypeOfError_encode_uper;
+per_type_decoder_f TypeOfError_decode_aper;
+per_type_encoder_f TypeOfError_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_TypeOfError_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_TypeOfMessage.c b/asn1c_defs/E2N_TypeOfMessage.c
new file mode 100644
index 0000000..e009d72
--- /dev/null
+++ b/asn1c_defs/E2N_TypeOfMessage.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_TypeOfMessage.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_E2N_TypeOfMessage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (0..3) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_E2N_TypeOfMessage_value2enum_1[] = {
+	{ 0,	7,	"nothing" },
+	{ 1,	18,	"initiating-message" },
+	{ 2,	18,	"successful-outcome" },
+	{ 3,	20,	"unsuccessful-outcome" }
+};
+static const unsigned int asn_MAP_E2N_TypeOfMessage_enum2value_1[] = {
+	1,	/* initiating-message(1) */
+	0,	/* nothing(0) */
+	2,	/* successful-outcome(2) */
+	3	/* unsuccessful-outcome(3) */
+};
+const asn_INTEGER_specifics_t asn_SPC_E2N_TypeOfMessage_specs_1 = {
+	asn_MAP_E2N_TypeOfMessage_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_E2N_TypeOfMessage_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_E2N_TypeOfMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_TypeOfMessage = {
+	"TypeOfMessage",
+	"TypeOfMessage",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_E2N_TypeOfMessage_tags_1,
+	sizeof(asn_DEF_E2N_TypeOfMessage_tags_1)
+		/sizeof(asn_DEF_E2N_TypeOfMessage_tags_1[0]), /* 1 */
+	asn_DEF_E2N_TypeOfMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_TypeOfMessage_tags_1)
+		/sizeof(asn_DEF_E2N_TypeOfMessage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_E2N_TypeOfMessage_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_E2N_TypeOfMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_TypeOfMessage.h b/asn1c_defs/E2N_TypeOfMessage.h
new file mode 100644
index 0000000..ce6274c
--- /dev/null
+++ b/asn1c_defs/E2N_TypeOfMessage.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2SM-gNB-X2-IEs"
+ * 	found in "../../asn_defs/asn1/e2sm-gNB-X2-release-1-v041.asn.txt"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_TypeOfMessage_H_
+#define	_E2N_TypeOfMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_TypeOfMessage {
+	E2N_TypeOfMessage_nothing	= 0,
+	E2N_TypeOfMessage_initiating_message	= 1,
+	E2N_TypeOfMessage_successful_outcome	= 2,
+	E2N_TypeOfMessage_unsuccessful_outcome	= 3
+} e_E2N_TypeOfMessage;
+
+/* E2N_TypeOfMessage */
+typedef long	 E2N_TypeOfMessage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_E2N_TypeOfMessage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_E2N_TypeOfMessage;
+extern const asn_INTEGER_specifics_t asn_SPC_TypeOfMessage_specs_1;
+asn_struct_free_f TypeOfMessage_free;
+asn_struct_print_f TypeOfMessage_print;
+asn_constr_check_f TypeOfMessage_constraint;
+ber_type_decoder_f TypeOfMessage_decode_ber;
+der_type_encoder_f TypeOfMessage_encode_der;
+xer_type_decoder_f TypeOfMessage_decode_xer;
+xer_type_encoder_f TypeOfMessage_encode_xer;
+per_type_decoder_f TypeOfMessage_decode_uper;
+per_type_encoder_f TypeOfMessage_encode_uper;
+per_type_decoder_f TypeOfMessage_decode_aper;
+per_type_encoder_f TypeOfMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_TypeOfMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_UnsuccessfulOutcome.c b/asn1c_defs/E2N_UnsuccessfulOutcome.c
new file mode 100644
index 0000000..a214d5b
--- /dev/null
+++ b/asn1c_defs/E2N_UnsuccessfulOutcome.c
@@ -0,0 +1,318 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "E2N_UnsuccessfulOutcome.h"
+
+static const long asn_VAL_1_E2N_id_ricSubscription = 201;
+static const long asn_VAL_1_E2N_reject = 0;
+static const long asn_VAL_2_E2N_id_ricSubscriptionDelete = 202;
+static const long asn_VAL_2_E2N_reject = 0;
+static const long asn_VAL_3_E2N_id_ricServiceUpdate = 203;
+static const long asn_VAL_3_E2N_reject = 0;
+static const long asn_VAL_4_E2N_id_ricControl = 204;
+static const long asn_VAL_4_E2N_reject = 0;
+static const long asn_VAL_5_E2N_id_ricIndication = 205;
+static const long asn_VAL_5_E2N_ignore = 1;
+static const long asn_VAL_6_E2N_id_ricServiceQuery = 206;
+static const long asn_VAL_6_E2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_1_E2N_id_ricSubscription },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_1_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICsubscriptionDeleteFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_2_E2N_id_ricSubscriptionDelete },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_2_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICserviceUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_3_E2N_id_ricServiceUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_3_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICcontrolRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_E2N_RICcontrolFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_4_E2N_id_ricControl },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_4_E2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICindication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_5_E2N_id_ricIndication },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_5_E2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_E2N_RICserviceQuery },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_E2N_ProcedureCode, &asn_VAL_6_E2N_id_ricServiceQuery },
+	{ "&criticality", aioc__value, &asn_DEF_E2N_Criticality, &asn_VAL_6_E2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 6, 5, asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_E2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UnsuccessfulOutcome_E2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_UnsuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UnsuccessfulOutcome_E2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_E2N_E2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 2; /* &UnsuccessfulOutcome */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct E2N_UnsuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_E2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_E2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_E2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_E2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome__value, choice.RICsubscriptionFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome__value, choice.RICsubscriptionDeleteFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICsubscriptionDeleteFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICsubscriptionDeleteFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome__value, choice.RICserviceUpdateFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICserviceUpdateFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICserviceUpdateFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome__value, choice.RICcontrolFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_E2N_RICcontrolFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RICcontrolFailure"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* RICsubscriptionFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* RICsubscriptionDeleteFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* RICserviceUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* RICcontrolFailure */
+};
+static asn_CHOICE_specifics_t asn_SPC_E2N_value_specs_4 = {
+	sizeof(struct E2N_UnsuccessfulOutcome__value),
+	offsetof(struct E2N_UnsuccessfulOutcome__value, _asn_ctx),
+	offsetof(struct E2N_UnsuccessfulOutcome__value, present),
+	sizeof(((struct E2N_UnsuccessfulOutcome__value *)0)->present),
+	asn_MAP_E2N_value_tag2el_4,
+	4,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_E2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_E2N_value_4,
+	4,	/* Elements count */
+	&asn_SPC_E2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_E2N_UnsuccessfulOutcome_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_E2N_procedureCode_constr_2,  memb_E2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_E2N_Criticality,
+		select_UnsuccessfulOutcome_E2N_criticality_type,
+		{ 0, &asn_PER_memb_E2N_criticality_constr_3,  memb_E2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct E2N_UnsuccessfulOutcome, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_E2N_value_4,
+		select_UnsuccessfulOutcome_E2N_value_type,
+		{ 0, &asn_PER_memb_E2N_value_constr_4,  memb_E2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_E2N_UnsuccessfulOutcome_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_E2N_UnsuccessfulOutcome_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_E2N_UnsuccessfulOutcome_specs_1 = {
+	sizeof(struct E2N_UnsuccessfulOutcome),
+	offsetof(struct E2N_UnsuccessfulOutcome, _asn_ctx),
+	asn_MAP_E2N_UnsuccessfulOutcome_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_E2N_UnsuccessfulOutcome = {
+	"UnsuccessfulOutcome",
+	"UnsuccessfulOutcome",
+	&asn_OP_SEQUENCE,
+	asn_DEF_E2N_UnsuccessfulOutcome_tags_1,
+	sizeof(asn_DEF_E2N_UnsuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_E2N_UnsuccessfulOutcome_tags_1[0]), /* 1 */
+	asn_DEF_E2N_UnsuccessfulOutcome_tags_1,	/* Same as above */
+	sizeof(asn_DEF_E2N_UnsuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_E2N_UnsuccessfulOutcome_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_E2N_UnsuccessfulOutcome_1,
+	3,	/* Elements count */
+	&asn_SPC_E2N_UnsuccessfulOutcome_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/E2N_UnsuccessfulOutcome.h b/asn1c_defs/E2N_UnsuccessfulOutcome.h
new file mode 100644
index 0000000..1c08687
--- /dev/null
+++ b/asn1c_defs/E2N_UnsuccessfulOutcome.h
@@ -0,0 +1,81 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "E2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/e2ap-v031-subset.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_E2N_UnsuccessfulOutcome_H_
+#define	_E2N_UnsuccessfulOutcome_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "E2N_ProcedureCode.h"
+#include "E2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "E2N_RICsubscriptionRequest.h"
+#include "E2N_RICsubscriptionResponse.h"
+#include "E2N_RICsubscriptionFailure.h"
+#include "E2N_RICsubscriptionDeleteRequest.h"
+#include "E2N_RICsubscriptionDeleteResponse.h"
+#include "E2N_RICsubscriptionDeleteFailure.h"
+#include "E2N_RICserviceUpdate.h"
+#include "E2N_RICserviceUpdateAcknowledge.h"
+#include "E2N_RICserviceUpdateFailure.h"
+#include "E2N_RICcontrolRequest.h"
+#include "E2N_RICcontrolAcknowledge.h"
+#include "E2N_RICcontrolFailure.h"
+#include "E2N_RICindication.h"
+#include "E2N_RICserviceQuery.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum E2N_UnsuccessfulOutcome__value_PR {
+	E2N_UnsuccessfulOutcome__value_PR_NOTHING,	/* No components present */
+	E2N_UnsuccessfulOutcome__value_PR_RICsubscriptionFailure,
+	E2N_UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure,
+	E2N_UnsuccessfulOutcome__value_PR_RICserviceUpdateFailure,
+	E2N_UnsuccessfulOutcome__value_PR_RICcontrolFailure
+} E2N_UnsuccessfulOutcome__value_PR;
+
+/* E2N_UnsuccessfulOutcome */
+typedef struct E2N_UnsuccessfulOutcome {
+	E2N_ProcedureCode_t	 procedureCode;
+	E2N_Criticality_t	 criticality;
+	struct E2N_UnsuccessfulOutcome__value {
+		E2N_UnsuccessfulOutcome__value_PR present;
+		union E2N_UnsuccessfulOutcome__E2N_value_u {
+			E2N_RICsubscriptionFailure_t	 RICsubscriptionFailure;
+			E2N_RICsubscriptionDeleteFailure_t	 RICsubscriptionDeleteFailure;
+			E2N_RICserviceUpdateFailure_t	 RICserviceUpdateFailure;
+			E2N_RICcontrolFailure_t	 RICcontrolFailure;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} E2N_UnsuccessfulOutcome_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_E2N_UnsuccessfulOutcome;
+extern asn_SEQUENCE_specifics_t asn_SPC_E2N_UnsuccessfulOutcome_specs_1;
+extern asn_TYPE_member_t asn_MBR_E2N_UnsuccessfulOutcome_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _E2N_UnsuccessfulOutcome_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/E2N_asn_constant.h b/asn1c_defs/E2N_asn_constant.h
new file mode 100644
index 0000000..87af68b
--- /dev/null
+++ b/asn1c_defs/E2N_asn_constant.h
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ */
+
+#ifndef _E2N_ASN_CONSTANT_H
+#define _E2N_ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define E2N_maxofRANfunctionID (256)
+#define E2N_maxofRICactionID (16)
+#define E2N_maxofInterfaceProtocolIE (15)
+#define E2N_maxofActionParameters (255)
+#define E2N_maxEARFCN (65535)
+#define E2N_maxEARFCNPlusOne (65536)
+#define E2N_newmaxEARFCN (262143)
+#define E2N_maxInterfaces (16)
+#define E2N_maxCellineNB (256)
+#define E2N_maxnoofBands (16)
+#define E2N_maxnoofBearers (256)
+#define E2N_maxNrOfErrors (256)
+#define E2N_maxnoofPDCP_SN (16)
+#define E2N_maxnoofEPLMNs (15)
+#define E2N_maxnoofEPLMNsPlusOne (16)
+#define E2N_maxnoofForbLACs (4096)
+#define E2N_maxnoofForbTACs (4096)
+#define E2N_maxnoofBPLMNs (6)
+#define E2N_maxnoofNeighbours (512)
+#define E2N_maxnoofPRBs (110)
+#define E2N_maxPools (16)
+#define E2N_maxnoofCells (16)
+#define E2N_maxnoofMBSFN (8)
+#define E2N_maxFailedMeasObjects (32)
+#define E2N_maxnoofCellIDforMDT (32)
+#define E2N_maxnoofTAforMDT (8)
+#define E2N_maxnoofMBMSServiceAreaIdentities (256)
+#define E2N_maxnoofMDTPLMNs (16)
+#define E2N_maxnoofCoMPHypothesisSet (256)
+#define E2N_maxnoofCoMPCells (32)
+#define E2N_maxUEReport (128)
+#define E2N_maxCellReport (9)
+#define E2N_maxnoofPA (3)
+#define E2N_maxCSIProcess (4)
+#define E2N_maxCSIReport (2)
+#define E2N_maxSubband (14)
+#define E2N_maxofNRNeighbours (1024)
+#define E2N_maxCellinengNB (16384)
+#define E2N_maxnooftimeperiods (2)
+#define E2N_maxnoofCellIDforQMC (32)
+#define E2N_maxnoofTAforQMC (8)
+#define E2N_maxnoofPLMNforQMC (16)
+#define E2N_maxUEsinengNBDU (8192)
+#define E2N_maxnoofProtectedResourcePatterns (16)
+#define E2N_maxnoNRcellsSpectrumSharingWithE_UTRA (64)
+#define E2N_maxnoofNrCellBands (32)
+#define E2N_maxnoofBluetoothName (4)
+#define E2N_maxnoofWLANName (4)
+#define E2N_maxPrivateIEs (65535)
+#define E2N_maxProtocolExtensions (65535)
+#define E2N_maxProtocolIEs (65535)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _E2N_ASN_CONSTANT_H */
diff --git a/asn1c_defs/INTEGER.c b/asn1c_defs/INTEGER.c
new file mode 100644
index 0000000..2a2f4d7
--- /dev/null
+++ b/asn1c_defs/INTEGER.c
@@ -0,0 +1,1735 @@
+/*-
+ * Copyright (c) 2003-2014 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <INTEGER.h>
+#include <asn_codecs_prim.h>	/* Encoder and decoder of a primitive type */
+#include <errno.h>
+
+/*
+ * INTEGER basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_operation_t asn_OP_INTEGER = {
+	INTEGER_free,
+	INTEGER_print,
+	INTEGER_compare,
+	ber_decode_primitive,
+	INTEGER_encode_der,
+	INTEGER_decode_xer,
+	INTEGER_encode_xer,
+#ifdef  ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	INTEGER_decode_oer,     /* OER decoder */
+	INTEGER_encode_oer,     /* Canonical OER encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	INTEGER_decode_uper,	/* Unaligned PER decoder */
+	INTEGER_encode_uper,	/* Unaligned PER encoder */
+	INTEGER_decode_aper,	/* Aligned PER decoder */
+	INTEGER_encode_aper,	/* Aligned PER encoder */
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	INTEGER_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_INTEGER = {
+	"INTEGER",
+	"INTEGER",
+	&asn_OP_INTEGER,
+	asn_DEF_INTEGER_tags,
+	sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+	asn_DEF_INTEGER_tags,	/* Same as above */
+	sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+/*
+ * Encode INTEGER type using DER.
+ */
+asn_enc_rval_t
+INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                   void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+    asn_enc_rval_t rval;
+    INTEGER_t effective_integer;
+
+	ASN_DEBUG("%s %s as INTEGER (tm=%d)",
+		cb?"Encoding":"Estimating", td->name, tag_mode);
+
+	/*
+	 * Canonicalize integer in the buffer.
+	 * (Remove too long sign extension, remove some first 0x00 bytes)
+	 */
+	if(st->buf) {
+		uint8_t *buf = st->buf;
+		uint8_t *end1 = buf + st->size - 1;
+		int shift;
+
+		/* Compute the number of superfluous leading bytes */
+		for(; buf < end1; buf++) {
+			/*
+			 * If the contents octets of an integer value encoding
+			 * consist of more than one octet, then the bits of the
+			 * first octet and bit 8 of the second octet:
+			 * a) shall not all be ones; and
+			 * b) shall not all be zero.
+			 */
+			switch(*buf) {
+			case 0x00: if((buf[1] & 0x80) == 0)
+					continue;
+				break;
+			case 0xff: if((buf[1] & 0x80))
+					continue;
+				break;
+			}
+			break;
+		}
+
+		/* Remove leading superfluous bytes from the integer */
+		shift = buf - st->buf;
+		if(shift) {
+            union {
+                const uint8_t *c_buf;
+                uint8_t *nc_buf;
+            } unconst;
+            unconst.c_buf = st->buf;
+            effective_integer.buf = unconst.nc_buf + shift;
+            effective_integer.size = st->size - shift;
+
+            st = &effective_integer;
+        }
+    }
+
+    rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key);
+    if(rval.structure_ptr == &effective_integer) {
+        rval.structure_ptr = sptr;
+    }
+    return rval;
+}
+
+static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(
+    const asn_INTEGER_specifics_t *specs, const char *lstart,
+    const char *lstop);
+
+/*
+ * INTEGER specific human-readable output.
+ */
+static ssize_t
+INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+	char scratch[32];
+	uint8_t *buf = st->buf;
+	uint8_t *buf_end = st->buf + st->size;
+	intmax_t value;
+	ssize_t wrote = 0;
+	char *p;
+	int ret;
+
+	if(specs && specs->field_unsigned)
+		ret = asn_INTEGER2umax(st, (uintmax_t *)&value);
+	else
+		ret = asn_INTEGER2imax(st, &value);
+
+	/* Simple case: the integer size is small */
+	if(ret == 0) {
+		const asn_INTEGER_enum_map_t *el;
+		el = (value >= 0 || !specs || !specs->field_unsigned)
+			? INTEGER_map_value2enum(specs, value) : 0;
+		if(el) {
+			if(plainOrXER == 0)
+				return asn__format_to_callback(cb, app_key,
+					"%" ASN_PRIdMAX " (%s)", value, el->enum_name);
+			else
+				return asn__format_to_callback(cb, app_key,
+					"<%s/>", el->enum_name);
+		} else if(plainOrXER && specs && specs->strict_enumeration) {
+			ASN_DEBUG("ASN.1 forbids dealing with "
+				"unknown value of ENUMERATED type");
+			errno = EPERM;
+			return -1;
+		} else {
+            return asn__format_to_callback(cb, app_key,
+                                           (specs && specs->field_unsigned)
+                                               ? "%" ASN_PRIuMAX
+                                               : "%" ASN_PRIdMAX,
+                                           value);
+        }
+	} else if(plainOrXER && specs && specs->strict_enumeration) {
+		/*
+		 * Here and earlier, we cannot encode the ENUMERATED values
+		 * if there is no corresponding identifier.
+		 */
+		ASN_DEBUG("ASN.1 forbids dealing with "
+			"unknown value of ENUMERATED type");
+		errno = EPERM;
+		return -1;
+	}
+
+	/* Output in the long xx:yy:zz... format */
+	/* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */
+	for(p = scratch; buf < buf_end; buf++) {
+		const char * const h2c = "0123456789ABCDEF";
+		if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) {
+			/* Flush buffer */
+			if(cb(scratch, p - scratch, app_key) < 0)
+				return -1;
+			wrote += p - scratch;
+			p = scratch;
+		}
+		*p++ = h2c[*buf >> 4];
+		*p++ = h2c[*buf & 0x0F];
+		*p++ = 0x3a;	/* ":" */
+	}
+	if(p != scratch)
+		p--;	/* Remove the last ":" */
+
+	wrote += p - scratch;
+	return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote;
+}
+
+/*
+ * INTEGER specific human-readable output.
+ */
+int
+INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+              asn_app_consume_bytes_f *cb, void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+	ssize_t ret;
+
+	(void)ilevel;
+
+	if(!st || !st->buf)
+		ret = cb("<absent>", 8, app_key);
+	else
+		ret = INTEGER__dump(td, st, cb, app_key, 0);
+
+	return (ret < 0) ? -1 : 0;
+}
+
+struct e2v_key {
+	const char *start;
+	const char *stop;
+	const asn_INTEGER_enum_map_t *vemap;
+	const unsigned int *evmap;
+};
+static int
+INTEGER__compar_enum2value(const void *kp, const void *am) {
+	const struct e2v_key *key = (const struct e2v_key *)kp;
+	const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
+	const char *ptr, *end, *name;
+
+	/* Remap the element (sort by different criterion) */
+	el = key->vemap + key->evmap[el - key->vemap];
+
+	/* Compare strings */
+	for(ptr = key->start, end = key->stop, name = el->enum_name;
+			ptr < end; ptr++, name++) {
+		if(*ptr != *name || !*name)
+			return *(const unsigned char *)ptr
+				- *(const unsigned char *)name;
+	}
+	return name[0] ? -1 : 0;
+}
+
+static const asn_INTEGER_enum_map_t *
+INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart,
+                       const char *lstop) {
+    const asn_INTEGER_enum_map_t *el_found;
+	int count = specs ? specs->map_count : 0;
+	struct e2v_key key;
+	const char *lp;
+
+	if(!count) return NULL;
+
+	/* Guaranteed: assert(lstart < lstop); */
+	/* Figure out the tag name */
+	for(lstart++, lp = lstart; lp < lstop; lp++) {
+		switch(*lp) {
+		case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */
+		case 0x2f: /* '/' */ case 0x3e: /* '>' */
+			break;
+		default:
+			continue;
+		}
+		break;
+	}
+	if(lp == lstop) return NULL;	/* No tag found */
+	lstop = lp;
+
+	key.start = lstart;
+	key.stop = lstop;
+	key.vemap = specs->value2enum;
+	key.evmap = specs->enum2value;
+	el_found = (asn_INTEGER_enum_map_t *)bsearch(&key,
+		specs->value2enum, count, sizeof(specs->value2enum[0]),
+		INTEGER__compar_enum2value);
+	if(el_found) {
+		/* Remap enum2value into value2enum */
+		el_found = key.vemap + key.evmap[el_found - key.vemap];
+	}
+	return el_found;
+}
+
+static int
+INTEGER__compar_value2enum(const void *kp, const void *am) {
+	long a = *(const long *)kp;
+	const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
+	long b = el->nat_value;
+	if(a < b) return -1;
+	else if(a == b) return 0;
+	else return 1;
+}
+
+const asn_INTEGER_enum_map_t *
+INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) {
+	int count = specs ? specs->map_count : 0;
+	if(!count) return 0;
+	return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum,
+		count, sizeof(specs->value2enum[0]),
+		INTEGER__compar_value2enum);
+}
+
+static int
+INTEGER_st_prealloc(INTEGER_t *st, int min_size) {
+	void *p = MALLOC(min_size + 1);
+	if(p) {
+		void *b = st->buf;
+		st->size = 0;
+		st->buf = p;
+		FREEMEM(b);
+		return 0;
+	} else {
+		return -1;
+	}
+}
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+static enum xer_pbd_rval
+INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                         const void *chunk_buf, size_t chunk_size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    INTEGER_t *st = (INTEGER_t *)sptr;
+	intmax_t dec_value;
+	intmax_t hex_value = 0;
+	const char *lp;
+	const char *lstart = (const char *)chunk_buf;
+	const char *lstop = lstart + chunk_size;
+	enum {
+		ST_LEADSPACE,
+		ST_SKIPSPHEX,
+		ST_WAITDIGITS,
+		ST_DIGITS,
+		ST_DIGITS_TRAILSPACE,
+		ST_HEXDIGIT1,
+		ST_HEXDIGIT2,
+		ST_HEXDIGITS_TRAILSPACE,
+		ST_HEXCOLON,
+		ST_END_ENUM,
+		ST_UNEXPECTED
+	} state = ST_LEADSPACE;
+	const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */
+	const char *dec_value_end = 0;
+
+	if(chunk_size)
+		ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x",
+			(long)chunk_size, *lstart, lstop[-1]);
+
+	if(INTEGER_st_prealloc(st, (chunk_size/3) + 1))
+		return XPBD_SYSTEM_FAILURE;
+
+	/*
+	 * We may have received a tag here. It will be processed inline.
+	 * Use strtoul()-like code and serialize the result.
+	 */
+	for(lp = lstart; lp < lstop; lp++) {
+		int lv = *lp;
+		switch(lv) {
+		case 0x09: case 0x0a: case 0x0d: case 0x20:
+			switch(state) {
+			case ST_LEADSPACE:
+			case ST_DIGITS_TRAILSPACE:
+			case ST_HEXDIGITS_TRAILSPACE:
+			case ST_SKIPSPHEX:
+				continue;
+			case ST_DIGITS:
+				dec_value_end = lp;
+				state = ST_DIGITS_TRAILSPACE;
+				continue;
+			case ST_HEXCOLON:
+				state = ST_HEXDIGITS_TRAILSPACE;
+				continue;
+			default:
+				break;
+			}
+			break;
+		case 0x2d:	/* '-' */
+			if(state == ST_LEADSPACE) {
+				dec_value = 0;
+				dec_value_start = lp;
+				state = ST_WAITDIGITS;
+				continue;
+			}
+			break;
+		case 0x2b:	/* '+' */
+			if(state == ST_LEADSPACE) {
+				dec_value = 0;
+				dec_value_start = lp;
+				state = ST_WAITDIGITS;
+				continue;
+			}
+			break;
+		case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+		case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+			switch(state) {
+			case ST_DIGITS: continue;
+			case ST_SKIPSPHEX:	/* Fall through */
+			case ST_HEXDIGIT1:
+				hex_value = (lv - 0x30) << 4;
+				state = ST_HEXDIGIT2;
+				continue;
+			case ST_HEXDIGIT2:
+				hex_value += (lv - 0x30);
+				state = ST_HEXCOLON;
+				st->buf[st->size++] = (uint8_t)hex_value;
+				continue;
+			case ST_HEXCOLON:
+				return XPBD_BROKEN_ENCODING;
+			case ST_LEADSPACE:
+				dec_value = 0;
+				dec_value_start = lp;
+				/* FALL THROUGH */
+			case ST_WAITDIGITS:
+				state = ST_DIGITS;
+				continue;
+			default:
+				break;
+			}
+			break;
+		case 0x3c:	/* '<', start of XML encoded enumeration */
+			if(state == ST_LEADSPACE) {
+				const asn_INTEGER_enum_map_t *el;
+				el = INTEGER_map_enum2value(
+					(const asn_INTEGER_specifics_t *)
+					td->specifics, lstart, lstop);
+				if(el) {
+					ASN_DEBUG("Found \"%s\" => %ld",
+						el->enum_name, el->nat_value);
+					dec_value = el->nat_value;
+					state = ST_END_ENUM;
+					lp = lstop - 1;
+					continue;
+				}
+				ASN_DEBUG("Unknown identifier for INTEGER");
+			}
+			return XPBD_BROKEN_ENCODING;
+		case 0x3a:	/* ':' */
+			if(state == ST_HEXCOLON) {
+				/* This colon is expected */
+				state = ST_HEXDIGIT1;
+				continue;
+			} else if(state == ST_DIGITS) {
+				/* The colon here means that we have
+				 * decoded the first two hexadecimal
+				 * places as a decimal value.
+				 * Switch decoding mode. */
+				ASN_DEBUG("INTEGER re-evaluate as hex form");
+				state = ST_SKIPSPHEX;
+				dec_value_start = 0;
+				lp = lstart - 1;
+				continue;
+			} else {
+				ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart));
+				break;
+			}
+		/* [A-Fa-f] */
+		case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46:
+		case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66:
+			switch(state) {
+			case ST_SKIPSPHEX:
+			case ST_LEADSPACE: /* Fall through */
+			case ST_HEXDIGIT1:
+				hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61);
+				hex_value += 10;
+				hex_value <<= 4;
+				state = ST_HEXDIGIT2;
+				continue;
+			case ST_HEXDIGIT2:
+				hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61);
+				hex_value += 10;
+				st->buf[st->size++] = (uint8_t)hex_value;
+				state = ST_HEXCOLON;
+				continue;
+			case ST_DIGITS:
+				ASN_DEBUG("INTEGER re-evaluate as hex form");
+				state = ST_SKIPSPHEX;
+				dec_value_start = 0;
+				lp = lstart - 1;
+				continue;
+			default:
+				break;
+			}
+			break;
+		}
+
+		/* Found extra non-numeric stuff */
+		ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld",
+			lv, (long)(lp - lstart));
+		state = ST_UNEXPECTED;
+		break;
+	}
+
+	switch(state) {
+	case ST_END_ENUM:
+		/* Got a complete and valid enumeration encoded as a tag. */
+		break;
+	case ST_DIGITS:
+		dec_value_end = lstop;
+		/* FALL THROUGH */
+	case ST_DIGITS_TRAILSPACE:
+		/* The last symbol encountered was a digit. */
+        switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) {
+        case ASN_STRTOX_OK:
+            if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) {
+                break;
+            } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) {
+                break;
+            } else {
+                /*
+                 * We model INTEGER on long for XER,
+                 * to avoid rewriting all the tests at once.
+                 */
+                ASN_DEBUG("INTEGER exceeds long range");
+            }
+            /* Fall through */
+        case ASN_STRTOX_ERROR_RANGE:
+            ASN_DEBUG("INTEGER decode %s hit range limit", td->name);
+            return XPBD_DECODER_LIMIT;
+		case ASN_STRTOX_ERROR_INVAL:
+		case ASN_STRTOX_EXPECT_MORE:
+		case ASN_STRTOX_EXTRA_DATA:
+			return XPBD_BROKEN_ENCODING;
+		}
+		break;
+	case ST_HEXCOLON:
+	case ST_HEXDIGITS_TRAILSPACE:
+		st->buf[st->size] = 0;	/* Just in case termination */
+		return XPBD_BODY_CONSUMED;
+	case ST_HEXDIGIT1:
+	case ST_HEXDIGIT2:
+	case ST_SKIPSPHEX:
+		return XPBD_BROKEN_ENCODING;
+	case ST_LEADSPACE:
+		/* Content not found */
+		return XPBD_NOT_BODY_IGNORE;
+	case ST_WAITDIGITS:
+	case ST_UNEXPECTED:
+		ASN_DEBUG("INTEGER: No useful digits (state %d)", state);
+		return XPBD_BROKEN_ENCODING;	/* No digits */
+	}
+
+	/*
+	 * Convert the result of parsing of enumeration or a straight
+	 * decimal value into a BER representation.
+	 */
+	if(asn_imax2INTEGER(st, dec_value)) {
+                ASN_DEBUG("INTEGER decode %s conversion failed", td->name);
+		return XPBD_SYSTEM_FAILURE;
+        }
+
+	return XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **sptr,
+                   const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+		sptr, sizeof(INTEGER_t), opt_mname,
+		buf_ptr, size, INTEGER__xer_body_decode);
+}
+
+asn_enc_rval_t
+INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, enum xer_encoder_flags_e flags,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+	asn_enc_rval_t er = {0,0,0};
+
+	(void)ilevel;
+	(void)flags;
+	
+	if(!st || !st->buf)
+		ASN__ENCODE_FAILED;
+
+	er.encoded = INTEGER__dump(td, st, cb, app_key, 1);
+	if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+#ifndef	ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = { RC_OK, 0 };
+	INTEGER_t *st = (INTEGER_t *)*sptr;
+	const asn_per_constraint_t *ct;
+	int repeat;
+
+	(void)opt_codec_ctx;
+
+	if(!st) {
+		st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	if(!constraints) constraints = td->encoding_constraints.per_constraints;
+	ct = constraints ? &constraints->value : 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) ASN__DECODE_STARVED;
+		if(inext) ct = 0;
+	}
+
+	FREEMEM(st->buf);
+	st->buf = 0;
+	st->size = 0;
+	if(ct) {
+		if(ct->flags & APC_SEMI_CONSTRAINED) {
+			st->buf = (uint8_t *)CALLOC(1, 2);
+			if(!st->buf) ASN__DECODE_FAILED;
+			st->size = 1;
+		} else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) {
+			size_t size = (ct->range_bits + 7) >> 3;
+			st->buf = (uint8_t *)MALLOC(1 + size + 1);
+			if(!st->buf) ASN__DECODE_FAILED;
+			st->size = size;
+		}
+	}
+
+	/* X.691-2008/11, #13.2.2, constrained whole number */
+	if(ct && ct->flags != APC_UNCONSTRAINED) {
+		/* #11.5.6 */
+		ASN_DEBUG("Integer with range %d bits", ct->range_bits);
+		if(ct->range_bits >= 0) {
+			if((size_t)ct->range_bits > 8 * sizeof(unsigned long))
+				ASN__DECODE_FAILED;
+
+			if(specs && specs->field_unsigned) {
+				unsigned long uvalue = 0;
+				if(uper_get_constrained_whole_number(pd,
+					&uvalue, ct->range_bits))
+					ASN__DECODE_STARVED;
+				ASN_DEBUG("Got value %lu + low %ld",
+					uvalue, ct->lower_bound);
+				uvalue += ct->lower_bound;
+				if(asn_ulong2INTEGER(st, uvalue))
+					ASN__DECODE_FAILED;
+			} else {
+				unsigned long uvalue = 0;
+				long svalue;
+				if(uper_get_constrained_whole_number(pd,
+					&uvalue, ct->range_bits))
+					ASN__DECODE_STARVED;
+				ASN_DEBUG("Got value %lu + low %ld",
+					uvalue, ct->lower_bound);
+                if(per_long_range_unrebase(uvalue, ct->lower_bound,
+                                           ct->upper_bound, &svalue)
+                   || asn_long2INTEGER(st, svalue)) {
+                    ASN__DECODE_FAILED;
+                }
+			}
+			return rval;
+		}
+	} else {
+		ASN_DEBUG("Decoding unconstrained integer %s", td->name);
+	}
+
+	/* X.691, #12.2.3, #12.2.4 */
+	do {
+		ssize_t len = 0;
+		void *p = NULL;
+		int ret = 0;
+
+		/* Get the PER length */
+		len = uper_get_length(pd, -1, 0, &repeat);
+		if(len < 0) ASN__DECODE_STARVED;
+
+		p = REALLOC(st->buf, st->size + len + 1);
+		if(!p) ASN__DECODE_FAILED;
+		st->buf = (uint8_t *)p;
+
+		ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len);
+		if(ret < 0) ASN__DECODE_STARVED;
+		st->size += len;
+	} while(repeat);
+	st->buf[st->size] = 0;	/* JIC */
+
+	/* #12.2.3 */
+	if(ct && ct->lower_bound) {
+		/*
+		 * TODO: replace by in-place arithmetics.
+		 */
+		long value = 0;
+		if(asn_INTEGER2long(st, &value))
+			ASN__DECODE_FAILED;
+		if(asn_imax2INTEGER(st, value + ct->lower_bound))
+			ASN__DECODE_FAILED;
+	}
+
+	return rval;
+}
+
+asn_enc_rval_t
+INTEGER_encode_uper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, const void *sptr,
+                    asn_per_outp_t *po) {
+	const asn_INTEGER_specifics_t *specs =
+        	(const asn_INTEGER_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	const uint8_t *buf;
+	const uint8_t *end;
+	const asn_per_constraint_t *ct;
+	long value = 0;
+
+	if(!st || st->size == 0) ASN__ENCODE_FAILED;
+
+	if(!constraints) constraints = td->encoding_constraints.per_constraints;
+	ct = constraints ? &constraints->value : 0;
+
+	er.encoded = 0;
+
+	if(ct) {
+		int inext = 0;
+		if(specs && specs->field_unsigned) {
+			unsigned long uval;
+			if(asn_INTEGER2ulong(st, &uval))
+				ASN__ENCODE_FAILED;
+			/* Check proper range */
+			if(ct->flags & APC_SEMI_CONSTRAINED) {
+				if(uval < (unsigned long)ct->lower_bound)
+					inext = 1;
+			} else if(ct->range_bits >= 0) {
+				if(uval < (unsigned long)ct->lower_bound
+				|| uval > (unsigned long)ct->upper_bound)
+					inext = 1;
+			}
+			ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s",
+				uval, st->buf[0], st->size,
+				ct->lower_bound, ct->upper_bound,
+				inext ? "ext" : "fix");
+			value = uval;
+		} else {
+			if(asn_INTEGER2long(st, &value))
+				ASN__ENCODE_FAILED;
+			/* Check proper range */
+			if(ct->flags & APC_SEMI_CONSTRAINED) {
+				if(value < ct->lower_bound)
+					inext = 1;
+			} else if(ct->range_bits >= 0) {
+				if(value < ct->lower_bound
+				|| value > ct->upper_bound)
+					inext = 1;
+			}
+			ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s",
+				value, st->buf[0], st->size,
+				ct->lower_bound, ct->upper_bound,
+				inext ? "ext" : "fix");
+		}
+		if(ct->flags & APC_EXTENSIBLE) {
+			if(per_put_few_bits(po, inext, 1))
+				ASN__ENCODE_FAILED;
+			if(inext) ct = 0;
+		} else if(inext) {
+			ASN__ENCODE_FAILED;
+		}
+	}
+
+
+	/* X.691-11/2008, #13.2.2, test if constrained whole number */
+	if(ct && ct->range_bits >= 0) {
+        unsigned long v;
+		/* #11.5.6 -> #11.3 */
+		ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits",
+			value, value - ct->lower_bound, ct->range_bits);
+	if(specs && specs->field_unsigned) {
+		if (  ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound)
+		   || ((unsigned long)value < (unsigned long)ct->lower_bound))
+		   || ((unsigned long)value > (unsigned long)ct->upper_bound)
+		) {
+			ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!",
+				value, ct->lower_bound, ct->upper_bound);
+			ASN__ENCODE_FAILED;
+		}
+ 		v = (unsigned long)value - (unsigned long)ct->lower_bound;
+ 	} else {
+ 		if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) {
+ 			ASN__ENCODE_FAILED;
+ 		}
+	}
+        if(uper_put_constrained_whole_number_u(po, v, ct->range_bits))
+		ASN__ENCODE_FAILED;
+	ASN__ENCODED_OK(er);
+	}
+
+	if(ct && ct->lower_bound) {
+		ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound);
+		/* TODO: adjust lower bound */
+		ASN__ENCODE_FAILED;
+	}
+
+	for(buf = st->buf, end = st->buf + st->size; buf < end;) {
+        int need_eom = 0;
+        ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom);
+        if(mayEncode < 0)
+			ASN__ENCODE_FAILED;
+		if(per_put_many_bits(po, buf, 8 * mayEncode))
+			ASN__ENCODE_FAILED;
+		buf += mayEncode;
+        if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED;
+    }
+
+	ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_dec_rval_t rval = { RC_OK, 0 };
+	INTEGER_t *st = (INTEGER_t *)*sptr;
+	const asn_per_constraint_t *ct;
+	int repeat;
+
+	(void)opt_codec_ctx;
+
+	if(!st) {
+		st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	if(!constraints) constraints = td->encoding_constraints.per_constraints;
+	ct = constraints ? &constraints->value : 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) ASN__DECODE_STARVED;
+		if(inext) ct = 0;
+	}
+
+	FREEMEM(st->buf);
+	st->buf = 0;
+	st->size = 0;
+	if(ct) {
+		if(ct->flags & APC_SEMI_CONSTRAINED) {
+			st->buf = (uint8_t *)CALLOC(1, 2);
+			if(!st->buf) ASN__DECODE_FAILED;
+			st->size = 1;
+		} else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) {
+			size_t size = (ct->range_bits + 7) >> 3;
+			st->buf = (uint8_t *)MALLOC(1 + size + 1);
+			if(!st->buf) ASN__DECODE_FAILED;
+			st->size = size;
+		}
+	}
+
+	/* X.691, #12.2.2 */
+	if(ct && ct->flags != APC_UNCONSTRAINED) {
+		/* #10.5.6 */
+		ASN_DEBUG("Integer with range %d bits", ct->range_bits);
+		if(ct->range_bits >= 0) {
+			if (ct->range_bits > 16) {
+				int max_range_bytes = (ct->range_bits >> 3) +
+				                      (((ct->range_bits % 8) > 0) ? 1 : 0);
+				int length = 0, i;
+				long value = 0;
+
+				for (i = 1; ; i++) {
+					int upper = 1 << i;
+					if (upper >= max_range_bytes)
+						break;
+				}
+				ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits,
+				          max_range_bytes, i);
+
+				if ((length = per_get_few_bits(pd, i)) < 0)
+					ASN__DECODE_FAILED;
+
+				/* X.691 #12.2.6 length determinant + lb (1) */
+				length += 1;
+				ASN_DEBUG("Got length %d", length);
+				if (aper_get_align(pd) != 0)
+					ASN__DECODE_FAILED;
+				while (length--) {
+					int buf = per_get_few_bits(pd, 8);
+					if (buf < 0)
+						ASN__DECODE_FAILED;
+					value += (((long)buf) << (8 * length));
+				}
+
+				value += ct->lower_bound;
+				if((specs && specs->field_unsigned)
+				        ? asn_uint642INTEGER(st, (unsigned long)value)
+				        : asn_int642INTEGER(st, value))
+					ASN__DECODE_FAILED;
+				ASN_DEBUG("Got value %ld + low %ld",
+				          value, ct->lower_bound);
+			} else {
+				long value = 0;
+				if (ct->range_bits < 8) {
+					value = per_get_few_bits(pd, ct->range_bits);
+					if(value < 0) ASN__DECODE_STARVED;
+				} else if (ct->range_bits == 8) {
+					if (aper_get_align(pd) < 0)
+						ASN__DECODE_FAILED;
+					value = per_get_few_bits(pd, ct->range_bits);
+					if(value < 0) ASN__DECODE_STARVED;
+				} else {
+					/* Align */
+					if (aper_get_align(pd) < 0)
+						ASN__DECODE_FAILED;
+					value = per_get_few_bits(pd, 16);
+					if(value < 0) ASN__DECODE_STARVED;
+				}
+				value += ct->lower_bound;
+				if((specs && specs->field_unsigned)
+				        ? asn_ulong2INTEGER(st, value)
+				        : asn_long2INTEGER(st, value))
+					ASN__DECODE_FAILED;
+				ASN_DEBUG("Got value %ld + low %ld",
+				          value, ct->lower_bound);
+			}
+			return rval;
+		} else {
+			ASN__DECODE_FAILED;
+		}
+	} else {
+		ASN_DEBUG("Decoding unconstrained integer %s", td->name);
+	}
+
+	/* X.691, #12.2.3, #12.2.4 */
+	do {
+		ssize_t len;
+		void *p;
+		int ret;
+
+		/* Get the PER length */
+		len = aper_get_length(pd, -1, -1, &repeat);
+		if(len < 0) ASN__DECODE_STARVED;
+
+		p = REALLOC(st->buf, st->size + len + 1);
+		if(!p) ASN__DECODE_FAILED;
+		st->buf = (uint8_t *)p;
+
+		ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len);
+		if(ret < 0) ASN__DECODE_STARVED;
+		st->size += len;
+	} while(repeat);
+	st->buf[st->size] = 0;	/* JIC */
+
+	/* #12.2.3 */
+	if(ct && ct->lower_bound) {
+		/*
+		 * TODO: replace by in-place arithmetics.
+		 */
+		long value;
+		if(asn_INTEGER2long(st, &value))
+			ASN__DECODE_FAILED;
+		if(asn_long2INTEGER(st, value + ct->lower_bound))
+			ASN__DECODE_FAILED;
+	}
+
+	return rval;
+}
+
+asn_enc_rval_t
+INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints,
+                    const void *sptr, asn_per_outp_t *po) {
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	const uint8_t *buf;
+	const uint8_t *end;
+	const asn_per_constraint_t *ct;
+	long value = 0;
+
+	if(!st || st->size == 0) ASN__ENCODE_FAILED;
+
+	if(!constraints) constraints = td->encoding_constraints.per_constraints;
+	ct = constraints ? &constraints->value : 0;
+
+	er.encoded = 0;
+
+	if(ct) {
+		int inext = 0;
+		if(specs && specs->field_unsigned) {
+			unsigned long uval;
+			if(asn_INTEGER2ulong(st, &uval))
+				ASN__ENCODE_FAILED;
+			/* Check proper range */
+			if(ct->flags & APC_SEMI_CONSTRAINED) {
+				if(uval < (unsigned long)ct->lower_bound)
+					inext = 1;
+			} else if(ct->range_bits >= 0) {
+				if(uval < (unsigned long)ct->lower_bound
+				        || uval > (unsigned long)ct->upper_bound)
+					inext = 1;
+			}
+			ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s",
+			          uval, st->buf[0], st->size,
+			          ct->lower_bound, ct->upper_bound,
+			          inext ? "ext" : "fix");
+			value = uval;
+		} else {
+			if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED;
+			/* Check proper range */
+			if(ct->flags & APC_SEMI_CONSTRAINED) {
+				if(value < ct->lower_bound)
+					inext = 1;
+			} else if(ct->range_bits >= 0) {
+				if(value < ct->lower_bound
+				        || value > ct->upper_bound)
+					inext = 1;
+			}
+			ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s",
+			          value, st->buf[0], st->size,
+			          ct->lower_bound, ct->upper_bound,
+			          inext ? "ext" : "fix");
+		}
+		if(ct->flags & APC_EXTENSIBLE) {
+			if(per_put_few_bits(po, inext, 1))
+				ASN__ENCODE_FAILED;
+			if(inext) ct = 0;
+		} else if(inext) {
+			ASN__ENCODE_FAILED;
+		}
+	}
+
+	/* X.691, #12.2.2 */
+	if(ct && ct->range_bits >= 0) {
+		unsigned long v;
+
+		/* #10.5.6 */
+		ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits",
+		          value, value - ct->lower_bound, ct->range_bits);
+
+		v = value - ct->lower_bound;
+
+		/* #12 <= 8 -> alignment ? */
+		if (ct->range_bits < 8) {
+			if(per_put_few_bits(po, 0x00 | v, ct->range_bits))
+				ASN__ENCODE_FAILED;
+		} else if (ct->range_bits == 8) {
+			if(aper_put_align(po) < 0)
+				ASN__ENCODE_FAILED;
+			if(per_put_few_bits(po, 0x00 | v, ct->range_bits))
+				ASN__ENCODE_FAILED;
+		} else if (ct->range_bits <= 16) {
+			/* Consume the bytes to align on octet */
+			if(aper_put_align(po) < 0)
+				ASN__ENCODE_FAILED;
+			if(per_put_few_bits(po, 0x0000 | v,
+			                    16))
+				ASN__ENCODE_FAILED;
+		} else {
+			/* TODO: extend to >64 bits */
+			int64_t v64 = v;
+			int i, j;
+			int max_range_bytes = (ct->range_bits >> 3) +
+			                      (((ct->range_bits % 8) > 0) ? 1 : 0);
+
+			for (i = 1; ; i++) {
+				int upper = 1 << i;
+				if (upper >= max_range_bytes)
+					break;
+			}
+
+			for (j = sizeof(int64_t) -1; j != 0; j--) {
+				int64_t val;
+				val = v64 >> (j * 8);
+				if (val != 0)
+					break;
+			}
+
+			/* Putting length in the minimum number of bits ex: 5 = 3bits */
+			if (per_put_few_bits(po, j, i))
+				ASN__ENCODE_FAILED;
+
+			/* Consume the bits to align on octet */
+			if (aper_put_align(po) < 0)
+				ASN__ENCODE_FAILED;
+			/* Put the value */
+			for (i = 0; i <= j; i++) {
+				if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8))
+					ASN__ENCODE_FAILED;
+			}
+		}
+		ASN__ENCODED_OK(er);
+	}
+
+	if(ct && ct->lower_bound) {
+		ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound);
+		/* TODO: adjust lower bound */
+		ASN__ENCODE_FAILED;
+	}
+
+	for(buf = st->buf, end = st->buf + st->size; buf < end;) {
+		ssize_t mayEncode = aper_put_length(po, -1, end - buf);
+		if(mayEncode < 0)
+			ASN__ENCODE_FAILED;
+		if(per_put_many_bits(po, buf, 8 * mayEncode))
+			ASN__ENCODE_FAILED;
+		buf += mayEncode;
+	}
+
+	ASN__ENCODED_OK(er);
+}
+
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+
+static intmax_t
+asn__integer_convert(const uint8_t *b, const uint8_t *end) {
+    uintmax_t value;
+
+    /* Perform the sign initialization */
+    /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */
+    if((*b >> 7)) {
+        value = (uintmax_t)(-1);
+    } else {
+        value = 0;
+    }
+
+    /* Conversion engine */
+    for(; b < end; b++) {
+        value = (value << 8) | *b;
+    }
+
+    return value;
+}
+
+int
+asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) {
+	uint8_t *b, *end;
+	size_t size;
+
+	/* Sanity checking */
+	if(!iptr || !iptr->buf || !lptr) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	/* Cache the begin/end of the buffer */
+	b = iptr->buf;	/* Start of the INTEGER buffer */
+	size = iptr->size;
+	end = b + size;	/* Where to stop */
+
+	if(size > sizeof(intmax_t)) {
+		uint8_t *end1 = end - 1;
+		/*
+		 * Slightly more advanced processing,
+		 * able to process INTEGERs with >sizeof(intmax_t) bytes
+		 * when the actual value is small, e.g. for intmax_t == int32_t
+		 * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t)
+		 */
+		/* Skip out the insignificant leading bytes */
+		for(; b < end1; b++) {
+			switch(*b) {
+				case 0x00: if((b[1] & 0x80) == 0) continue; break;
+				case 0xff: if((b[1] & 0x80) != 0) continue; break;
+			}
+			break;
+		}
+
+		size = end - b;
+		if(size > sizeof(intmax_t)) {
+			/* Still cannot fit the sizeof(intmax_t) */
+			errno = ERANGE;
+			return -1;
+		}
+	}
+
+	/* Shortcut processing of a corner case */
+	if(end == b) {
+		*lptr = 0;
+		return 0;
+	}
+
+	*lptr = asn__integer_convert(b, end);
+	return 0;
+}
+
+/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */
+int
+asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) {
+	uint8_t *b, *end;
+	uintmax_t value;
+	size_t size;
+
+	if(!iptr || !iptr->buf || !lptr) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	b = iptr->buf;
+	size = iptr->size;
+	end = b + size;
+
+	/* If all extra leading bytes are zeroes, ignore them */
+	for(; size > sizeof(value); b++, size--) {
+		if(*b) {
+			/* Value won't fit into uintmax_t */
+			errno = ERANGE;
+			return -1;
+		}
+	}
+
+	/* Conversion engine */
+	for(value = 0; b < end; b++)
+		value = (value << 8) | *b;
+
+	*lptr = value;
+	return 0;
+}
+
+int
+asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) {
+    uint8_t *buf;
+    uint8_t *end;
+    uint8_t *b;
+    int shr;
+
+    if(value <= ((~(uintmax_t)0) >> 1)) {
+        return asn_imax2INTEGER(st, value);
+    }
+
+    buf = (uint8_t *)MALLOC(1 + sizeof(value));
+    if(!buf) return -1;
+
+    end = buf + (sizeof(value) + 1);
+    buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */
+    for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++)
+        *b = (uint8_t)(value >> shr);
+
+    if(st->buf) FREEMEM(st->buf);
+    st->buf = buf;
+    st->size = 1 + sizeof(value);
+
+	return 0;
+}
+
+int
+asn_imax2INTEGER(INTEGER_t *st, intmax_t value) {
+	uint8_t *buf, *bp;
+	uint8_t *p;
+	uint8_t *pstart;
+	uint8_t *pend1;
+	int littleEndian = 1;	/* Run-time detection */
+	int add;
+
+	if(!st) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	buf = (uint8_t *)(long *)MALLOC(sizeof(value));
+	if(!buf) return -1;
+
+	if(*(char *)&littleEndian) {
+		pstart = (uint8_t *)&value + sizeof(value) - 1;
+		pend1 = (uint8_t *)&value;
+		add = -1;
+	} else {
+		pstart = (uint8_t *)&value;
+		pend1 = pstart + sizeof(value) - 1;
+		add = 1;
+	}
+
+	/*
+	 * If the contents octet consists of more than one octet,
+	 * then bits of the first octet and bit 8 of the second octet:
+	 * a) shall not all be ones; and
+	 * b) shall not all be zero.
+	 */
+	for(p = pstart; p != pend1; p += add) {
+		switch(*p) {
+		case 0x00: if((*(p+add) & 0x80) == 0)
+				continue;
+			break;
+		case 0xff: if((*(p+add) & 0x80))
+				continue;
+			break;
+		}
+		break;
+	}
+	/* Copy the integer body */
+	for(bp = buf, pend1 += add; p != pend1; p += add)
+		*bp++ = *p;
+
+	if(st->buf) FREEMEM(st->buf);
+	st->buf = buf;
+	st->size = bp - buf;
+
+	return 0;
+}
+
+int
+asn_INTEGER2long(const INTEGER_t *iptr, long *l) {
+    intmax_t v;
+    if(asn_INTEGER2imax(iptr, &v) == 0) {
+        if(v < LONG_MIN || v > LONG_MAX) {
+            errno = ERANGE;
+            return -1;
+        }
+        *l = v;
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+int
+asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) {
+    uintmax_t v;
+    if(asn_INTEGER2umax(iptr, &v) == 0) {
+        if(v > ULONG_MAX) {
+            errno = ERANGE;
+            return -1;
+        }
+        *l = v;
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+int
+asn_long2INTEGER(INTEGER_t *st, long value) {
+    return asn_imax2INTEGER(st, value);
+}
+
+int
+asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) {
+    return asn_imax2INTEGER(st, value);
+}
+
+
+int
+asn_uint642INTEGER(INTEGER_t *st, uint64_t value) {
+	uint8_t *buf;
+	uint8_t *end;
+	uint8_t *b;
+	int shr;
+
+	if(value <= INT64_MAX)
+		return asn_int642INTEGER(st, value);
+
+	buf = (uint8_t *)MALLOC(1 + sizeof(value));
+	if(!buf) return -1;
+
+	end = buf + (sizeof(value) + 1);
+	buf[0] = 0;
+	for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++)
+		*b = (uint8_t)(value >> shr);
+
+	if(st->buf) FREEMEM(st->buf);
+	st->buf = buf;
+	st->size = 1 + sizeof(value);
+
+	return 0;
+}
+
+int
+asn_int642INTEGER(INTEGER_t *st, int64_t value) {
+	uint8_t *buf, *bp;
+	uint8_t *p;
+	uint8_t *pstart;
+	uint8_t *pend1;
+	int littleEndian = 1;	/* Run-time detection */
+	int add;
+
+	if(!st) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	buf = (uint8_t *)MALLOC(sizeof(value));
+	if(!buf) return -1;
+
+	if(*(char *)&littleEndian) {
+		pstart = (uint8_t *)&value + sizeof(value) - 1;
+		pend1 = (uint8_t *)&value;
+		add = -1;
+	} else {
+		pstart = (uint8_t *)&value;
+		pend1 = pstart + sizeof(value) - 1;
+		add = 1;
+	}
+
+	/*
+	 * If the contents octet consists of more than one octet,
+	 * then bits of the first octet and bit 8 of the second octet:
+	 * a) shall not all be ones; and
+	 * b) shall not all be zero.
+	 */
+	for(p = pstart; p != pend1; p += add) {
+		switch(*p) {
+		case 0x00: if((*(p+add) & 0x80) == 0)
+				continue;
+			break;
+		case 0xff: if((*(p+add) & 0x80))
+				continue;
+			break;
+		}
+		break;
+	}
+	/* Copy the integer body */
+	for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
+		*bp++ = *p;
+
+	if(st->buf) FREEMEM(st->buf);
+	st->buf = buf;
+	st->size = bp - buf;
+
+	return 0;
+}
+
+/*
+ * Parse the number in the given string until the given *end position,
+ * returning the position after the last parsed character back using the
+ * same (*end) pointer.
+ * WARNING: This behavior is different from the standard strtol/strtoimax(3).
+ */
+enum asn_strtox_result_e
+asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) {
+	int sign = 1;
+	intmax_t value;
+
+#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1)
+    const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10;
+	intmax_t last_digit_max = ASN1_INTMAX_MAX % 10;
+#undef  ASN1_INTMAX_MAX
+
+	if(str >= *end) return ASN_STRTOX_ERROR_INVAL;
+
+	switch(*str) {
+	case '-':
+		last_digit_max++;
+		sign = -1;
+		/* FALL THROUGH */
+	case '+':
+		str++;
+		if(str >= *end) {
+			*end = str;
+			return ASN_STRTOX_EXPECT_MORE;
+		}
+	}
+
+	for(value = 0; str < (*end); str++) {
+		switch(*str) {
+		case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+		case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: {
+			int d = *str - '0';
+			if(value < upper_boundary) {
+				value = value * 10 + d;
+			} else if(value == upper_boundary) {
+				if(d <= last_digit_max) {
+					if(sign > 0) {
+						value = value * 10 + d;
+					} else {
+						sign = 1;
+						value = -value * 10 - d;
+					}
+				} else {
+					*end = str;
+					return ASN_STRTOX_ERROR_RANGE;
+				}
+			} else {
+				*end = str;
+				return ASN_STRTOX_ERROR_RANGE;
+			}
+		    }
+		    continue;
+		default:
+		    *end = str;
+		    *intp = sign * value;
+		    return ASN_STRTOX_EXTRA_DATA;
+		}
+	}
+
+	*end = str;
+	*intp = sign * value;
+	return ASN_STRTOX_OK;
+}
+
+/*
+ * Parse the number in the given string until the given *end position,
+ * returning the position after the last parsed character back using the
+ * same (*end) pointer.
+ * WARNING: This behavior is different from the standard strtoul/strtoumax(3).
+ */
+enum asn_strtox_result_e
+asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) {
+	uintmax_t value;
+
+#define ASN1_UINTMAX_MAX ((~(uintmax_t)0))
+    const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10;
+    uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10;
+#undef ASN1_UINTMAX_MAX
+
+    if(str >= *end) return ASN_STRTOX_ERROR_INVAL;
+
+	switch(*str) {
+	case '-':
+        return ASN_STRTOX_ERROR_INVAL;
+	case '+':
+		str++;
+		if(str >= *end) {
+			*end = str;
+			return ASN_STRTOX_EXPECT_MORE;
+		}
+	}
+
+	for(value = 0; str < (*end); str++) {
+		switch(*str) {
+		case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+		case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: {
+			unsigned int d = *str - '0';
+			if(value < upper_boundary) {
+				value = value * 10 + d;
+			} else if(value == upper_boundary) {
+				if(d <= last_digit_max) {
+                    value = value * 10 + d;
+                } else {
+					*end = str;
+					return ASN_STRTOX_ERROR_RANGE;
+				}
+			} else {
+				*end = str;
+				return ASN_STRTOX_ERROR_RANGE;
+			}
+		    }
+		    continue;
+		default:
+		    *end = str;
+		    *uintp = value;
+		    return ASN_STRTOX_EXTRA_DATA;
+		}
+	}
+
+	*end = str;
+	*uintp = value;
+	return ASN_STRTOX_OK;
+}
+
+enum asn_strtox_result_e
+asn_strtol_lim(const char *str, const char **end, long *lp) {
+    intmax_t value;
+    switch(asn_strtoimax_lim(str, end, &value)) {
+    case ASN_STRTOX_ERROR_RANGE:
+        return ASN_STRTOX_ERROR_RANGE;
+    case ASN_STRTOX_ERROR_INVAL:
+        return ASN_STRTOX_ERROR_INVAL;
+    case ASN_STRTOX_EXPECT_MORE:
+        return ASN_STRTOX_EXPECT_MORE;
+    case ASN_STRTOX_OK:
+        if(value >= LONG_MIN && value <= LONG_MAX) {
+            *lp = value;
+            return ASN_STRTOX_OK;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    case ASN_STRTOX_EXTRA_DATA:
+        if(value >= LONG_MIN && value <= LONG_MAX) {
+            *lp = value;
+            return ASN_STRTOX_EXTRA_DATA;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    }
+
+    assert(!"Unreachable");
+    return ASN_STRTOX_ERROR_INVAL;
+}
+
+enum asn_strtox_result_e
+asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) {
+    uintmax_t value;
+    switch(asn_strtoumax_lim(str, end, &value)) {
+    case ASN_STRTOX_ERROR_RANGE:
+        return ASN_STRTOX_ERROR_RANGE;
+    case ASN_STRTOX_ERROR_INVAL:
+        return ASN_STRTOX_ERROR_INVAL;
+    case ASN_STRTOX_EXPECT_MORE:
+        return ASN_STRTOX_EXPECT_MORE;
+    case ASN_STRTOX_OK:
+        if(value <= ULONG_MAX) {
+            *ulp = value;
+            return ASN_STRTOX_OK;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    case ASN_STRTOX_EXTRA_DATA:
+        if(value <= ULONG_MAX) {
+            *ulp = value;
+            return ASN_STRTOX_EXTRA_DATA;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    }
+
+    assert(!"Unreachable");
+    return ASN_STRTOX_ERROR_INVAL;
+}
+
+int
+INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                     const void *bptr) {
+    const INTEGER_t *a = aptr;
+    const INTEGER_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        if(a->size && b->size) {
+            int sign_a = (a->buf[0] & 0x80) ? -1 : 1;
+            int sign_b = (b->buf[0] & 0x80) ? -1 : 1;
+
+            if(sign_a < sign_b) return -1;
+            if(sign_a > sign_b) return 1;
+
+            /* The shortest integer wins, unless comparing negatives */
+            if(a->size < b->size) {
+                return -1 * sign_a;
+            } else if(a->size > b->size) {
+                return 1 * sign_b;
+            }
+
+            return sign_a * memcmp(a->buf, b->buf, a->size);
+        } else if(a->size) {
+            int sign = (a->buf[0] & 0x80) ? -1 : 1;
+            return (1) * sign;
+        } else if(b->size) {
+            int sign = (a->buf[0] & 0x80) ? -1 : 1;
+            return (-1) * sign;
+        } else {
+            return 0;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+
+}
+
+asn_random_fill_result_t
+INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constraints,
+                    size_t max_length) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    INTEGER_t *st = *sptr;
+    const asn_INTEGER_enum_map_t *emap;
+    size_t emap_len;
+    intmax_t value;
+    int find_inside_map;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (INTEGER_t *)CALLOC(1, sizeof(*st));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(specs) {
+        emap = specs->value2enum;
+        emap_len = specs->map_count;
+        if(specs->strict_enumeration) {
+            find_inside_map = emap_len > 0;
+        } else {
+            find_inside_map = emap_len ? asn_random_between(0, 1) : 0;
+        }
+    } else {
+        emap = 0;
+        emap_len = 0;
+        find_inside_map = 0;
+    }
+
+    if(find_inside_map) {
+        assert(emap_len > 0);
+        value = emap[asn_random_between(0, emap_len - 1)].nat_value;
+    } else {
+        const asn_per_constraints_t *ct;
+
+        static const long variants[] = {
+            -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384,
+            -16383, -257,   -256,   -255,   -254,   -129,   -128,   -127,
+            -126,   -1,     0,      1,      126,    127,    128,    129,
+            254,    255,    256,    257,    16383,  16384,  16385,  32767,
+            32768,  32769,  65534,  65535,  65536,  65537};
+        if(specs && specs->field_unsigned) {
+            assert(variants[18] == 0);
+            value = variants[asn_random_between(
+                18, sizeof(variants) / sizeof(variants[0]) - 1)];
+        } else {
+            value = variants[asn_random_between(
+                0, sizeof(variants) / sizeof(variants[0]) - 1)];
+        }
+
+        if(!constraints) constraints = &td->encoding_constraints;
+        ct = constraints ? constraints->per_constraints : 0;
+        if(ct && (ct->value.flags & APC_CONSTRAINED)) {
+            if(value < ct->value.lower_bound || value > ct->value.upper_bound) {
+                value = asn_random_between(ct->value.lower_bound,
+                                           ct->value.upper_bound);
+            }
+        }
+    }
+
+    if(asn_imax2INTEGER(st, value)) {
+        if(st == *sptr) {
+            ASN_STRUCT_RESET(*td, st);
+        } else {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    } else {
+        *sptr = st;
+        result_ok.length = st->size;
+        return result_ok;
+    }
+}
diff --git a/asn1c_defs/INTEGER.h b/asn1c_defs/INTEGER.h
new file mode 100644
index 0000000..f776c07
--- /dev/null
+++ b/asn1c_defs/INTEGER.h
@@ -0,0 +1,108 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_INTEGER_H_
+#define	_INTEGER_H_
+
+#include <asn_application.h>
+#include <asn_codecs_prim.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ASN__PRIMITIVE_TYPE_t INTEGER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_INTEGER;
+extern asn_TYPE_operation_t asn_OP_INTEGER;
+
+/* Map with <tag> to integer value association */
+typedef struct asn_INTEGER_enum_map_s {
+	long		 nat_value;	/* associated native integer value */
+	size_t		 enum_len;	/* strlen("tag") */
+	const char	*enum_name;	/* "tag" */
+} asn_INTEGER_enum_map_t;
+
+/* This type describes an enumeration for INTEGER and ENUMERATED types */
+typedef struct asn_INTEGER_specifics_s {
+	const asn_INTEGER_enum_map_t *value2enum;	/* N -> "tag"; sorted by N */
+	const unsigned int *enum2value;		/* "tag" => N; sorted by tag */
+	int map_count;				/* Elements in either map */
+	int extension;				/* This map is extensible */
+	int strict_enumeration;			/* Enumeration set is fixed */
+	int field_width;			/* Size of native integer */
+	int field_unsigned;			/* Signed=0, unsigned=1 */
+} asn_INTEGER_specifics_t;
+
+#define INTEGER_free    ASN__PRIMITIVE_TYPE_free
+#define INTEGER_decode_ber	ber_decode_primitive
+#define INTEGER_constraint	asn_generic_no_constraint
+asn_struct_print_f INTEGER_print;
+asn_struct_compare_f INTEGER_compare;
+der_type_encoder_f INTEGER_encode_der;
+xer_type_decoder_f INTEGER_decode_xer;
+xer_type_encoder_f INTEGER_encode_xer;
+oer_type_decoder_f INTEGER_decode_oer;
+oer_type_encoder_f INTEGER_encode_oer;
+per_type_decoder_f INTEGER_decode_uper;
+per_type_encoder_f INTEGER_encode_uper;
+per_type_decoder_f INTEGER_decode_aper;
+per_type_encoder_f INTEGER_encode_aper;
+asn_random_fill_f  INTEGER_random_fill;
+
+/***********************************
+ * Some handy conversion routines. *
+ ***********************************/
+
+/*
+ * Natiwe size-independent conversion of native integers to/from INTEGER.
+ * (l_size) is in bytes.
+ * Returns 0 if it was possible to convert, -1 otherwise.
+ * -1/EINVAL: Mandatory argument missing
+ * -1/ERANGE: Value encoded is out of range for long representation
+ * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()).
+ */
+int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l);
+int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l);
+int asn_imax2INTEGER(INTEGER_t *i, intmax_t l);
+int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l);
+
+/*
+ * Size-specific conversion helpers.
+ */
+int asn_INTEGER2long(const INTEGER_t *i, long *l);
+int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l);
+int asn_long2INTEGER(INTEGER_t *i, long l);
+int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l);
+int asn_int642INTEGER(INTEGER_t *i, int64_t l);
+int asn_uint642INTEGER(INTEGER_t *i, uint64_t l);
+
+/* A version of strtol/strtoimax(3) with nicer error reporting. */
+enum asn_strtox_result_e {
+    ASN_STRTOX_ERROR_RANGE = -3,  /* Input outside of supported numeric range */
+    ASN_STRTOX_ERROR_INVAL = -2,  /* Invalid data encountered (e.g., "+-") */
+    ASN_STRTOX_EXPECT_MORE = -1,  /* More data expected (e.g. "+") */
+    ASN_STRTOX_OK          =  0,  /* Conversion succeded, number ends at (*end) */
+    ASN_STRTOX_EXTRA_DATA  =  1   /* Conversion succeded, but the string has extra stuff */
+};
+enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end,
+                                        long *l);
+enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end,
+                                         unsigned long *l);
+enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end,
+                                           intmax_t *l);
+enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end,
+                                           uintmax_t *l);
+
+/*
+ * Convert the integer value into the corresponding enumeration map entry.
+ */
+const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(
+    const asn_INTEGER_specifics_t *specs, long value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _INTEGER_H_ */
diff --git a/asn1c_defs/NULL.c b/asn1c_defs/NULL.c
new file mode 100644
index 0000000..4a2914f
--- /dev/null
+++ b/asn1c_defs/NULL.c
@@ -0,0 +1,299 @@
+/*-
+ * Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <NULL.h>
+#include <BOOLEAN.h>	/* Implemented in terms of BOOLEAN type */
+
+/*
+ * NULL basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NULL_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (5 << 2))
+};
+asn_TYPE_operation_t asn_OP_NULL = {
+	BOOLEAN_free,
+	NULL_print,
+	NULL_compare,
+	BOOLEAN_decode_ber,	/* Implemented in terms of BOOLEAN */
+	NULL_encode_der,	/* Special handling of DER encoding */
+	NULL_decode_xer,
+	NULL_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	NULL_decode_oer,
+	NULL_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	NULL_decode_uper,	/* Unaligned PER decoder */
+	NULL_encode_uper,	/* Unaligned PER encoder */
+	NULL_decode_aper,	/* Aligned PER decoder */
+	NULL_encode_aper,	/* Aligned PER encoder */
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	NULL_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NULL = {
+	"NULL",
+	"NULL",
+	&asn_OP_NULL,
+	asn_DEF_NULL_tags,
+	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+	asn_DEF_NULL_tags,	/* Same as above */
+	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+asn_enc_rval_t
+NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode,
+                ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
+	asn_enc_rval_t erval = {0,0,0};
+
+	erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key);
+	if(erval.encoded == -1) {
+		erval.failed_type = td;
+		erval.structure_ptr = ptr;
+	}
+
+	ASN__ENCODED_OK(erval);
+}
+
+asn_enc_rval_t
+NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                void *app_key) {
+	asn_enc_rval_t er = {0,0,0};
+
+	(void)td;
+	(void)sptr;
+	(void)ilevel;
+	(void)flags;
+	(void)cb;
+	(void)app_key;
+
+	/* XMLNullValue is empty */
+	er.encoded = 0;
+	ASN__ENCODED_OK(er);
+}
+
+
+static enum xer_pbd_rval
+NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                      const void *chunk_buf, size_t chunk_size) {
+    (void)td;
+	(void)sptr;
+	(void)chunk_buf;    /* Going to be empty according to the rules below. */
+
+	/*
+	 * There must be no content in self-terminating <NULL/> tag.
+	 */
+	if(chunk_size)
+		return XPBD_BROKEN_ENCODING;
+	else
+		return XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td, void **sptr,
+                const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+		sptr, sizeof(NULL_t), opt_mname, buf_ptr, size,
+		NULL__xer_body_decode);
+}
+
+int
+NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) {
+    (void)td;
+    (void)a;
+    (void)b;
+    return 0;
+}
+
+int
+NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+           asn_app_consume_bytes_f *cb, void *app_key) {
+    (void)td;	/* Unused argument */
+	(void)ilevel;	/* Unused argument */
+
+	if(sptr) {
+		return (cb("<present>", 9, app_key) < 0) ? -1 : 0;
+	} else {
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+	}
+}
+
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+asn_dec_rval_t
+NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, void **sptr,
+                const void *ptr, size_t size) {
+    asn_dec_rval_t rv = {RC_OK, 0};
+    (void)opt_codec_ctx;
+    (void)td;
+    (void)constraints;
+    (void)ptr;
+    (void)size;
+
+    if(!*sptr) {
+        *sptr = MALLOC(sizeof(NULL_t));
+        if(*sptr) {
+            *(NULL_t *)*sptr = 0;
+        } else {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    return rv;
+}
+
+asn_enc_rval_t
+NULL_encode_oer(const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, const void *sptr,
+                asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+
+    (void)td;
+    (void)sptr;
+    (void)constraints;
+    (void)cb;
+    (void)app_key;
+
+    er.encoded = 0; /* Encoding in 0 bytes. */
+
+    ASN__ENCODED_OK(er);
+}
+
+#endif /* ASN_DISABLE_OER_SUPPORT */
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr,
+                 asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+
+	(void)opt_codec_ctx;
+	(void)td;
+	(void)constraints;
+	(void)pd;
+
+	if(!*sptr) {
+		*sptr = MALLOC(sizeof(NULL_t));
+		if(*sptr) {
+			*(NULL_t *)*sptr = 0;
+		} else {
+			ASN__DECODE_FAILED;
+		}
+	}
+
+	/*
+	 * NULL type does not have content octets.
+	 */
+
+	rv.code = RC_OK;
+	rv.consumed = 0;
+	return rv;
+}
+
+asn_enc_rval_t
+NULL_encode_uper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, const void *sptr,
+                 asn_per_outp_t *po) {
+	asn_enc_rval_t er = {0,0,0};
+
+	(void)td;
+	(void)constraints;
+	(void)sptr;
+	(void)po;
+
+	er.encoded = 0;
+	ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	asn_dec_rval_t rv = {RC_OK, 0};
+
+	(void)opt_codec_ctx;
+	(void)td;
+	(void)constraints;
+	(void)pd;
+
+	if(!*sptr) {
+		*sptr = MALLOC(sizeof(NULL_t));
+		if(*sptr) {
+			*(NULL_t *)*sptr = 0;
+		} else {
+			ASN__DECODE_FAILED;
+		}
+	}
+
+	/*
+	 * NULL type does not have content octets.
+	 */
+
+	rv.code = RC_OK;
+	rv.consumed = 0;
+	return rv;
+}
+
+
+asn_enc_rval_t
+NULL_encode_aper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints,
+                 const void *sptr, asn_per_outp_t *po) {
+	asn_enc_rval_t er = {0,0,0};
+
+	(void)td;
+	(void)constraints;
+	(void)sptr;
+	(void)po;
+
+	er.encoded = 0;
+	ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+asn_random_fill_result_t
+NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constr,
+                    size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    NULL_t *st = *sptr;
+
+    (void)td;
+    (void)constr;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    return result_ok;
+}
+
diff --git a/asn1c_defs/NULL.h b/asn1c_defs/NULL.h
new file mode 100644
index 0000000..802d12c
--- /dev/null
+++ b/asn1c_defs/NULL.h
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_TYPE_NULL_H
+#define	ASN_TYPE_NULL_H
+
+#include <asn_application.h>
+#include <BOOLEAN.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The value of the NULL type is meaningless: see BOOLEAN if you want to
+ * carry true/false semantics.
+ */
+typedef int NULL_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_NULL;
+extern asn_TYPE_operation_t asn_OP_NULL;
+
+asn_struct_print_f NULL_print;
+asn_struct_compare_f NULL_compare;
+der_type_encoder_f NULL_encode_der;
+xer_type_decoder_f NULL_decode_xer;
+xer_type_encoder_f NULL_encode_xer;
+oer_type_decoder_f NULL_decode_oer;
+oer_type_encoder_f NULL_encode_oer;
+per_type_decoder_f NULL_decode_uper;
+per_type_encoder_f NULL_encode_uper;
+per_type_decoder_f NULL_decode_aper;
+per_type_encoder_f NULL_encode_aper;
+asn_random_fill_f  NULL_random_fill;
+
+#define NULL_free	BOOLEAN_free
+#define NULL_decode_ber	BOOLEAN_decode_ber
+#define NULL_constraint	asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* NULL_H */
diff --git a/asn1c_defs/NativeEnumerated.c b/asn1c_defs/NativeEnumerated.c
new file mode 100644
index 0000000..800da97
--- /dev/null
+++ b/asn1c_defs/NativeEnumerated.c
@@ -0,0 +1,367 @@
+/*-
+ * Copyright (c) 2004, 2007 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Read the NativeInteger.h for the explanation wrt. differences between
+ * INTEGER and NativeInteger.
+ * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
+ * implementation deals with the standard (machine-specific) representation
+ * of them instead of using the platform-independent buffer.
+ */
+#include <asn_internal.h>
+#include <NativeEnumerated.h>
+
+/*
+ * NativeEnumerated basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_operation_t asn_OP_NativeEnumerated = {
+	NativeInteger_free,
+	NativeInteger_print,
+	NativeInteger_compare,
+	NativeInteger_decode_ber,
+	NativeInteger_encode_der,
+	NativeInteger_decode_xer,
+	NativeEnumerated_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	NativeEnumerated_decode_oer,
+	NativeEnumerated_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	NativeEnumerated_decode_uper,
+	NativeEnumerated_encode_uper,
+	NativeEnumerated_decode_aper,
+	NativeEnumerated_encode_aper,
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	NativeEnumerated_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = {
+	"ENUMERATED",			/* The ASN.1 type is still ENUMERATED */
+	"ENUMERATED",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_NativeEnumerated_tags,
+	sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+	asn_DEF_NativeEnumerated_tags,	/* Same as above */
+	sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+asn_enc_rval_t
+NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                            int ilevel, enum xer_encoder_flags_e flags,
+                            asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_enc_rval_t er = {0,0,0};
+    const long *native = (const long *)sptr;
+    const asn_INTEGER_enum_map_t *el;
+
+    (void)ilevel;
+    (void)flags;
+
+    if(!native) ASN__ENCODE_FAILED;
+
+    el = INTEGER_map_value2enum(specs, *native);
+    if(el) {
+        er.encoded =
+            asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name);
+        if(er.encoded < 0) ASN__ENCODE_FAILED;
+        ASN__ENCODED_OK(er);
+    } else {
+        ASN_DEBUG(
+            "ASN.1 forbids dealing with "
+            "unknown value of ENUMERATED type");
+        ASN__ENCODE_FAILED;
+    }
+}
+
+asn_dec_rval_t
+NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             void **sptr, asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs = td->specifics;
+    asn_dec_rval_t rval = { RC_OK, 0 };
+	long *native = (long *)*sptr;
+	const asn_per_constraint_t *ct;
+	long value;
+
+	(void)opt_codec_ctx;
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ASN__DECODE_FAILED;	/* Mandatory! */
+	if(!specs) ASN__DECODE_FAILED;
+
+	if(!native) {
+		native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+		if(!native) ASN__DECODE_FAILED;
+	}
+
+	ASN_DEBUG("Decoding %s as NativeEnumerated", td->name);
+
+	if(ct->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) ASN__DECODE_STARVED;
+		if(inext) ct = 0;
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		value = per_get_few_bits(pd, ct->range_bits);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value >= (specs->extension
+			? specs->extension - 1 : specs->map_count))
+			ASN__DECODE_FAILED;
+	} else {
+		if(!specs->extension)
+			ASN__DECODE_FAILED;
+		/*
+		 * X.691, #10.6: normally small non-negative whole number;
+		 */
+		value = uper_get_nsnnwn(pd);
+		if(value < 0) ASN__DECODE_STARVED;
+		value += specs->extension - 1;
+		if(value >= specs->map_count)
+			ASN__DECODE_FAILED;
+	}
+
+	*native = specs->value2enum[value].nat_value;
+	ASN_DEBUG("Decoded %s = %ld", td->name, *native);
+
+	return rval;
+}
+
+static int
+NativeEnumerated__compar_value2enum(const void *ap, const void *bp) {
+	const asn_INTEGER_enum_map_t *a = ap;
+	const asn_INTEGER_enum_map_t *b = bp;
+	if(a->nat_value == b->nat_value)
+		return 0;
+	if(a->nat_value < b->nat_value)
+		return -1;
+	return 1;
+}
+
+asn_enc_rval_t
+NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             const void *sptr, asn_per_outp_t *po) {
+	const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	long native, value;
+	const asn_per_constraint_t *ct;
+	int inext = 0;
+	asn_INTEGER_enum_map_t key;
+	const asn_INTEGER_enum_map_t *kf;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+	if(!specs) ASN__ENCODE_FAILED;
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ASN__ENCODE_FAILED;	/* Mandatory! */
+
+	ASN_DEBUG("Encoding %s as NativeEnumerated", td->name);
+
+	er.encoded = 0;
+
+	native = *(const long *)sptr;
+
+	key.nat_value = native;
+	kf = bsearch(&key, specs->value2enum, specs->map_count,
+		sizeof(key), NativeEnumerated__compar_value2enum);
+	if(!kf) {
+		ASN_DEBUG("No element corresponds to %ld", native);
+		ASN__ENCODE_FAILED;
+	}
+	value = kf - specs->value2enum;
+
+	if(ct->range_bits >= 0) {
+		int cmpWith = specs->extension
+				? specs->extension - 1 : specs->map_count;
+		if(value >= cmpWith)
+			inext = 1;
+	}
+	if(ct->flags & APC_EXTENSIBLE) {
+		if(per_put_few_bits(po, inext, 1))
+			ASN__ENCODE_FAILED;
+		if(inext) ct = 0;
+	} else if(inext) {
+		ASN__ENCODE_FAILED;
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		if(per_put_few_bits(po, value, ct->range_bits))
+			ASN__ENCODE_FAILED;
+		ASN__ENCODED_OK(er);
+	}
+
+	if(!specs->extension)
+		ASN__ENCODE_FAILED;
+
+	/*
+	 * X.691, #10.6: normally small non-negative whole number;
+	 */
+	ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
+		value, specs->extension, inext,
+		value - (inext ? (specs->extension - 1) : 0));
+	if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             void **sptr, asn_per_data_t *pd) {
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_dec_rval_t rval = { RC_OK, 0 };
+	long *native = (long *)*sptr;
+	const asn_per_constraint_t *ct;
+	long value;
+
+	(void)opt_codec_ctx;
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ASN__DECODE_FAILED;	/* Mandatory! */
+	if(!specs) ASN__DECODE_FAILED;
+
+	if(!native) {
+		native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+		if(!native) ASN__DECODE_FAILED;
+	}
+
+	ASN_DEBUG("Decoding %s as NativeEnumerated", td->name);
+
+	if(ct->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) ASN__DECODE_STARVED;
+		if(inext) ct = 0;
+	}
+
+	/* Deal with APER padding */
+	if(ct && ct->upper_bound >= 255) {
+		int padding = 0;
+		padding = (8 - (pd->moved % 8)) % 8;
+		ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding);
+		ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound);
+		if(padding > 0)
+			per_get_few_bits(pd, padding);
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		value = per_get_few_bits(pd, ct->range_bits);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value >= (specs->extension
+		             ? specs->extension - 1 : specs->map_count))
+			ASN__DECODE_FAILED;
+	} else {
+		if(!specs->extension)
+			ASN__DECODE_FAILED;
+		/*
+		 * X.691, #10.6: normally small non-negative whole number;
+		 */
+		value = uper_get_nsnnwn(pd);
+		if(value < 0) ASN__DECODE_STARVED;
+		value += specs->extension - 1;
+		if(value >= specs->map_count)
+			ASN__DECODE_FAILED;
+	}
+
+	*native = specs->value2enum[value].nat_value;
+	ASN_DEBUG("Decoded %s = %ld", td->name, *native);
+
+	return rval;
+}
+
+asn_enc_rval_t
+NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             const void *sptr, asn_per_outp_t *po) {
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	long native, value;
+	const asn_per_constraint_t *ct;
+	int inext = 0;
+	asn_INTEGER_enum_map_t key;
+	asn_INTEGER_enum_map_t *kf;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+	if(!specs) ASN__ENCODE_FAILED;
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ASN__ENCODE_FAILED;        /* Mandatory! */
+
+	ASN_DEBUG("Encoding %s as NativeEnumerated", td->name);
+
+	er.encoded = 0;
+
+	native = *(const long *)sptr;
+	if(native < 0) ASN__ENCODE_FAILED;
+
+	key.nat_value = native;
+	kf = bsearch(&key, specs->value2enum, specs->map_count,
+	             sizeof(key), NativeEnumerated__compar_value2enum);
+	if(!kf) {
+		ASN_DEBUG("No element corresponds to %ld", native);
+		ASN__ENCODE_FAILED;
+	}
+	value = kf - specs->value2enum;
+
+	if(ct->range_bits >= 0) {
+		int cmpWith = specs->extension
+		              ? specs->extension - 1 : specs->map_count;
+		if(value >= cmpWith)
+			inext = 1;
+	}
+	if(ct->flags & APC_EXTENSIBLE) {
+		if(per_put_few_bits(po, inext, 1))
+			ASN__ENCODE_FAILED;
+		if(inext) ct = 0;
+	} else if(inext) {
+		ASN__ENCODE_FAILED;
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		if(per_put_few_bits(po, value, ct->range_bits))
+			ASN__ENCODE_FAILED;
+		ASN__ENCODED_OK(er);
+	}
+
+	if(!specs->extension)
+		ASN__ENCODE_FAILED;
+
+	/*
+	 * X.691, #10.6: normally small non-negative whole number;
+	 */
+	ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
+	          value, specs->extension, inext,
+	          value - (inext ? (specs->extension - 1) : 0));
+	if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
diff --git a/asn1c_defs/NativeEnumerated.h b/asn1c_defs/NativeEnumerated.h
new file mode 100644
index 0000000..459f0e6
--- /dev/null
+++ b/asn1c_defs/NativeEnumerated.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard ENUMERATED in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeEnumerated_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef	_NativeEnumerated_H_
+#define	_NativeEnumerated_H_
+
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated;
+extern asn_TYPE_operation_t asn_OP_NativeEnumerated;
+
+xer_type_encoder_f NativeEnumerated_encode_xer;
+oer_type_decoder_f NativeEnumerated_decode_oer;
+oer_type_encoder_f NativeEnumerated_encode_oer;
+per_type_decoder_f NativeEnumerated_decode_uper;
+per_type_encoder_f NativeEnumerated_encode_uper;
+per_type_decoder_f NativeEnumerated_decode_aper;
+per_type_encoder_f NativeEnumerated_encode_aper;
+
+#define NativeEnumerated_free       NativeInteger_free
+#define NativeEnumerated_print      NativeInteger_print
+#define NativeEnumerated_compare    NativeInteger_compare
+#define NativeEnumerated_random_fill NativeInteger_random_fill
+#define NativeEnumerated_constraint asn_generic_no_constraint
+#define NativeEnumerated_decode_ber NativeInteger_decode_ber
+#define NativeEnumerated_encode_der NativeInteger_encode_der
+#define NativeEnumerated_decode_xer NativeInteger_decode_xer
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _NativeEnumerated_H_ */
diff --git a/asn1c_defs/NativeInteger.c b/asn1c_defs/NativeInteger.c
new file mode 100644
index 0000000..316e872
--- /dev/null
+++ b/asn1c_defs/NativeInteger.c
@@ -0,0 +1,550 @@
+/*-
+ * Copyright (c) 2004, 2005, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Read the NativeInteger.h for the explanation wrt. differences between
+ * INTEGER and NativeInteger.
+ * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
+ * implementation deals with the standard (machine-specific) representation
+ * of them instead of using the platform-independent buffer.
+ */
+#include <asn_internal.h>
+#include <NativeInteger.h>
+
+/*
+ * NativeInteger basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_operation_t asn_OP_NativeInteger = {
+	NativeInteger_free,
+	NativeInteger_print,
+	NativeInteger_compare,
+	NativeInteger_decode_ber,
+	NativeInteger_encode_der,
+	NativeInteger_decode_xer,
+	NativeInteger_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	NativeInteger_decode_oer,	/* OER decoder */
+	NativeInteger_encode_oer,	/* Canonical OER encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	NativeInteger_decode_uper,	/* Unaligned PER decoder */
+	NativeInteger_encode_uper,	/* Unaligned PER encoder */
+	NativeInteger_decode_aper,	/* Aligned PER decoder */
+	NativeInteger_encode_aper,	/* Aligned PER encoder */
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	NativeInteger_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NativeInteger = {
+	"INTEGER",			/* The ASN.1 type is still INTEGER */
+	"INTEGER",
+	&asn_OP_NativeInteger,
+	asn_DEF_NativeInteger_tags,
+	sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+	asn_DEF_NativeInteger_tags,	/* Same as above */
+	sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+/*
+ * Decode INTEGER type.
+ */
+asn_dec_rval_t
+NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td, void **nint_ptr,
+                         const void *buf_ptr, size_t size, int tag_mode) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    long *native = (long *)*nint_ptr;
+	asn_dec_rval_t rval;
+	ber_tlv_len_t length;
+
+	/*
+	 * If the structure is not there, allocate it.
+	 */
+	if(native == NULL) {
+		native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
+		if(native == NULL) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+			return rval;
+		}
+	}
+
+	ASN_DEBUG("Decoding %s as INTEGER (tm=%d)",
+		td->name, tag_mode);
+
+	/*
+	 * Check tags.
+	 */
+	rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+			tag_mode, 0, &length, 0);
+	if(rval.code != RC_OK)
+		return rval;
+
+	ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
+
+	/*
+	 * Make sure we have this length.
+	 */
+	buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+	size -= rval.consumed;
+	if(length > (ber_tlv_len_t)size) {
+		rval.code = RC_WMORE;
+		rval.consumed = 0;
+		return rval;
+	}
+
+	/*
+	 * ASN.1 encoded INTEGER: buf_ptr, length
+	 * Fill the native, at the same time checking for overflow.
+	 * If overflow occured, return with RC_FAIL.
+	 */
+	{
+		INTEGER_t tmp;
+		union {
+			const void *constbuf;
+			void *nonconstbuf;
+		} unconst_buf;
+		long l;
+
+		unconst_buf.constbuf = buf_ptr;
+		tmp.buf = (uint8_t *)unconst_buf.nonconstbuf;
+		tmp.size = length;
+
+		if((specs&&specs->field_unsigned)
+			? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */
+			: asn_INTEGER2long(&tmp, &l)) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+			return rval;
+		}
+
+		*native = l;
+	}
+
+	rval.code = RC_OK;
+	rval.consumed += length;
+
+	ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)",
+		(long)rval.consumed, (long)length, td->name, (long)*native);
+
+	return rval;
+}
+
+/*
+ * Encode the NativeInteger using the standard INTEGER type DER encoder.
+ */
+asn_enc_rval_t
+NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr,
+                         int tag_mode, ber_tlv_tag_t tag,
+                         asn_app_consume_bytes_f *cb, void *app_key) {
+	unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */
+	asn_enc_rval_t erval = {0,0,0};
+	INTEGER_t tmp;
+
+#ifdef	WORDS_BIGENDIAN		/* Opportunistic optimization */
+
+	tmp.buf = (uint8_t *)&native;
+	tmp.size = sizeof(native);
+
+#else	/* Works even if WORDS_BIGENDIAN is not set where should've been */
+	uint8_t buf[sizeof(native)];
+	uint8_t *p;
+
+	/* Prepare a fake INTEGER */
+	for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8)
+		*p = (uint8_t)native;
+
+	tmp.buf = buf;
+	tmp.size = sizeof(buf);
+#endif	/* WORDS_BIGENDIAN */
+	
+	/* Encode fake INTEGER */
+	erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key);
+    if(erval.structure_ptr == &tmp) {
+        erval.structure_ptr = ptr;
+    }
+	return erval;
+}
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+asn_dec_rval_t
+NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td, void **sptr,
+                         const char *opt_mname, const void *buf_ptr,
+                         size_t size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval;
+	INTEGER_t st;
+	void *st_ptr = (void *)&st;
+	long *native = (long *)*sptr;
+
+	if(!native) {
+		native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+		if(!native) ASN__DECODE_FAILED;
+	}
+
+	memset(&st, 0, sizeof(st));
+	rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, 
+		opt_mname, buf_ptr, size);
+	if(rval.code == RC_OK) {
+		long l;
+		if((specs&&specs->field_unsigned)
+			? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */
+			: asn_INTEGER2long(&st, &l)) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+		} else {
+			*native = l;
+		}
+	} else {
+		/*
+		 * Cannot restart from the middle;
+		 * there is no place to save state in the native type.
+		 * Request a continuation from the very beginning.
+		 */
+		rval.consumed = 0;
+	}
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st);
+	return rval;
+}
+
+
+asn_enc_rval_t
+NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                         int ilevel, enum xer_encoder_flags_e flags,
+                         asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    char scratch[32];	/* Enough for 64-bit int */
+	asn_enc_rval_t er = {0,0,0};
+	const long *native = (const long *)sptr;
+
+	(void)ilevel;
+	(void)flags;
+
+	if(!native) ASN__ENCODE_FAILED;
+
+	er.encoded = snprintf(scratch, sizeof(scratch),
+			(specs && specs->field_unsigned)
+			? "%lu" : "%ld", *native);
+	if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch)
+		|| cb(scratch, er.encoded, app_key) < 0)
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr,
+                          asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval;
+	long *native = (long *)*sptr;
+	INTEGER_t tmpint;
+	void *tmpintptr = &tmpint;
+
+	(void)opt_codec_ctx;
+	ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name);
+
+	if(!native) {
+		native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+		if(!native) ASN__DECODE_FAILED;
+	}
+
+	memset(&tmpint, 0, sizeof tmpint);
+	rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints,
+				   &tmpintptr, pd);
+	if(rval.code == RC_OK) {
+		if((specs&&specs->field_unsigned)
+			? asn_INTEGER2ulong(&tmpint, (unsigned long *)native)
+			: asn_INTEGER2long(&tmpint, native))
+			rval.code = RC_FAIL;
+		else
+			ASN_DEBUG("NativeInteger %s got value %ld",
+				td->name, *native);
+	}
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+
+	return rval;
+}
+
+asn_enc_rval_t
+NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, asn_per_outp_t *po) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_enc_rval_t er = {0,0,0};
+	long native;
+	INTEGER_t tmpint;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+    native = *(const long *)sptr;
+
+    ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native);
+
+	memset(&tmpint, 0, sizeof(tmpint));
+	if((specs&&specs->field_unsigned)
+		? asn_ulong2INTEGER(&tmpint, native)
+		: asn_long2INTEGER(&tmpint, native))
+		ASN__ENCODE_FAILED;
+	er = INTEGER_encode_uper(td, constraints, &tmpint, po);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+	return er;
+}
+
+asn_dec_rval_t
+NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_dec_rval_t rval;
+	long *native = (long *)*sptr;
+	INTEGER_t tmpint;
+	void *tmpintptr = &tmpint;
+
+	(void)opt_codec_ctx;
+	ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name);
+
+	if(!native) {
+		native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+		if(!native) ASN__DECODE_FAILED;
+	}
+
+	memset(&tmpint, 0, sizeof tmpint);
+	rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints,
+	                           &tmpintptr, pd);
+	if(rval.code == RC_OK) {
+		if((specs&&specs->field_unsigned)
+		        ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native)
+		        : asn_INTEGER2long(&tmpint, native))
+			rval.code = RC_FAIL;
+		else
+			ASN_DEBUG("NativeInteger %s got value %ld",
+			          td->name, *native);
+	}
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+
+	return rval;
+}
+
+asn_enc_rval_t
+NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, asn_per_outp_t *po) {
+
+	const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	long native;
+	INTEGER_t tmpint;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+	native = *(const long *)sptr;
+
+	ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native);
+
+	memset(&tmpint, 0, sizeof(tmpint));
+	if((specs&&specs->field_unsigned)
+	        ? asn_ulong2INTEGER(&tmpint, (unsigned long)native)
+	        : asn_long2INTEGER(&tmpint, native))
+		ASN__ENCODE_FAILED;
+	er = INTEGER_encode_aper(td, constraints, &tmpint, po);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+	return er;
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+/*
+ * INTEGER specific human-readable output.
+ */
+int
+NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    const long *native = (const long *)sptr;
+    char scratch[32]; /* Enough for 64-bit int */
+    int ret;
+
+    (void)td;       /* Unused argument */
+    (void)ilevel;   /* Unused argument */
+
+    if(native) {
+        long value = *native;
+        ret = snprintf(scratch, sizeof(scratch),
+                       (specs && specs->field_unsigned) ? "%lu" : "%ld", value);
+        assert(ret > 0 && (size_t)ret < sizeof(scratch));
+        if(cb(scratch, ret, app_key) < 0) return -1;
+        if(specs && (value >= 0 || !specs->field_unsigned)) {
+            const asn_INTEGER_enum_map_t *el =
+                INTEGER_map_value2enum(specs, value);
+            if(el) {
+                if(cb(" (", 2, app_key) < 0) return -1;
+                if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1;
+                if(cb(")", 1, app_key) < 0) return -1;
+            }
+        }
+        return 0;
+	} else {
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+	}
+}
+
+void
+NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr,
+                   enum asn_struct_free_method method) {
+    if(!td || !ptr)
+		return;
+
+	ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)",
+		td->name, method, ptr);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(ptr, 0, sizeof(long));
+        break;
+    }
+}
+
+int
+NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) {
+    (void)td;
+
+    if(aptr && bptr) {
+        const asn_INTEGER_specifics_t *specs =
+            (const asn_INTEGER_specifics_t *)td->specifics;
+        if(specs && specs->field_unsigned) {
+            const unsigned long *a = aptr;
+            const unsigned long *b = bptr;
+            if(*a < *b) {
+                return -1;
+            } else if(*a > *b) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else {
+            const long *a = aptr;
+            const long *b = bptr;
+            if(*a < *b) {
+                return -1;
+            } else if(*a > *b) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+    } else if(!aptr) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+asn_random_fill_result_t
+NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                          const asn_encoding_constraints_t *constraints,
+                          size_t max_length) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    long *st = *sptr;
+    const asn_INTEGER_enum_map_t *emap;
+    size_t emap_len;
+    intmax_t value;
+    int find_inside_map;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (long *)CALLOC(1, sizeof(*st));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(specs) {
+        emap = specs->value2enum;
+        emap_len = specs->map_count;
+        if(specs->strict_enumeration) {
+            find_inside_map = emap_len > 0;
+        } else {
+            find_inside_map = emap_len ? asn_random_between(0, 1) : 0;
+        }
+    } else {
+        emap = 0;
+        emap_len = 0;
+        find_inside_map = 0;
+    }
+
+    if(find_inside_map) {
+        assert(emap_len > 0);
+        value = emap[asn_random_between(0, emap_len - 1)].nat_value;
+    } else {
+        const asn_per_constraints_t *ct;
+
+        static const long variants[] = {
+            -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384,
+            -16383, -257,   -256,   -255,   -254,   -129,   -128,   -127,
+            -126,   -1,     0,      1,      126,    127,    128,    129,
+            254,    255,    256,    257,    16383,  16384,  16385,  32767,
+            32768,  32769,  65534,  65535,  65536,  65537};
+        if(specs && specs->field_unsigned) {
+            assert(variants[18] == 0);
+            value = variants[asn_random_between(
+                18, sizeof(variants) / sizeof(variants[0]) - 1)];
+        } else {
+            value = variants[asn_random_between(
+                0, sizeof(variants) / sizeof(variants[0]) - 1)];
+        }
+
+        if(!constraints) constraints = &td->encoding_constraints;
+        ct = constraints ? constraints->per_constraints : 0;
+        if(ct && (ct->value.flags & APC_CONSTRAINED)) {
+            if(value < ct->value.lower_bound || value > ct->value.upper_bound) {
+                value = asn_random_between(ct->value.lower_bound,
+                                           ct->value.upper_bound);
+            }
+        }
+    }
+
+    *sptr = st;
+    *st = value;
+    return result_ok;
+}
diff --git a/asn1c_defs/NativeInteger.h b/asn1c_defs/NativeInteger.h
new file mode 100644
index 0000000..c74406a
--- /dev/null
+++ b/asn1c_defs/NativeInteger.h
@@ -0,0 +1,46 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard INTEGER in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeInteger_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef	_NativeInteger_H_
+#define	_NativeInteger_H_
+
+#include <asn_application.h>
+#include <INTEGER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeInteger;
+extern asn_TYPE_operation_t asn_OP_NativeInteger;
+
+asn_struct_free_f  NativeInteger_free;
+asn_struct_print_f NativeInteger_print;
+asn_struct_compare_f NativeInteger_compare;
+ber_type_decoder_f NativeInteger_decode_ber;
+der_type_encoder_f NativeInteger_encode_der;
+xer_type_decoder_f NativeInteger_decode_xer;
+xer_type_encoder_f NativeInteger_encode_xer;
+oer_type_decoder_f NativeInteger_decode_oer;
+oer_type_encoder_f NativeInteger_encode_oer;
+per_type_decoder_f NativeInteger_decode_uper;
+per_type_encoder_f NativeInteger_encode_uper;
+per_type_decoder_f NativeInteger_decode_aper;
+per_type_encoder_f NativeInteger_encode_aper;
+asn_random_fill_f  NativeInteger_random_fill;
+
+#define NativeInteger_constraint  asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _NativeInteger_H_ */
diff --git a/asn1c_defs/OBJECT_IDENTIFIER.c b/asn1c_defs/OBJECT_IDENTIFIER.c
new file mode 100644
index 0000000..8dccf01
--- /dev/null
+++ b/asn1c_defs/OBJECT_IDENTIFIER.c
@@ -0,0 +1,656 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <INTEGER.h>
+#include <OBJECT_IDENTIFIER.h>
+#include <OCTET_STRING.h>
+#include <limits.h>	/* for CHAR_BIT */
+#include <errno.h>
+
+/*
+ * OBJECT IDENTIFIER basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_OBJECT_IDENTIFIER_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (6 << 2))
+};
+asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
+	ASN__PRIMITIVE_TYPE_free,
+	OBJECT_IDENTIFIER_print,
+	OCTET_STRING_compare,   /* Implemented in terms of a string comparison */
+	ber_decode_primitive,
+	der_encode_primitive,
+	OBJECT_IDENTIFIER_decode_xer,
+	OBJECT_IDENTIFIER_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	OBJECT_IDENTIFIER_decode_oer,
+	OBJECT_IDENTIFIER_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	OCTET_STRING_decode_uper,
+	OCTET_STRING_encode_uper,
+	OCTET_STRING_decode_aper,
+	OCTET_STRING_encode_aper,
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	OBJECT_IDENTIFIER_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER = {
+	"OBJECT IDENTIFIER",
+	"OBJECT_IDENTIFIER",
+	&asn_OP_OBJECT_IDENTIFIER,
+	asn_DEF_OBJECT_IDENTIFIER_tags,
+	sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
+	    / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]),
+	asn_DEF_OBJECT_IDENTIFIER_tags,	/* Same as above */
+	sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
+	    / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]),
+	{ 0, 0, OBJECT_IDENTIFIER_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+int
+OBJECT_IDENTIFIER_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             asn_app_constraint_failed_f *ctfailcb,
+                             void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+
+	if(st && st->buf) {
+		if(st->size < 1) {
+			ASN__CTFAIL(app_key, td, sptr,
+				"%s: at least one numerical value "
+				"expected (%s:%d)",
+				td->name, __FILE__, __LINE__);
+			return -1;
+		}
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
+
+static ssize_t
+OBJECT_IDENTIFIER_get_first_arcs(const uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t *arc0, asn_oid_arc_t *arc1) {
+    asn_oid_arc_t value;
+
+    ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(arcbuf, arcbuf_len, &value);
+    if(rd <= 0) return rd;
+
+    if(value >= 80) {
+        *arc0 = 2;
+        *arc1 = value - 80;
+    } else if(value >= 40) {
+        *arc0 = 1;
+        *arc1 = value - 40;
+    } else {
+        *arc0 = 0;
+        *arc1 = value;
+    }
+
+    return rd;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t *ret_value) {
+    const uint8_t *b = arcbuf;
+    const uint8_t *arcend = arcbuf + arcbuf_len; /* End of arc */
+
+    if(arcbuf == arcend) {
+        return 0;
+    } else {
+        asn_oid_arc_t accum;
+	asn_oid_arc_t upper_limit = (ASN_OID_ARC_MAX >> 7);
+	/* When the value reaches "upper_limit", it can take */
+	/* at most one more digit. If it exceeds "upper_limit" */
+	/* but there are more digits - it's an Overflow condition */
+        /* Gather all bits into the accumulator */
+        for(accum = 0; b < arcend; b++) {
+            accum = (accum << 7) | (*b & ~0x80);
+            if((*b & 0x80) == 0) { // no more digits
+                if(accum <= ASN_OID_ARC_MAX) {
+                    *ret_value = accum;
+                    return 1 + (b - arcbuf);
+                } else {
+                    errno = ERANGE; /* Overflow */
+                    return -1;
+                }
+            } else { // to make sure we aren't wrapping around
+	      if(accum > upper_limit) {
+		    errno = ERANGE; /* Overflow */
+		    return -1;
+	      }
+	    }
+        }
+        errno = EINVAL;
+        return -1;
+    }
+
+}
+
+static ssize_t
+OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+    char scratch[32];
+    asn_oid_arc_t arc0, arc1;
+    size_t produced = 0;
+    size_t off = 0;
+    ssize_t rd;
+    int ret;
+
+    rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1);
+    if(rd <= 0) {
+        return -1;
+    }
+
+    ret = snprintf(scratch, sizeof(scratch), "%"PRIu32".%"PRIu32, arc0, arc1);
+    if(ret >= (ssize_t)sizeof(scratch)) {
+        return -1;
+    }
+    produced += ret;
+    if(cb(scratch, ret, app_key) < 0)
+        return -1;
+
+    for(off = rd; ; ) {
+        asn_oid_arc_t arc;
+        rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off,
+                                              &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            off += rd;
+            assert(off <= st->size);
+            ret = snprintf(scratch, sizeof(scratch), ".%" PRIu32, arc);
+            if(ret >= (ssize_t)sizeof(scratch)) {
+                return -1;
+            }
+            produced += ret;
+            if(cb(scratch, ret, app_key) < 0) return -1;
+        }
+    }
+
+    if(off != st->size) {
+        ASN_DEBUG("Could not scan to the end of Object Identifier");
+        return -1;
+    }
+
+	return produced;
+}
+
+static enum xer_pbd_rval
+OBJECT_IDENTIFIER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                                   const void *chunk_buf, size_t chunk_size) {
+    OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)sptr;
+	const char *chunk_end = (const char *)chunk_buf + chunk_size;
+	const char *endptr;
+	asn_oid_arc_t s_arcs[10];
+	asn_oid_arc_t *arcs = s_arcs;
+	ssize_t num_arcs;
+	ssize_t ret;
+
+	(void)td;
+
+    num_arcs = OBJECT_IDENTIFIER_parse_arcs(
+        (const char *)chunk_buf, chunk_size, arcs,
+        sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr);
+    if(num_arcs < 0) {
+		/* Expecting more than zero arcs */
+		return XPBD_BROKEN_ENCODING;
+	} else if(num_arcs == 0) {
+		return XPBD_NOT_BODY_IGNORE;
+	}
+	assert(endptr == chunk_end);
+
+	if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) {
+		arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t));
+		if(!arcs) return XPBD_SYSTEM_FAILURE;
+        ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size,
+                                           arcs, num_arcs, &endptr);
+        if(ret != num_arcs)
+			return XPBD_SYSTEM_FAILURE;	/* assert?.. */
+	}
+
+	/*
+	 * Convert arcs into BER representation.
+	 */
+	ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs);
+	if(arcs != s_arcs) FREEMEM(arcs);
+
+	return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+OBJECT_IDENTIFIER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td, void **sptr,
+                             const char *opt_mname, const void *buf_ptr,
+                             size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+		sptr, sizeof(OBJECT_IDENTIFIER_t), opt_mname,
+			buf_ptr, size, OBJECT_IDENTIFIER__xer_body_decode);
+}
+
+asn_enc_rval_t
+OBJECT_IDENTIFIER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             int ilevel, enum xer_encoder_flags_e flags,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+    asn_enc_rval_t er = {0,0,0};
+
+    (void)ilevel;
+    (void)flags;
+
+    if(!st || !st->buf) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key);
+    if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+    ASN__ENCODED_OK(er);
+}
+
+int
+OBJECT_IDENTIFIER_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, asn_app_consume_bytes_f *cb,
+                        void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+
+	(void)td;	/* Unused argument */
+	(void)ilevel;	/* Unused argument */
+
+	if(!st || !st->buf)
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	/* Dump preamble */
+	if(cb("{ ", 2, app_key) < 0)
+		return -1;
+
+    if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0) {
+        return -1;
+    }
+
+    return (cb(" }", 2, app_key) < 0) ? -1 : 0;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *st, asn_oid_arc_t *arcs,
+                           size_t arc_slots) {
+    asn_oid_arc_t arc0, arc1;
+    size_t num_arcs = 0;
+    size_t off;
+    ssize_t rd;
+
+    if(!st || !st->buf) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1);
+    if(rd <= 0) {
+        return -1;
+    }
+    num_arcs = 2;
+    switch(arc_slots) {
+    default:
+    case 2:
+        arcs[1] = arc1;
+        /* Fall through */
+    case 1:
+        arcs[0] = arc0;
+        /* Fall through */
+    case 0:
+        break;
+    }
+
+    for(off = rd; ; ) {
+        asn_oid_arc_t arc;
+        rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off,
+                                              &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            off += rd;
+            if(num_arcs < arc_slots) {
+                arcs[num_arcs] = arc;
+            }
+            num_arcs++;
+        }
+    }
+
+    if(off != st->size) {
+        return -1;
+    }
+
+    return num_arcs;
+}
+
+
+/*
+ * Save the single value as an object identifier arc.
+ */
+ssize_t
+OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t value) {
+    /*
+	 * The following conditions must hold:
+	 * assert(arcbuf);
+	 */
+    uint8_t scratch[((sizeof(value) * CHAR_BIT + 6) / 7)];
+    uint8_t *scratch_end = &scratch[sizeof(scratch)-1];
+    uint8_t *b;
+    size_t result_len;
+    uint8_t mask;
+
+    for(b = scratch_end, mask = 0; ; mask = 0x80, b--) {
+        *b = mask | (value & 0x7f);
+        value >>= 7;
+        if(!value) {
+            break;
+        }
+    }
+
+    result_len = (scratch_end - b) + 1;
+
+    if(result_len > arcbuf_len) {
+        return -1;
+    }
+
+    memcpy(arcbuf, b, result_len);
+
+	return result_len;
+}
+
+int
+OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *st, const asn_oid_arc_t *arcs,
+                           size_t arc_slots) {
+    uint8_t *buf;
+    uint8_t *bp;
+    ssize_t wrote;
+    asn_oid_arc_t arc0;
+    asn_oid_arc_t arc1;
+    size_t size;
+    size_t i;
+
+    if(!st || !arcs || arc_slots < 2) {
+        errno = EINVAL;
+		return -1;
+	}
+
+    arc0 = arcs[0];
+    arc1 = arcs[1];
+
+	if(arc0 <= 1) {
+		if(arc1 >= 40) {
+			/* 8.19.4: At most 39 subsequent values (including 0) */
+			errno = ERANGE;
+			return -1;
+		}
+    } else if(arc0 == 2) {
+        if(arc1 > ASN_OID_ARC_MAX - 80) {
+            errno = ERANGE;
+            return -1;
+        }
+    } else if(arc0 > 2) {
+        /* 8.19.4: Only three values are allocated from the root node */
+        errno = ERANGE;
+        return -1;
+    }
+
+    /*
+	 * After above tests it is known that the value of arc0 is completely
+	 * trustworthy (0..2). However, the arc1's value is still meaningless.
+	 */
+
+    /*
+     * Roughly estimate the maximum size necessary to encode these arcs.
+     * This estimation implicitly takes in account the following facts,
+     * that cancel each other:
+     * 	* the first two arcs are encoded in a single value.
+     * 	* the first value may require more space (+1 byte)
+     * 	* the value of the first arc which is in range (0..2)
+     */
+    size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arc_slots;
+    bp = buf = (uint8_t *)MALLOC(size + 1);
+    if(!buf) {
+        /* ENOMEM */
+        return -1;
+    }
+
+    wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arc0 * 40 + arc1);
+    if(wrote <= 0) {
+        FREEMEM(buf);
+        return -1;
+    }
+    assert((size_t)wrote <= size);
+    bp += wrote;
+    size -= wrote;
+
+    for(i = 2; i < arc_slots; i++) {
+		wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]);
+        if(wrote <= 0) {
+            FREEMEM(buf);
+            return -1;
+        }
+        assert((size_t)wrote <= size);
+        bp += wrote;
+        size -= wrote;
+    }
+
+    /*
+	 * Replace buffer.
+	 */
+	st->size = bp - buf;
+	bp = st->buf;
+	st->buf = buf;
+	st->buf[st->size] = '\0';
+	if(bp) FREEMEM(bp);
+
+	return 0;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length,
+                             asn_oid_arc_t *arcs, size_t arcs_count,
+                             const char **opt_oid_text_end) {
+    size_t num_arcs = 0;
+    const char *oid_end;
+	enum {
+		ST_LEADSPACE,
+		ST_TAILSPACE,
+		ST_AFTERVALUE,	/* Next character ought to be '.' or a space */
+		ST_WAITDIGITS 	/* Next character is expected to be a digit */
+	} state = ST_LEADSPACE;
+
+	if(!oid_text || oid_txt_length < -1 || (arcs_count && !arcs)) {
+		if(opt_oid_text_end) *opt_oid_text_end = oid_text;
+		errno = EINVAL;
+		return -1;
+	}
+
+	if(oid_txt_length == -1)
+		oid_txt_length = strlen(oid_text);
+
+#define _OID_CAPTURE_ARC(oid_text, oid_end)                       \
+    do {                                                          \
+        const char *endp = oid_end;                               \
+        unsigned long value;                                      \
+        switch(asn_strtoul_lim(oid_text, &endp, &value)) {        \
+        case ASN_STRTOX_EXTRA_DATA:                               \
+        case ASN_STRTOX_OK:                                       \
+            if(value <= ASN_OID_ARC_MAX) {                        \
+                if(num_arcs < arcs_count) arcs[num_arcs] = value; \
+                num_arcs++;                                       \
+                oid_text = endp - 1;                              \
+                break;                                            \
+            }                                                     \
+            /* Fall through */                                    \
+        case ASN_STRTOX_ERROR_RANGE:                              \
+            if(opt_oid_text_end) *opt_oid_text_end = oid_text;    \
+            errno = ERANGE;                                       \
+            return -1;                                            \
+        case ASN_STRTOX_ERROR_INVAL:                              \
+        case ASN_STRTOX_EXPECT_MORE:                              \
+            if(opt_oid_text_end) *opt_oid_text_end = oid_text;    \
+            errno = EINVAL;                                       \
+            return -1;                                            \
+        }                                                         \
+    } while(0)
+
+    for(oid_end = oid_text + oid_txt_length; oid_text<oid_end; oid_text++) {
+	    switch(*oid_text) {
+	    case 0x09: case 0x0a: case 0x0d: case 0x20:	/* whitespace */
+		switch(state) {
+		case ST_LEADSPACE:
+		case ST_TAILSPACE:
+			continue;
+		case ST_AFTERVALUE:
+			state = ST_TAILSPACE;
+			continue;
+		case ST_WAITDIGITS:
+			break;	/* Digits expected after ".", got whitespace */
+		}
+		break;
+	    case 0x2e:	/* '.' */
+		switch(state) {
+		case ST_LEADSPACE:
+		case ST_TAILSPACE:
+		case ST_WAITDIGITS:
+			if(opt_oid_text_end)
+				*opt_oid_text_end = oid_text;
+			errno = EINVAL;	/* Broken OID */
+			return -1;
+			break;
+		case ST_AFTERVALUE:
+			state = ST_WAITDIGITS;
+			continue;
+		}
+		break;
+	    case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+	    case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+		switch(state) {
+		case ST_TAILSPACE:
+		case ST_AFTERVALUE:
+			if(opt_oid_text_end)
+				*opt_oid_text_end = oid_text;
+			errno = EINVAL;	/* "1. 1" => broken OID */
+			return -1;
+		case ST_LEADSPACE:
+		case ST_WAITDIGITS:
+			_OID_CAPTURE_ARC(oid_text, oid_end);
+			state = ST_AFTERVALUE;
+			continue;
+		}
+		break;
+	    default:
+		/* Unexpected symbols */
+		state = ST_WAITDIGITS;
+		break;
+	    } /* switch() */
+	    break;
+	} /* for() */
+
+
+	if(opt_oid_text_end) *opt_oid_text_end = oid_text;
+
+	/* Finalize last arc */
+	switch(state) {
+	case ST_LEADSPACE:
+		return 0; /* No OID found in input data */
+	case ST_WAITDIGITS:
+		errno = EINVAL;	/* Broken OID */
+		return -1;
+	case ST_AFTERVALUE:
+	case ST_TAILSPACE:
+		return num_arcs;
+	}
+
+	errno = EINVAL;	/* Broken OID */
+	return -1;
+}
+
+/*
+ * Generate values from the list of interesting values, or just a random
+ * value up to the upper limit.
+ */
+static asn_oid_arc_t
+OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound) {
+    const asn_oid_arc_t values[] = {0, 1, 127, 128, 129, 254, 255, 256};
+    size_t idx;
+
+    switch(asn_random_between(0, 2)) {
+    case 0:
+        idx = asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1);
+        if(values[idx] < upper_bound) {
+            return values[idx];
+        }
+        /* Fall through */
+    case 1:
+        return asn_random_between(0, upper_bound);
+    case 2:
+    default:
+        return upper_bound;
+    }
+}
+
+asn_random_fill_result_t
+OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                              const asn_encoding_constraints_t *constraints,
+                              size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    OBJECT_IDENTIFIER_t *st;
+    asn_oid_arc_t arcs[5];
+    size_t arcs_len = asn_random_between(2, 5);
+    size_t i;
+
+    (void)constraints;
+
+    if(max_length < arcs_len) return result_skipped;
+
+    if(*sptr) {
+        st = *sptr;
+    } else {
+        st = CALLOC(1, sizeof(*st));
+    }
+
+    arcs[0] = asn_random_between(0, 2);
+    arcs[1] = OBJECT_IDENTIFIER__biased_random_arc(
+        arcs[0] <= 1 ? 39 : (ASN_OID_ARC_MAX - 80));
+    for(i = 2; i < arcs_len; i++) {
+        arcs[i] = OBJECT_IDENTIFIER__biased_random_arc(ASN_OID_ARC_MAX);
+    }
+
+    if(OBJECT_IDENTIFIER_set_arcs(st, arcs, arcs_len)) {
+        if(st != *sptr) {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    }
+
+    *sptr = st;
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/asn1c_defs/OBJECT_IDENTIFIER.h b/asn1c_defs/OBJECT_IDENTIFIER.h
new file mode 100644
index 0000000..087c6fd
--- /dev/null
+++ b/asn1c_defs/OBJECT_IDENTIFIER.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_OBJECT_IDENTIFIER_H_
+#define	_OBJECT_IDENTIFIER_H_
+
+#include <asn_application.h>
+#include <asn_codecs_prim.h>
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint32_t asn_oid_arc_t;
+#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0))
+
+typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER;
+extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER;
+
+asn_struct_print_f OBJECT_IDENTIFIER_print;
+asn_constr_check_f OBJECT_IDENTIFIER_constraint;
+der_type_encoder_f OBJECT_IDENTIFIER_encode_der;
+xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
+xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
+asn_random_fill_f  OBJECT_IDENTIFIER_random_fill;
+
+#define OBJECT_IDENTIFIER_free           ASN__PRIMITIVE_TYPE_free
+#define OBJECT_IDENTIFIER_compare        OCTET_STRING_compare
+#define OBJECT_IDENTIFIER_decode_ber     ber_decode_primitive
+#define OBJECT_IDENTIFIER_encode_der     der_encode_primitive
+#define OBJECT_IDENTIFIER_decode_oer     oer_decode_primitive
+#define OBJECT_IDENTIFIER_encode_oer     oer_encode_primitive
+#define OBJECT_IDENTIFIER_decode_uper    OCTET_STRING_decode_uper
+#define OBJECT_IDENTIFIER_encode_uper    OCTET_STRING_encode_uper
+#define OBJECT_IDENTIFIER_decode_aper    OCTET_STRING_decode_aper
+#define OBJECT_IDENTIFIER_encode_aper    OCTET_STRING_encode_aper
+
+/**********************************
+ * Some handy conversion routines *
+ **********************************/
+
+/*
+ * This function fills an (arcs) array with OBJECT IDENTIFIER arcs
+ * up to specified (arc_slots) elements.
+ *
+ * EXAMPLE:
+ * 	void print_arcs(OBJECT_IDENTIFIER_t *oid) {
+ * 		asn_oid_arc_t fixed_arcs[10];	// Try with fixed space first
+ * 		asn_oid_arc_t *arcs = fixed_arcs;
+ * 		size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10
+ * 		ssize_t count;	// Real number of arcs.
+ * 		int i;
+ *
+ * 		count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ * 		// If necessary, reallocate arcs array and try again.
+ * 		if(count > arc_slots) {
+ * 			arc_slots = count;
+ * 			arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots);
+ * 			if(!arcs) return;
+ * 			count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ * 			assert(count == arc_slots);
+ * 		}
+ *
+ * 		// Print the contents of the arcs array.
+ * 		for(i = 0; i < count; i++)
+ * 			printf("%"PRIu32"\n", arcs[i]);
+ *
+ * 		// Avoid memory leak.
+ * 		if(arcs != fixed_arcs) free(arcs);
+ * 	}
+ *
+ * RETURN VALUES:
+ * -1/EINVAL:	Invalid arguments (oid is missing)
+ * -1/ERANGE:	One or more arcs have value out of array cell type range.
+ * >=0:		Number of arcs contained in the OBJECT IDENTIFIER
+ *
+ * WARNING: The function always returns the actual number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ */
+ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid,
+                                   asn_oid_arc_t *arcs, size_t arc_slots);
+
+/*
+ * This functions initializes the OBJECT IDENTIFIER object with
+ * the given set of arcs.
+ * The minimum of two arcs must be present; some restrictions apply.
+ * RETURN VALUES:
+ * -1/EINVAL:	Invalid arguments
+ * -1/ERANGE:	The first two arcs do not conform to ASN.1 restrictions.
+ * -1/ENOMEM:	Memory allocation failed
+ * 0:		The object was initialized with new arcs.
+ */
+int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid,
+                               const asn_oid_arc_t *arcs, size_t arcs_count);
+
+
+/*
+ * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363").
+ * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX).
+ * This function is not specific to OBJECT IDENTIFIER, it may be used to parse
+ * the RELATIVE-OID data, or any other data consisting of dot-separated
+ * series of numeric values.
+ *
+ * If (oid_txt_length == -1), the strlen() will be invoked to determine the
+ * size of the (oid_text) string.
+ * 
+ * After return, the optional (opt_oid_text_end) is set to the character after
+ * the last parsed one. (opt_oid_text_end) is never less than (oid_text).
+ * 
+ * RETURN VALUES:
+ *   -1:	Parse error.
+ * >= 0:	Number of arcs contained in the OBJECT IDENTIFIER.
+ * 
+ * WARNING: The function always returns the real number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ * This is useful for (arc_slots) value estimation.
+ */
+ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text,
+                                     ssize_t oid_txt_length,
+                                     asn_oid_arc_t *arcs, size_t arcs_count,
+                                     const char **opt_oid_text_end);
+
+/*
+ * Internal functions.
+ * Used by RELATIVE-OID implementation in particular.
+ */
+
+/*
+ * Retrieve a single arc of size from the (arcbuf) buffer.
+ * RETURN VALUES:
+ *  -1: Failed to retrieve the value from the (arcbuf).
+ *  >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf,
+                                         size_t arcbuf_len,
+                                         asn_oid_arc_t *ret_value);
+
+/*
+ * Write the unterminated arc value into the (arcbuf) which has the size at
+ * least (arcbuf_len).
+ * RETURN VALUES:
+ *   -1: (arcbuf_len) size is not sufficient to write the value.
+ *  <n>: Number of bytes appended to the arcbuf (<= arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
+                                         asn_oid_arc_t arc_value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _OBJECT_IDENTIFIER_H_ */
diff --git a/asn1c_defs/OCTET_STRING.c b/asn1c_defs/OCTET_STRING.c
new file mode 100644
index 0000000..432ce5a
--- /dev/null
+++ b/asn1c_defs/OCTET_STRING.c
@@ -0,0 +1,2409 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <OCTET_STRING.h>
+#include <BIT_STRING.h>	/* for .bits_unused member */
+#include <errno.h>
+
+/*
+ * OCTET STRING basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = {
+	sizeof(OCTET_STRING_t),
+	offsetof(OCTET_STRING_t, _asn_ctx),
+	ASN_OSUBV_STR
+};
+
+asn_TYPE_operation_t asn_OP_OCTET_STRING = {
+	OCTET_STRING_free,
+	OCTET_STRING_print,	/* OCTET STRING generally means a non-ascii sequence */
+	OCTET_STRING_compare,
+	OCTET_STRING_decode_ber,
+	OCTET_STRING_encode_der,
+	OCTET_STRING_decode_xer_hex,
+	OCTET_STRING_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	OCTET_STRING_decode_oer,
+	OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	OCTET_STRING_decode_uper,	/* Unaligned PER decoder */
+	OCTET_STRING_encode_uper,	/* Unaligned PER encoder */
+	OCTET_STRING_decode_aper,	/* Aligned PER decoder */
+	OCTET_STRING_encode_aper,	/* Aligned PER encoder */
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	OCTET_STRING_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = {
+	"OCTET STRING",		/* Canonical name */
+	"OCTET_STRING",		/* XML tag name */
+	&asn_OP_OCTET_STRING,
+	asn_DEF_OCTET_STRING_tags,
+	sizeof(asn_DEF_OCTET_STRING_tags)
+	  / sizeof(asn_DEF_OCTET_STRING_tags[0]),
+	asn_DEF_OCTET_STRING_tags,	/* Same as above */
+	sizeof(asn_DEF_OCTET_STRING_tags)
+	  / sizeof(asn_DEF_OCTET_STRING_tags[0]),
+	{ 0, 0, asn_generic_no_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs
+};
+
+#undef	_CH_PHASE
+#undef	NEXT_PHASE
+#undef	PREV_PHASE
+#define	_CH_PHASE(ctx, inc) do {					\
+		if(ctx->phase == 0)					\
+			ctx->context = 0;				\
+		ctx->phase += inc;					\
+	} while(0)
+#define	NEXT_PHASE(ctx)	_CH_PHASE(ctx, +1)
+#define	PREV_PHASE(ctx)	_CH_PHASE(ctx, -1)
+
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {					\
+		size_t num = (num_bytes);				\
+		buf_ptr = ((const char *)buf_ptr) + num;		\
+		size -= num;						\
+		consumed_myself += num;					\
+	} while(0)
+
+#undef	RETURN
+#define	RETURN(_code)	do {						\
+		asn_dec_rval_t tmprval;					\
+		tmprval.code = _code;					\
+		tmprval.consumed = consumed_myself;			\
+		return tmprval;						\
+	} while(0)
+
+#undef	APPEND
+#define	APPEND(bufptr, bufsize)	do {					\
+		size_t _bs = (bufsize);		/* Append size */	\
+		size_t _ns = ctx->context;	/* Allocated now */	\
+		size_t _es = st->size + _bs;	/* Expected size */	\
+		/* int is really a typeof(st->size): */			\
+		if((int)_es < 0) RETURN(RC_FAIL);			\
+		if(_ns <= _es) {					\
+			void *ptr;					\
+			/* Be nice and round to the memory allocator */	\
+			do { _ns = _ns ? _ns << 1 : 16; }		\
+			    while(_ns <= _es);				\
+			/* int is really a typeof(st->size): */		\
+			if((int)_ns < 0) RETURN(RC_FAIL);		\
+			ptr = REALLOC(st->buf, _ns);			\
+			if(ptr) {					\
+				st->buf = (uint8_t *)ptr;		\
+				ctx->context = _ns;			\
+			} else {					\
+				RETURN(RC_FAIL);			\
+			}						\
+			ASN_DEBUG("Reallocating into %ld", (long)_ns);	\
+		}							\
+		memcpy(st->buf + st->size, bufptr, _bs);		\
+		/* Convenient nul-termination */			\
+		st->buf[_es] = '\0';					\
+		st->size = _es;						\
+	} while(0)
+
+/*
+ * The main reason why ASN.1 is still alive is that too much time and effort
+ * is necessary for learning it more or less adequately, thus creating a gut
+ * necessity to demonstrate that aquired skill everywhere afterwards.
+ * No, I am not going to explain what the following stuff is.
+ */
+struct _stack_el {
+    ber_tlv_len_t left;     /* What's left to read (or -1) */
+    ber_tlv_len_t got;      /* What was actually processed */
+    unsigned cont_level;    /* Depth of subcontainment */
+    int want_nulls;         /* Want null "end of content" octets? */
+    int bits_chopped;       /* Flag in BIT STRING mode */
+    ber_tlv_tag_t tag;      /* For debugging purposes */
+    struct _stack_el *prev;
+    struct _stack_el *next;
+};
+struct _stack {
+	struct _stack_el *tail;
+	struct _stack_el *cur_ptr;
+};
+
+static struct _stack_el *
+OS__add_stack_el(struct _stack *st) {
+	struct _stack_el *nel;
+
+	/*
+	 * Reuse the old stack frame or allocate a new one.
+	 */
+	if(st->cur_ptr && st->cur_ptr->next) {
+		nel = st->cur_ptr->next;
+		nel->bits_chopped = 0;
+		nel->got = 0;
+		/* Retain the nel->cont_level, it's correct. */
+	} else {
+		nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el));
+		if(nel == NULL)
+			return NULL;
+	
+		if(st->tail) {
+			/* Increase a subcontainment depth */
+			nel->cont_level = st->tail->cont_level + 1;
+			st->tail->next = nel;
+		}
+		nel->prev = st->tail;
+		st->tail = nel;
+	}
+
+	st->cur_ptr = nel;
+
+	return nel;
+}
+
+static struct _stack *
+_new_stack(void) {
+	return (struct _stack *)CALLOC(1, sizeof(struct _stack));
+}
+
+/*
+ * Decode OCTET STRING type.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                        const asn_TYPE_descriptor_t *td, void **sptr,
+                        const void *buf_ptr, size_t size, int tag_mode) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+				? (const asn_OCTET_STRING_specifics_t *)td->specifics
+				: &asn_SPC_OCTET_STRING_specs;
+	BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+	asn_dec_rval_t rval;
+	asn_struct_ctx_t *ctx;
+	ssize_t consumed_myself = 0;
+	struct _stack *stck;		/* Expectations stack structure */
+	struct _stack_el *sel = 0;	/* Stack element */
+	int tlv_constr;
+	enum asn_OS_Subvariant type_variant = specs->subvariant;
+
+	ASN_DEBUG("Decoding %s as %s (frame %ld)",
+		td->name,
+		(type_variant == ASN_OSUBV_STR) ?
+			"OCTET STRING" : "OS-SpecialCase",
+		(long)size);
+
+	/*
+	 * Create the string if does not exist.
+	 */
+	if(st == NULL) {
+		st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+		if(st == NULL) RETURN(RC_FAIL);
+	}
+
+	/* Restore parsing context */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+	switch(ctx->phase) {
+	case 0:
+		/*
+		 * Check tags.
+		 */
+		rval = ber_check_tags(opt_codec_ctx, td, ctx,
+			buf_ptr, size, tag_mode, -1,
+			&ctx->left, &tlv_constr);
+		if(rval.code != RC_OK)
+			return rval;
+
+		if(tlv_constr) {
+			/*
+			 * Complex operation, requires stack of expectations.
+			 */
+			ctx->ptr = _new_stack();
+			if(!ctx->ptr) {
+				RETURN(RC_FAIL);
+			}
+		} else {
+			/*
+			 * Jump into stackless primitive decoding.
+			 */
+			_CH_PHASE(ctx, 3);
+			if(type_variant == ASN_OSUBV_ANY && tag_mode != 1)
+				APPEND(buf_ptr, rval.consumed);
+			ADVANCE(rval.consumed);
+			goto phase3;
+		}
+
+		NEXT_PHASE(ctx);
+		/* Fall through */
+	case 1:
+	phase1:
+		/*
+		 * Fill the stack with expectations.
+		 */
+		stck = (struct _stack *)ctx->ptr;
+		sel = stck->cur_ptr;
+	  do {
+		ber_tlv_tag_t tlv_tag;
+		ber_tlv_len_t tlv_len;
+		ber_tlv_tag_t expected_tag;
+		ssize_t tl, ll, tlvl;
+				/* This one works even if (sel->left == -1) */
+		size_t Left = ((!sel||(size_t)sel->left >= size)
+					?size:(size_t)sel->left);
+
+
+		ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel,
+			(long)(sel?sel->left:0),
+			(long)(sel?sel->want_nulls:0),
+			(long)(sel?sel->got:0)
+		);
+		if(sel && sel->left <= 0 && sel->want_nulls == 0) {
+			if(sel->prev) {
+				struct _stack_el *prev = sel->prev;
+				if(prev->left != -1) {
+					if(prev->left < sel->got)
+						RETURN(RC_FAIL);
+					prev->left -= sel->got;
+				}
+				prev->got += sel->got;
+				sel = stck->cur_ptr = prev;
+				if(!sel) break;
+				tlv_constr = 1;
+				continue;
+			} else {
+				sel = stck->cur_ptr = 0;
+				break;	/* Nothing to wait */
+			}
+		}
+
+		tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag);
+		ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld",
+			(long)size, (long)Left, sel?"":"!",
+			(long)(sel?sel->left:0),
+			(long)(sel?sel->want_nulls:0),
+			(long)tl);
+		switch(tl) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+
+		tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr);
+
+		ll = ber_fetch_length(tlv_constr,
+				(const char *)buf_ptr + tl,Left - tl,&tlv_len);
+		ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld",
+			ber_tlv_tag_string(tlv_tag), tlv_constr,
+				(long)Left, (long)tl, (long)tlv_len, (long)ll);
+		switch(ll) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+
+		if(sel && sel->want_nulls
+			&& ((const uint8_t *)buf_ptr)[0] == 0
+			&& ((const uint8_t *)buf_ptr)[1] == 0)
+		{
+
+			ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls);
+
+			if(type_variant == ASN_OSUBV_ANY
+			&& (tag_mode != 1 || sel->cont_level))
+				APPEND("\0\0", 2);
+
+			ADVANCE(2);
+			sel->got += 2;
+			if(sel->left != -1) {
+				sel->left -= 2;	/* assert(sel->left >= 2) */
+			}
+
+			sel->want_nulls--;
+			if(sel->want_nulls == 0) {
+				/* Move to the next expectation */
+				sel->left = 0;
+				tlv_constr = 1;
+			}
+
+			continue;
+		}
+
+		/*
+		 * Set up expected tags,
+		 * depending on ASN.1 type being decoded.
+		 */
+		switch(type_variant) {
+		case ASN_OSUBV_BIT:
+			/* X.690: 8.6.4.1, NOTE 2 */
+			/* Fall through */
+		case ASN_OSUBV_STR:
+		default:
+			if(sel) {
+				unsigned level = sel->cont_level;
+				if(level < td->all_tags_count) {
+					expected_tag = td->all_tags[level];
+					break;
+				} else if(td->all_tags_count) {
+					expected_tag = td->all_tags
+						[td->all_tags_count - 1];
+					break;
+				}
+				/* else, Fall through */
+			}
+			/* Fall through */
+		case ASN_OSUBV_ANY:
+			expected_tag = tlv_tag;
+			break;
+		}
+
+
+		if(tlv_tag != expected_tag) {
+			char buf[2][32];
+			ber_tlv_tag_snprint(tlv_tag,
+				buf[0], sizeof(buf[0]));
+			ber_tlv_tag_snprint(td->tags[td->tags_count-1],
+				buf[1], sizeof(buf[1]));
+			ASN_DEBUG("Tag does not match expectation: %s != %s",
+				buf[0], buf[1]);
+			RETURN(RC_FAIL);
+		}
+
+		tlvl = tl + ll;	/* Combined length of T and L encoding */
+		if((tlv_len + tlvl) < 0) {
+			/* tlv_len value is too big */
+			ASN_DEBUG("TLV encoding + length (%ld) is too big",
+				(long)tlv_len);
+			RETURN(RC_FAIL);
+		}
+
+		/*
+		 * Append a new expectation.
+		 */
+		sel = OS__add_stack_el(stck);
+		if(!sel) RETURN(RC_FAIL);
+
+		sel->tag = tlv_tag;
+
+		sel->want_nulls = (tlv_len==-1);
+		if(sel->prev && sel->prev->left != -1) {
+			/* Check that the parent frame is big enough */
+			if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len))
+				RETURN(RC_FAIL);
+			if(tlv_len == -1)
+				sel->left = sel->prev->left - tlvl;
+			else
+				sel->left = tlv_len;
+		} else {
+			sel->left = tlv_len;
+		}
+		if(type_variant == ASN_OSUBV_ANY
+		&& (tag_mode != 1 || sel->cont_level))
+			APPEND(buf_ptr, tlvl);
+		sel->got += tlvl;
+		ADVANCE(tlvl);
+
+		ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u",
+			(long)sel->got, (long)sel->left,
+			sel->want_nulls, sel->cont_level);
+
+	  } while(tlv_constr);
+		if(sel == NULL) {
+			/* Finished operation, "phase out" */
+			ASN_DEBUG("Phase out");
+			_CH_PHASE(ctx, +3);
+			break;
+		}
+
+		NEXT_PHASE(ctx);
+		/* Fall through */
+	case 2:
+		stck = (struct _stack *)ctx->ptr;
+		sel = stck->cur_ptr;
+		ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d",
+			(long)sel->left, (long)size, (long)sel->got,
+				sel->want_nulls);
+	    {
+		ber_tlv_len_t len;
+
+		assert(sel->left >= 0);
+
+		len = ((ber_tlv_len_t)size < sel->left)
+				? (ber_tlv_len_t)size : sel->left;
+		if(len > 0) {
+			if(type_variant == ASN_OSUBV_BIT
+			&& sel->bits_chopped == 0) {
+				/* Put the unused-bits-octet away */
+				st->bits_unused = *(const uint8_t *)buf_ptr;
+				APPEND(((const char *)buf_ptr+1), (len - 1));
+				sel->bits_chopped = 1;
+			} else {
+				APPEND(buf_ptr, len);
+			}
+			ADVANCE(len);
+			sel->left -= len;
+			sel->got += len;
+		}
+
+		if(sel->left) {
+			ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n",
+				(long)sel->left, (long)size, sel->want_nulls);
+			RETURN(RC_WMORE);
+		}
+
+		PREV_PHASE(ctx);
+		goto phase1;
+	    }
+		break;
+	case 3:
+	phase3:
+		/*
+		 * Primitive form, no stack required.
+		 */
+		assert(ctx->left >= 0);
+
+		if(size < (size_t)ctx->left) {
+			if(!size) RETURN(RC_WMORE);
+			if(type_variant == ASN_OSUBV_BIT && !ctx->context) {
+				st->bits_unused = *(const uint8_t *)buf_ptr;
+				ctx->left--;
+				ADVANCE(1);
+			}
+			APPEND(buf_ptr, size);
+			assert(ctx->context > 0);
+			ctx->left -= size;
+			ADVANCE(size);
+			RETURN(RC_WMORE);
+		} else {
+			if(type_variant == ASN_OSUBV_BIT
+			&& !ctx->context && ctx->left) {
+				st->bits_unused = *(const uint8_t *)buf_ptr;
+				ctx->left--;
+				ADVANCE(1);
+			}
+			APPEND(buf_ptr, ctx->left);
+			ADVANCE(ctx->left);
+			ctx->left = 0;
+
+			NEXT_PHASE(ctx);
+		}
+		break;
+	}
+
+	if(sel) {
+		ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld",
+			(void *)sel->prev, sel->want_nulls,
+			(long)sel->left, (long)sel->got, (long)size);
+		if(sel->prev || sel->want_nulls > 1 || sel->left > 0) {
+			RETURN(RC_WMORE);
+		}
+	}
+
+	/*
+	 * BIT STRING-specific processing.
+	 */
+	if(type_variant == ASN_OSUBV_BIT) {
+        if(st->size) {
+			if(st->bits_unused < 0 || st->bits_unused > 7) {
+				RETURN(RC_FAIL);
+			}
+			/* Finalize BIT STRING: zero out unused bits. */
+			st->buf[st->size-1] &= 0xff << st->bits_unused;
+		} else {
+			if(st->bits_unused) {
+				RETURN(RC_FAIL);
+			}
+		}
+	}
+
+	ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld",
+		(long)consumed_myself, td->name,
+		(type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "<data>",
+		(long)st->size);
+
+
+	RETURN(RC_OK);
+}
+
+/*
+ * Encode OCTET STRING type using DER.
+ */
+asn_enc_rval_t
+OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int tag_mode, ber_tlv_tag_t tag,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = { 0, 0, 0 };
+	const asn_OCTET_STRING_specifics_t *specs = td->specifics
+				? (const asn_OCTET_STRING_specifics_t *)td->specifics
+				: &asn_SPC_OCTET_STRING_specs;
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	enum asn_OS_Subvariant type_variant = specs->subvariant;
+	int fix_last_byte = 0;
+
+	ASN_DEBUG("%s %s as OCTET STRING",
+		cb?"Estimating":"Encoding", td->name);
+
+	/*
+	 * Write tags.
+	 */
+	if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) {
+		er.encoded = der_write_tags(td,
+				(type_variant == ASN_OSUBV_BIT) + st->size,
+			tag_mode, type_variant == ASN_OSUBV_ANY, tag,
+			cb, app_key);
+		if(er.encoded == -1) {
+			er.failed_type = td;
+			er.structure_ptr = sptr;
+			return er;
+		}
+	} else {
+		/* Disallow: [<tag>] IMPLICIT ANY */
+		assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1);
+		er.encoded = 0;
+	}
+
+	if(!cb) {
+		er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size;
+		ASN__ENCODED_OK(er);
+	}
+
+	/*
+	 * Prepare to deal with the last octet of BIT STRING.
+	 */
+	if(type_variant == ASN_OSUBV_BIT) {
+		uint8_t b = st->bits_unused & 0x07;
+		if(b && st->size) fix_last_byte = 1;
+		ASN__CALLBACK(&b, 1);
+	}
+
+	/* Invoke callback for the main part of the buffer */
+	ASN__CALLBACK(st->buf, st->size - fix_last_byte);
+
+	/* The last octet should be stripped off the unused bits */
+	if(fix_last_byte) {
+		uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused);
+		ASN__CALLBACK(&b, 1);
+	}
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, enum xer_encoder_flags_e flags,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+	char scratch[16 * 3 + 4];
+	char *p = scratch;
+	uint8_t *buf;
+	uint8_t *end;
+	size_t i;
+
+	if(!st || (!st->buf && st->size))
+		ASN__ENCODE_FAILED;
+
+	er.encoded = 0;
+
+	/*
+	 * Dump the contents of the buffer in hexadecimal.
+	 */
+	buf = st->buf;
+	end = buf + st->size;
+	if(flags & XER_F_CANONICAL) {
+		char *scend = scratch + (sizeof(scratch) - 2);
+		for(; buf < end; buf++) {
+			if(p >= scend) {
+				ASN__CALLBACK(scratch, p - scratch);
+				p = scratch;
+			}
+			*p++ = h2c[(*buf >> 4) & 0x0F];
+			*p++ = h2c[*buf & 0x0F];
+		}
+
+		ASN__CALLBACK(scratch, p-scratch);	/* Dump the rest */
+	} else {
+		for(i = 0; buf < end; buf++, i++) {
+			if(!(i % 16) && (i || st->size > 16)) {
+				ASN__CALLBACK(scratch, p-scratch);
+				p = scratch;
+				ASN__TEXT_INDENT(1, ilevel);
+			}
+			*p++ = h2c[(*buf >> 4) & 0x0F];
+			*p++ = h2c[*buf & 0x0F];
+			*p++ = 0x20;
+		}
+		if(p - scratch) {
+			p--;	/* Remove the tail space */
+			ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */
+			if(st->size > 16)
+				ASN__TEXT_INDENT(1, ilevel-1);
+		}
+	}
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+static const struct OCTET_STRING__xer_escape_table_s {
+	const char *string;
+	int size;
+} OCTET_STRING__xer_escape_table[] = {
+#define	OSXET(s)	{ s, sizeof(s) - 1 }
+	OSXET("\074\156\165\154\057\076"),	/* <nul/> */
+	OSXET("\074\163\157\150\057\076"),	/* <soh/> */
+	OSXET("\074\163\164\170\057\076"),	/* <stx/> */
+	OSXET("\074\145\164\170\057\076"),	/* <etx/> */
+	OSXET("\074\145\157\164\057\076"),	/* <eot/> */
+	OSXET("\074\145\156\161\057\076"),	/* <enq/> */
+	OSXET("\074\141\143\153\057\076"),	/* <ack/> */
+	OSXET("\074\142\145\154\057\076"),	/* <bel/> */
+	OSXET("\074\142\163\057\076"),		/* <bs/> */
+	OSXET("\011"),				/* \t */
+	OSXET("\012"),				/* \n */
+	OSXET("\074\166\164\057\076"),		/* <vt/> */
+	OSXET("\074\146\146\057\076"),		/* <ff/> */
+	OSXET("\015"),				/* \r */
+	OSXET("\074\163\157\057\076"),		/* <so/> */
+	OSXET("\074\163\151\057\076"),		/* <si/> */
+	OSXET("\074\144\154\145\057\076"),	/* <dle/> */
+	OSXET("\074\144\143\061\057\076"),	/* <de1/> */
+	OSXET("\074\144\143\062\057\076"),	/* <de2/> */
+	OSXET("\074\144\143\063\057\076"),	/* <de3/> */
+	OSXET("\074\144\143\064\057\076"),	/* <de4/> */
+	OSXET("\074\156\141\153\057\076"),	/* <nak/> */
+	OSXET("\074\163\171\156\057\076"),	/* <syn/> */
+	OSXET("\074\145\164\142\057\076"),	/* <etb/> */
+	OSXET("\074\143\141\156\057\076"),	/* <can/> */
+	OSXET("\074\145\155\057\076"),		/* <em/> */
+	OSXET("\074\163\165\142\057\076"),	/* <sub/> */
+	OSXET("\074\145\163\143\057\076"),	/* <esc/> */
+	OSXET("\074\151\163\064\057\076"),	/* <is4/> */
+	OSXET("\074\151\163\063\057\076"),	/* <is3/> */
+	OSXET("\074\151\163\062\057\076"),	/* <is2/> */
+	OSXET("\074\151\163\061\057\076"),	/* <is1/> */
+	{ 0, 0 },	/* " " */
+	{ 0, 0 },	/* ! */
+	{ 0, 0 },	/* \" */
+	{ 0, 0 },	/* # */
+	{ 0, 0 },	/* $ */
+	{ 0, 0 },	/* % */
+	OSXET("\046\141\155\160\073"),	/* &amp; */
+	{ 0, 0 },	/* ' */
+	{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */
+	{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */
+	{0,0},{0,0},{0,0},{0,0},			 /* 89:; */
+	OSXET("\046\154\164\073"),	/* &lt; */
+	{ 0, 0 },	/* = */
+	OSXET("\046\147\164\073"),	/* &gt; */
+};
+
+static int
+OS__check_escaped_control_char(const void *buf, int size) {
+	size_t i;
+	/*
+	 * Inefficient algorithm which translates the escape sequences
+	 * defined above into characters. Returns -1 if not found.
+	 * TODO: replace by a faster algorithm (bsearch(), hash or
+	 * nested table lookups).
+	 */
+	for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) {
+		const struct OCTET_STRING__xer_escape_table_s *el;
+		el = &OCTET_STRING__xer_escape_table[i];
+		if(el->size == size && memcmp(buf, el->string, size) == 0)
+			return i;
+	}
+	return -1;
+}
+
+static int
+OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) {
+	/*
+	 * This might be one of the escape sequences
+	 * for control characters. Check it out.
+	 * #11.15.5
+	 */
+	int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size);
+	if(control_char >= 0) {
+		OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr;
+		void *p = REALLOC(st->buf, st->size + 2);
+		if(p) {
+			st->buf = (uint8_t *)p;
+			st->buf[st->size++] = control_char;
+			st->buf[st->size] = '\0';	/* nul-termination */
+			return 0;
+		}
+	}
+	
+	return -1;	/* No, it's not */
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             int ilevel, enum xer_encoder_flags_e flags,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+	uint8_t *buf, *end;
+	uint8_t *ss;	/* Sequence start */
+	ssize_t encoded_len = 0;
+
+	(void)ilevel;	/* Unused argument */
+	(void)flags;	/* Unused argument */
+
+	if(!st || (!st->buf && st->size))
+		ASN__ENCODE_FAILED;
+
+	buf = st->buf;
+	end = buf + st->size;
+	for(ss = buf; buf < end; buf++) {
+		unsigned int ch = *buf;
+		int s_len;	/* Special encoding sequence length */
+
+		/*
+		 * Escape certain characters: X.680/11.15
+		 */
+		if(ch < sizeof(OCTET_STRING__xer_escape_table)
+			/sizeof(OCTET_STRING__xer_escape_table[0])
+		&& (s_len = OCTET_STRING__xer_escape_table[ch].size)) {
+			if(((buf - ss) && cb(ss, buf - ss, app_key) < 0)
+			|| cb(OCTET_STRING__xer_escape_table[ch].string, s_len,
+					app_key) < 0)
+				ASN__ENCODE_FAILED;
+			encoded_len += (buf - ss) + s_len;
+			ss = buf + 1;
+		}
+	}
+
+	encoded_len += (buf - ss);
+	if((buf - ss) && cb(ss, buf - ss, app_key) < 0)
+		ASN__ENCODE_FAILED;
+
+	er.encoded = encoded_len;
+	ASN__ENCODED_OK(er);
+}
+
+/*
+ * Convert from hexadecimal format (cstring): "AB CD EF"
+ */
+static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
+	OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+	const char *chunk_stop = (const char *)chunk_buf;
+	const char *p = chunk_stop;
+	const char *pend = p + chunk_size;
+	unsigned int clv = 0;
+	int half = 0;	/* Half bit */
+	uint8_t *buf;
+
+	/* Reallocate buffer according to high cap estimation */
+	size_t new_size = st->size + (chunk_size + 1) / 2;
+	void *nptr = REALLOC(st->buf, new_size + 1);
+	if(!nptr) return -1;
+	st->buf = (uint8_t *)nptr;
+	buf = st->buf + st->size;
+
+	/*
+	 * If something like " a b c " appears here, the " a b":3 will be
+	 * converted, and the rest skipped. That is, unless buf_size is greater
+	 * than chunk_size, then it'll be equivalent to "ABC0".
+	 */
+	for(; p < pend; p++) {
+		int ch = *(const unsigned char *)p;
+		switch(ch) {
+		case 0x09: case 0x0a: case 0x0c: case 0x0d:
+		case 0x20:
+			/* Ignore whitespace */
+			continue;
+		case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/
+		case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/
+			clv = (clv << 4) + (ch - 0x30);
+			break;
+		case 0x41: case 0x42: case 0x43:	/* ABC */
+		case 0x44: case 0x45: case 0x46:	/* DEF */
+			clv = (clv << 4) + (ch - 0x41 + 10);
+			break;
+		case 0x61: case 0x62: case 0x63:	/* abc */
+		case 0x64: case 0x65: case 0x66:	/* def */
+			clv = (clv << 4) + (ch - 0x61 + 10);
+			break;
+		default:
+			*buf = 0;	/* JIC */
+			return -1;
+		}
+		if(half++) {
+			half = 0;
+			*buf++ = clv;
+			chunk_stop = p + 1;
+		}
+	}
+
+	/*
+	 * Check partial decoding.
+	 */
+	if(half) {
+		if(have_more) {
+			/*
+			 * Partial specification is fine,
+			 * because no more more PXER_TEXT data is available.
+			 */
+			*buf++ = clv << 4;
+			chunk_stop = p;
+		}
+	} else {
+		chunk_stop = p;
+	}
+
+	st->size = buf - st->buf;	/* Adjust the buffer size */
+	assert(st->size <= new_size);
+	st->buf[st->size] = 0;		/* Courtesy termination */
+
+	return (chunk_stop - (const char *)chunk_buf);	/* Converted size */
+}
+
+/*
+ * Convert from binary format: "00101011101"
+ */
+static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
+	BIT_STRING_t *st = (BIT_STRING_t *)sptr;
+	const char *p = (const char *)chunk_buf;
+	const char *pend = p + chunk_size;
+	int bits_unused = st->bits_unused & 0x7;
+	uint8_t *buf;
+
+	/* Reallocate buffer according to high cap estimation */
+	size_t new_size = st->size + (chunk_size + 7) / 8;
+	void *nptr = REALLOC(st->buf, new_size + 1);
+	if(!nptr) return -1;
+	st->buf = (uint8_t *)nptr;
+	buf = st->buf + st->size;
+
+	(void)have_more;
+
+	if(bits_unused == 0)
+		bits_unused = 8;
+	else if(st->size)
+		buf--;
+
+	/*
+	 * Convert series of 0 and 1 into the octet string.
+	 */
+	for(; p < pend; p++) {
+		int ch = *(const unsigned char *)p;
+		switch(ch) {
+		case 0x09: case 0x0a: case 0x0c: case 0x0d:
+		case 0x20:
+			/* Ignore whitespace */
+			break;
+		case 0x30:
+		case 0x31:
+			if(bits_unused-- <= 0) {
+				*++buf = 0;	/* Clean the cell */
+				bits_unused = 7;
+			}
+			*buf |= (ch&1) << bits_unused;
+			break;
+		default:
+			st->bits_unused = bits_unused;
+			return -1;
+		}
+	}
+
+	if(bits_unused == 8) {
+		st->size = buf - st->buf;
+		st->bits_unused = 0;
+	} else {
+		st->size = buf - st->buf + 1;
+		st->bits_unused = bits_unused;
+	}
+
+	assert(st->size <= new_size);
+	st->buf[st->size] = 0;		/* Courtesy termination */
+
+	return chunk_size;	/* Converted in full */
+}
+
+/*
+ * Something like strtod(), but with stricter rules.
+ */
+static int
+OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) {
+	const int32_t last_unicode_codepoint = 0x10ffff;
+	int32_t val = 0;
+	const char *p;
+
+	for(p = buf; p < end; p++) {
+		int ch = *p;
+
+		switch(ch) {
+		case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/
+		case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/
+			val = val * base + (ch - 0x30);
+			break;
+		case 0x41: case 0x42: case 0x43:	/* ABC */
+		case 0x44: case 0x45: case 0x46:	/* DEF */
+			val = val * base + (ch - 0x41 + 10);
+			break;
+		case 0x61: case 0x62: case 0x63:	/* abc */
+		case 0x64: case 0x65: case 0x66:	/* def */
+			val = val * base + (ch - 0x61 + 10);
+			break;
+		case 0x3b:	/* ';' */
+			*ret_value = val;
+			return (p - buf) + 1;
+		default:
+			return -1;	/* Character set error */
+		}
+
+		/* Value exceeds the Unicode range. */
+		if(val > last_unicode_codepoint) {
+			return -1;
+		}
+	}
+
+	*ret_value = -1;
+	return (p - buf);
+}
+
+/*
+ * Convert from the plain UTF-8 format, expanding entity references: "2 &lt; 3"
+ */
+static ssize_t
+OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf,
+                              size_t chunk_size, int have_more) {
+    OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+	const char *p = (const char *)chunk_buf;
+	const char *pend = p + chunk_size;
+	uint8_t *buf;
+
+	/* Reallocate buffer */
+	size_t new_size = st->size + chunk_size;
+	void *nptr = REALLOC(st->buf, new_size + 1);
+	if(!nptr) return -1;
+	st->buf = (uint8_t *)nptr;
+	buf = st->buf + st->size;
+
+	/*
+	 * Convert series of 0 and 1 into the octet string.
+	 */
+	for(; p < pend; p++) {
+		int ch = *(const unsigned char *)p;
+		int len;	/* Length of the rest of the chunk */
+
+		if(ch != 0x26 /* '&' */) {
+			*buf++ = ch;
+			continue;	/* That was easy... */
+		}
+
+		/*
+		 * Process entity reference.
+		 */
+		len = chunk_size - (p - (const char *)chunk_buf);
+		if(len == 1 /* "&" */) goto want_more;
+		if(p[1] == 0x23 /* '#' */) {
+			const char *pval;	/* Pointer to start of digits */
+			int32_t val = 0;	/* Entity reference value */
+			int base;
+
+			if(len == 2 /* "&#" */) goto want_more;
+			if(p[2] == 0x78 /* 'x' */)
+				pval = p + 3, base = 16;
+			else
+				pval = p + 2, base = 10;
+			len = OS__strtoent(base, pval, p + len, &val);
+			if(len == -1) {
+				/* Invalid charset. Just copy verbatim. */
+				*buf++ = ch;
+				continue;
+			}
+			if(!len || pval[len-1] != 0x3b) goto want_more;
+			assert(val > 0);
+			p += (pval - p) + len - 1; /* Advance past entref */
+
+			if(val < 0x80) {
+				*buf++ = (char)val;
+			} else if(val < 0x800) {
+				*buf++ = 0xc0 | ((val >> 6));
+				*buf++ = 0x80 | ((val & 0x3f));
+			} else if(val < 0x10000) {
+				*buf++ = 0xe0 | ((val >> 12));
+				*buf++ = 0x80 | ((val >> 6) & 0x3f);
+				*buf++ = 0x80 | ((val & 0x3f));
+			} else if(val < 0x200000) {
+				*buf++ = 0xf0 | ((val >> 18));
+				*buf++ = 0x80 | ((val >> 12) & 0x3f);
+				*buf++ = 0x80 | ((val >> 6) & 0x3f);
+				*buf++ = 0x80 | ((val & 0x3f));
+			} else if(val < 0x4000000) {
+				*buf++ = 0xf8 | ((val >> 24));
+				*buf++ = 0x80 | ((val >> 18) & 0x3f);
+				*buf++ = 0x80 | ((val >> 12) & 0x3f);
+				*buf++ = 0x80 | ((val >> 6) & 0x3f);
+				*buf++ = 0x80 | ((val & 0x3f));
+			} else {
+				*buf++ = 0xfc | ((val >> 30) & 0x1);
+				*buf++ = 0x80 | ((val >> 24) & 0x3f);
+				*buf++ = 0x80 | ((val >> 18) & 0x3f);
+				*buf++ = 0x80 | ((val >> 12) & 0x3f);
+				*buf++ = 0x80 | ((val >> 6) & 0x3f);
+				*buf++ = 0x80 | ((val & 0x3f));
+			}
+		} else {
+			/*
+			 * Ugly, limited parsing of &amp; &gt; &lt;
+			 */
+			char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len);
+			if(!sc) goto want_more;
+			if((sc - p) == 4
+				&& p[1] == 0x61	/* 'a' */
+				&& p[2] == 0x6d	/* 'm' */
+				&& p[3] == 0x70	/* 'p' */) {
+				*buf++ = 0x26;
+				p = sc;
+				continue;
+			}
+			if((sc - p) == 3) {
+				if(p[1] == 0x6c) {
+					*buf = 0x3c;	/* '<' */
+				} else if(p[1] == 0x67) {
+					*buf = 0x3e;	/* '>' */
+				} else {
+					/* Unsupported entity reference */
+					*buf++ = ch;
+					continue;
+				}
+				if(p[2] != 0x74) {
+					/* Unsupported entity reference */
+					*buf++ = ch;
+					continue;
+				}
+				buf++;
+				p = sc;
+				continue;
+			}
+			/* Unsupported entity reference */
+			*buf++ = ch;
+		}
+
+		continue;
+	want_more:
+		if(have_more) {
+			/*
+			 * We know that no more data (of the same type)
+			 * is coming. Copy the rest verbatim.
+			 */
+			*buf++ = ch;
+			continue;
+		}
+		chunk_size = (p - (const char *)chunk_buf);
+		/* Processing stalled: need more data */
+		break;
+	}
+
+	st->size = buf - st->buf;
+	assert(st->size <= new_size);
+	st->buf[st->size] = 0;		/* Courtesy termination */
+
+	return chunk_size;	/* Converted in full */
+}
+
+/*
+ * Decode OCTET STRING from the XML element's body.
+ */
+static asn_dec_rval_t
+OCTET_STRING__decode_xer(
+    const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td,
+    void **sptr, const char *opt_mname, const void *buf_ptr, size_t size,
+    int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf,
+                                      size_t chunk_size),
+    ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf,
+                             size_t chunk_size, int have_more)) {
+    OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
+	const asn_OCTET_STRING_specifics_t *specs = td->specifics
+				? (const asn_OCTET_STRING_specifics_t *)td->specifics
+				: &asn_SPC_OCTET_STRING_specs;
+	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+	asn_struct_ctx_t *ctx;		/* Per-structure parser context */
+	asn_dec_rval_t rval;		/* Return value from the decoder */
+	int st_allocated;
+
+	/*
+	 * Create the string if does not exist.
+	 */
+	if(!st) {
+		st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
+		*sptr = (void *)st;
+		if(!st) goto sta_failed;
+		st_allocated = 1;
+	} else {
+		st_allocated = 0;
+	}
+	if(!st->buf) {
+		/* This is separate from above section */
+		st->buf = (uint8_t *)CALLOC(1, 1);
+		if(!st->buf) {
+			if(st_allocated) {
+				*sptr = 0;
+				goto stb_failed;
+			} else {
+				goto sta_failed;
+			}
+		}
+	}
+
+	/* Restore parsing context */
+	ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset);
+
+	return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag,
+		buf_ptr, size, opt_unexpected_tag_decoder, body_receiver);
+
+stb_failed:
+	FREEMEM(st);
+sta_failed:
+	rval.code = RC_FAIL;
+	rval.consumed = 0;
+	return rval;
+}
+
+/*
+ * Decode OCTET STRING from the hexadecimal data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx,
+                            const asn_TYPE_descriptor_t *td, void **sptr,
+                            const char *opt_mname, const void *buf_ptr,
+                            size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+		buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal);
+}
+
+/*
+ * Decode OCTET STRING from the binary (0/1) data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx,
+                               const asn_TYPE_descriptor_t *td, void **sptr,
+                               const char *opt_mname, const void *buf_ptr,
+                               size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+		buf_ptr, size, 0, OCTET_STRING__convert_binary);
+}
+
+/*
+ * Decode OCTET STRING from the string (ASCII/UTF-8) data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td, void **sptr,
+                             const char *opt_mname, const void *buf_ptr,
+                             size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+		buf_ptr, size,
+		OCTET_STRING__handle_control_chars,
+		OCTET_STRING__convert_entrefs);
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+static int
+OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf,
+		size_t units, unsigned int bpc, unsigned int unit_bits,
+		long lb, long ub, const asn_per_constraints_t *pc) {
+	uint8_t *end = buf + units * bpc;
+
+	ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d",
+		(int)units, lb, ub, unit_bits);
+
+	/* X.691: 27.5.4 */
+	if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
+		/* Decode without translation */
+		lb = 0;
+	} else if(pc && pc->code2value) {
+		if(unit_bits > 16)
+			return 1;	/* FATAL: can't have constrained
+					 * UniversalString with more than
+					 * 16 million code points */
+		for(; buf < end; buf += bpc) {
+			int value;
+			int code = per_get_few_bits(po, unit_bits);
+			if(code < 0) return -1;	/* WMORE */
+			value = pc->code2value(code);
+			if(value < 0) {
+				ASN_DEBUG("Code %d (0x%02x) is"
+					" not in map (%ld..%ld)",
+					code, code, lb, ub);
+				return 1;	/* FATAL */
+			}
+			switch(bpc) {
+			case 1: *buf = value; break;
+			case 2: buf[0] = value >> 8; buf[1] = value; break;
+			case 4: buf[0] = value >> 24; buf[1] = value >> 16;
+				buf[2] = value >> 8; buf[3] = value; break;
+			}
+		}
+		return 0;
+	}
+
+	/* Shortcut the no-op copying to the aligned structure */
+	if(lb == 0 && (unit_bits == 8 * bpc)) {
+		return per_get_many_bits(po, buf, 0, unit_bits * units);
+	}
+
+	for(; buf < end; buf += bpc) {
+		int32_t code = per_get_few_bits(po, unit_bits);
+		int32_t ch = code + lb;
+		if(code < 0) return -1;	/* WMORE */
+		if(ch > ub) {
+			ASN_DEBUG("Code %d is out of range (%ld..%ld)",
+				ch, lb, ub);
+			return 1;	/* FATAL */
+		}
+		switch(bpc) {
+		case 1: *buf = ch; break;
+		case 2: buf[0] = ch >> 8; buf[1] = ch; break;
+		case 4: buf[0] = ch >> 24; buf[1] = ch >> 16;
+			buf[2] = ch >> 8; buf[3] = ch; break;
+		}
+	}
+
+	return 0;
+}
+
+static int
+OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf,
+		size_t units, unsigned int bpc, unsigned int unit_bits,
+		long lb, long ub, const asn_per_constraints_t *pc) {
+	const uint8_t *end = buf + units * bpc;
+
+	ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)",
+		(int)units, lb, ub, unit_bits, bpc);
+
+	/* X.691: 27.5.4 */
+	if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
+		/* Encode as is */
+		lb = 0;
+	} else if(pc && pc->value2code) {
+		for(; buf < end; buf += bpc) {
+			int code;
+			uint32_t value;
+			switch(bpc) {
+			case 1: value = *(const uint8_t *)buf; break;
+			case 2: value = (buf[0] << 8) | buf[1]; break;
+			case 4: value = (buf[0] << 24) | (buf[1] << 16)
+					| (buf[2] << 8) | buf[3]; break;
+			default: return -1;
+			}
+			code = pc->value2code(value);
+			if(code < 0) {
+				ASN_DEBUG("Character %d (0x%02x) is"
+					" not in map (%ld..%ld)",
+					*buf, *buf, lb, ub);
+				return -1;
+			}
+			if(per_put_few_bits(po, code, unit_bits))
+				return -1;
+		}
+	}
+
+	/* Shortcut the no-op copying to the aligned structure */
+	if(lb == 0 && (unit_bits == 8 * bpc)) {
+		return per_put_many_bits(po, buf, unit_bits * units);
+	}
+
+    for(ub -= lb; buf < end; buf += bpc) {
+        int ch;
+        uint32_t value;
+        switch(bpc) {
+        case 1:
+            value = *(const uint8_t *)buf;
+            break;
+        case 2:
+            value = (buf[0] << 8) | buf[1];
+            break;
+        case 4:
+            value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+            break;
+        default:
+            return -1;
+        }
+        ch = value - lb;
+        if(ch < 0 || ch > ub) {
+            ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf,
+                      value, lb, ub + lb);
+            return -1;
+        }
+        if(per_put_few_bits(po, ch, unit_bits)) return -1;
+    }
+
+    return 0;
+}
+
+static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = {
+	{ APC_CONSTRAINED, 8, 8, 0, 255 },
+	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
+	0, 0
+};
+
+asn_dec_rval_t
+OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints, void **sptr,
+                         asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+		? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		: &asn_SPC_OCTET_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+    const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
+	asn_dec_rval_t rval = { RC_OK, 0 };
+	OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
+	ssize_t consumed_myself = 0;
+	int repeat;
+	enum {
+		OS__BPC_CHAR	= 1,
+		OS__BPC_U16	= 2,
+		OS__BPC_U32	= 4
+	} bpc;	/* Bytes per character */
+	unsigned int unit_bits;
+	unsigned int canonical_unit_bits;
+
+	(void)opt_codec_ctx;
+
+	if(pc) {
+		cval = &pc->value;
+		csiz = &pc->size;
+	} else {
+		cval = &asn_DEF_OCTET_STRING_constraints.value;
+		csiz = &asn_DEF_OCTET_STRING_constraints.size;
+	}
+
+	switch(specs->subvariant) {
+	default:
+	case ASN_OSUBV_ANY:
+	case ASN_OSUBV_BIT:
+		ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant);
+		RETURN(RC_FAIL);
+		break;
+	case ASN_OSUBV_STR:
+		canonical_unit_bits = unit_bits = 8;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_CHAR;
+		break;
+	case ASN_OSUBV_U16:
+		canonical_unit_bits = unit_bits = 16;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U16;
+		break;
+	case ASN_OSUBV_U32:
+		canonical_unit_bits = unit_bits = 32;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U32;
+		break;
+	}
+
+	/*
+	 * Allocate the string.
+	 */
+	if(!st) {
+		st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+		if(!st) RETURN(RC_FAIL);
+	}
+
+	ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+		csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+		csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+	if(csiz->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) RETURN(RC_WMORE);
+		if(inext) {
+			csiz = &asn_DEF_OCTET_STRING_constraints.size;
+			unit_bits = canonical_unit_bits;
+		}
+	}
+
+	if(csiz->effective_bits >= 0) {
+		FREEMEM(st->buf);
+		if(bpc) {
+			st->size = csiz->upper_bound * bpc;
+		} else {
+			st->size = (csiz->upper_bound + 7) >> 3;
+		}
+		st->buf = (uint8_t *)MALLOC(st->size + 1);
+		if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+	}
+
+	/* X.691, #16.5: zero-length encoding */
+	/* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+	/* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+	if(csiz->effective_bits == 0) {
+		int ret;
+		if(bpc) {
+			ASN_DEBUG("Encoding OCTET STRING size %ld",
+				csiz->upper_bound);
+			ret = OCTET_STRING_per_get_characters(pd, st->buf,
+				csiz->upper_bound, bpc, unit_bits,
+				cval->lower_bound, cval->upper_bound, pc);
+			if(ret > 0) RETURN(RC_FAIL);
+		} else {
+			ASN_DEBUG("Encoding BIT STRING size %ld",
+				csiz->upper_bound);
+			ret = per_get_many_bits(pd, st->buf, 0,
+					    unit_bits * csiz->upper_bound);
+		}
+		if(ret < 0) RETURN(RC_WMORE);
+		consumed_myself += unit_bits * csiz->upper_bound;
+		st->buf[st->size] = 0;
+		RETURN(RC_OK);
+	}
+
+	st->size = 0;
+	do {
+		ssize_t raw_len;
+		ssize_t len_bytes;
+		void *p;
+		int ret;
+
+		/* Get the PER length */
+		raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound,
+		                          &repeat);
+		if(raw_len < 0) RETURN(RC_WMORE);
+		if(raw_len == 0 && st->buf) break;
+
+		ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+			(long)csiz->effective_bits, (long)raw_len,
+			repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len * bpc;
+		p = REALLOC(st->buf, st->size + len_bytes + 1);
+		if(!p) RETURN(RC_FAIL);
+		st->buf = (uint8_t *)p;
+
+        ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len,
+                                              bpc, unit_bits, cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret > 0) RETURN(RC_FAIL);
+		if(ret < 0) RETURN(RC_WMORE);
+		st->size += len_bytes;
+	} while(repeat);
+	st->buf[st->size] = 0;	/* nul-terminate */
+
+	return rval;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         const void *sptr, asn_per_outp_t *po) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+		? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		: &asn_SPC_OCTET_STRING_specs;
+	const asn_per_constraints_t *pc = constraints ? constraints
+				: td->encoding_constraints.per_constraints;
+	const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+	int inext = 0;		/* Lies not within extension root */
+	unsigned int unit_bits;
+	unsigned int canonical_unit_bits;
+	size_t size_in_units;
+	const uint8_t *buf;
+	int ret;
+	enum {
+		OS__BPC_CHAR	= 1,
+		OS__BPC_U16	= 2,
+		OS__BPC_U32	= 4
+	} bpc;	/* Bytes per character */
+	int ct_extensible;
+
+	if(!st || (!st->buf && st->size))
+		ASN__ENCODE_FAILED;
+
+	if(pc) {
+		cval = &pc->value;
+		csiz = &pc->size;
+	} else {
+		cval = &asn_DEF_OCTET_STRING_constraints.value;
+		csiz = &asn_DEF_OCTET_STRING_constraints.size;
+	}
+	ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+	switch(specs->subvariant) {
+	default:
+	case ASN_OSUBV_ANY:
+	case ASN_OSUBV_BIT:
+		ASN__ENCODE_FAILED;
+	case ASN_OSUBV_STR:
+		canonical_unit_bits = unit_bits = 8;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_CHAR;
+		size_in_units = st->size;
+		break;
+	case ASN_OSUBV_U16:
+		canonical_unit_bits = unit_bits = 16;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U16;
+		size_in_units = st->size >> 1;
+		if(st->size & 1) {
+			ASN_DEBUG("%s string size is not modulo 2", td->name);
+			ASN__ENCODE_FAILED;
+		}
+		break;
+	case ASN_OSUBV_U32:
+		canonical_unit_bits = unit_bits = 32;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U32;
+		size_in_units = st->size >> 2;
+		if(st->size & 3) {
+			ASN_DEBUG("%s string size is not modulo 4", td->name);
+			ASN__ENCODE_FAILED;
+		}
+		break;
+	}
+
+	ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits"
+		" (%ld..%ld, effective %d)%s",
+		td->name, size_in_units, unit_bits,
+		csiz->lower_bound, csiz->upper_bound,
+		csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+	/* Figure out whether size lies within PER visible constraint */
+
+    if(csiz->effective_bits >= 0) {
+        if((ssize_t)size_in_units < csiz->lower_bound
+           || (ssize_t)size_in_units > csiz->upper_bound) {
+            if(ct_extensible) {
+                csiz = &asn_DEF_OCTET_STRING_constraints.size;
+                unit_bits = canonical_unit_bits;
+                inext = 1;
+            } else {
+                ASN__ENCODE_FAILED;
+            }
+        }
+    } else {
+        inext = 0;
+    }
+
+    if(ct_extensible) {
+		/* Declare whether length is [not] within extension root */
+		if(per_put_few_bits(po, inext, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+    if(csiz->effective_bits >= 0 && !inext) {
+        ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size,
+                  size_in_units - csiz->lower_bound, csiz->effective_bits);
+        ret = per_put_few_bits(po, size_in_units - csiz->lower_bound,
+                               csiz->effective_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc,
+                                              unit_bits, cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret) ASN__ENCODE_FAILED;
+        ASN__ENCODED_OK(er);
+    }
+
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size);
+
+    buf = st->buf;
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units);
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size_in_units, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units,
+                  need_eom ? ",+EOM" : "");
+
+        ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits,
+                                              cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save * bpc;
+        size_in_units -= may_save;
+        assert(!(may_save & 0x07) || !size_in_units);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size_in_units);
+
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         void **sptr, asn_per_data_t *pd) {
+
+	const asn_OCTET_STRING_specifics_t *specs = td->specifics
+		? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		: &asn_SPC_OCTET_STRING_specs;
+	const asn_per_constraints_t *pc = constraints ? constraints
+				: td->encoding_constraints.per_constraints;
+	const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
+	asn_dec_rval_t rval = { RC_OK, 0 };
+	BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+	ssize_t consumed_myself = 0;
+	int repeat;
+	enum {
+		OS__BPC_BIT	= 0,
+		OS__BPC_CHAR	= 1,
+		OS__BPC_U16	= 2,
+		OS__BPC_U32	= 4
+	} bpc;	/* Bytes per character */
+	unsigned int unit_bits;
+	unsigned int canonical_unit_bits;
+
+	(void)opt_codec_ctx;
+
+	if(pc) {
+		cval = &pc->value;
+		csiz = &pc->size;
+	} else {
+		cval = &asn_DEF_OCTET_STRING_constraints.value;
+		csiz = &asn_DEF_OCTET_STRING_constraints.size;
+	}
+
+	switch(specs->subvariant) {
+	default:
+/* 	case ASN_OSUBV_ANY:
+		ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant);
+		RETURN(RC_FAIL);
+*/
+	case ASN_OSUBV_BIT:
+		canonical_unit_bits = unit_bits = 1;
+		bpc = OS__BPC_BIT;
+		break;
+	case ASN_OSUBV_ANY:
+	case ASN_OSUBV_STR:
+		canonical_unit_bits = unit_bits = 8;
+/* 		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+*/
+		bpc = OS__BPC_CHAR;
+		break;
+	case ASN_OSUBV_U16:
+		canonical_unit_bits = unit_bits = 16;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U16;
+		break;
+	case ASN_OSUBV_U32:
+		canonical_unit_bits = unit_bits = 32;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U32;
+		break;
+	}
+
+	/*
+	 * Allocate the string.
+	 */
+	if(!st) {
+		st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+		if(!st) RETURN(RC_FAIL);
+	}
+
+	ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+		csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+		csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+	if(csiz->flags & APC_EXTENSIBLE) {
+		int inext = per_get_few_bits(pd, 1);
+		if(inext < 0) RETURN(RC_WMORE);
+		if(inext) {
+			csiz = &asn_DEF_OCTET_STRING_constraints.size;
+			cval = &asn_DEF_OCTET_STRING_constraints.value;
+			unit_bits = canonical_unit_bits;
+		}
+	}
+
+	if(csiz->effective_bits >= 0) {
+		FREEMEM(st->buf);
+		if(bpc) {
+			st->size = csiz->upper_bound * bpc;
+		} else {
+			st->size = (csiz->upper_bound + 7) >> 3;
+		}
+		st->buf = (uint8_t *)MALLOC(st->size + 1);
+		if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+	}
+
+	/* X.691, #16.5: zero-length encoding */
+	/* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+	/* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+	if(csiz->effective_bits == 0) {
+		int ret;
+		if (st->size > 2) { /* X.691 #16 NOTE 1 */
+			if (aper_get_align(pd) < 0)
+				RETURN(RC_FAIL);
+		}
+		if(bpc) {
+			ASN_DEBUG("Decoding OCTET STRING size %ld",
+				csiz->upper_bound);
+			ret = OCTET_STRING_per_get_characters(pd, st->buf,
+				csiz->upper_bound, bpc, unit_bits,
+				cval->lower_bound, cval->upper_bound, pc);
+			if(ret > 0) RETURN(RC_FAIL);
+		} else {
+			ASN_DEBUG("Decoding BIT STRING size %ld",
+				csiz->upper_bound);
+			ret = per_get_many_bits(pd, st->buf, 0,
+					    unit_bits * csiz->upper_bound);
+		}
+		if(ret < 0) RETURN(RC_WMORE);
+		consumed_myself += unit_bits * csiz->upper_bound;
+		st->buf[st->size] = 0;
+		if(bpc == 0) {
+			int ubs = (csiz->upper_bound & 0x7);
+			st->bits_unused = ubs ? 8 - ubs : 0;
+		}
+		RETURN(RC_OK);
+	}
+
+	st->size = 0;
+	do {
+		ssize_t raw_len;
+		ssize_t len_bytes;
+		ssize_t len_bits;
+		void *p;
+		int ret;
+
+		/* Get the PER length */
+		if (csiz->upper_bound - csiz->lower_bound == 0)
+			/* Indefinite length case */
+			raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat);
+		else
+			raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat);
+		repeat = 0;
+		if(raw_len < 0) RETURN(RC_WMORE);
+		raw_len += csiz->lower_bound;
+
+		ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+			(long)csiz->effective_bits, (long)raw_len,
+			repeat ? "repeat" : "once", td->name);
+
+		if (raw_len > 2) { /* X.691 #16 NOTE 1 */
+			if (aper_get_align(pd) < 0)
+				RETURN(RC_FAIL);
+		}
+
+		if(bpc) {
+			len_bytes = raw_len * bpc;
+			len_bits = len_bytes * unit_bits;
+		} else {
+			len_bits = raw_len;
+			len_bytes = (len_bits + 7) >> 3;
+			if(len_bits & 0x7)
+				st->bits_unused = 8 - (len_bits & 0x7);
+			/* len_bits be multiple of 16K if repeat is set */
+		}
+		p = REALLOC(st->buf, st->size + len_bytes + 1);
+		if(!p) RETURN(RC_FAIL);
+		st->buf = (uint8_t *)p;
+
+		if(bpc) {
+			ret = OCTET_STRING_per_get_characters(pd,
+				&st->buf[st->size], raw_len, bpc, unit_bits,
+				cval->lower_bound, cval->upper_bound, pc);
+			if(ret > 0) RETURN(RC_FAIL);
+		} else {
+			ret = per_get_many_bits(pd, &st->buf[st->size],
+				0, len_bits);
+		}
+		if(ret < 0) RETURN(RC_WMORE);
+		st->size += len_bytes;
+	} while(repeat);
+	st->buf[st->size] = 0;	/* nul-terminate */
+
+	return rval;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         const void *sptr, asn_per_outp_t *po) {
+
+	const asn_OCTET_STRING_specifics_t *specs = td->specifics
+		? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		: &asn_SPC_OCTET_STRING_specs;
+	const asn_per_constraints_t *pc = constraints ? constraints
+	: td->encoding_constraints.per_constraints;
+	const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	asn_enc_rval_t er = { 0, 0, 0 };
+	int inext = 0;          /* Lies not within extension root */
+	unsigned int unit_bits;
+	unsigned int canonical_unit_bits;
+	unsigned int sizeinunits;
+	const uint8_t *buf;
+	int ret;
+	enum {
+		OS__BPC_BIT     = 0,
+		OS__BPC_CHAR    = 1,
+		OS__BPC_U16     = 2,
+		OS__BPC_U32     = 4
+	} bpc;  /* Bytes per character */
+	int ct_extensible;
+
+	if(!st || (!st->buf && st->size))
+		ASN__ENCODE_FAILED;
+
+	if(pc) {
+		cval = &pc->value;
+		csiz = &pc->size;
+	} else {
+		cval = &asn_DEF_OCTET_STRING_constraints.value;
+		csiz = &asn_DEF_OCTET_STRING_constraints.size;
+	}
+	ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+	switch(specs->subvariant) {
+		default:
+			/*         case ASN_OSUBV_ANY:
+			                 ASN__ENCODE_FAILED;
+			*/
+		case ASN_OSUBV_BIT:
+			canonical_unit_bits = unit_bits = 1;
+			bpc = OS__BPC_BIT;
+			sizeinunits = st->size * 8 - (st->bits_unused & 0x07);
+			ASN_DEBUG("BIT STRING of %d bytes",
+								sizeinunits);
+		break;
+        case ASN_OSUBV_ANY:
+	case ASN_OSUBV_STR:
+		canonical_unit_bits = unit_bits = 8;
+/* 		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = 8;
+*/
+		bpc = OS__BPC_CHAR;
+		sizeinunits = st->size;
+		break;
+	case ASN_OSUBV_U16:
+		canonical_unit_bits = unit_bits = 16;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U16;
+		sizeinunits = st->size / 2;
+		break;
+	case ASN_OSUBV_U32:
+		canonical_unit_bits = unit_bits = 32;
+		if(cval->flags & APC_CONSTRAINED)
+			unit_bits = cval->range_bits;
+		bpc = OS__BPC_U32;
+		sizeinunits = st->size / 4;
+		break;
+	}
+
+	ASN_DEBUG("Encoding %s into %d units of %d bits"
+		" (%ld..%ld, effective %d)%s",
+		td->name, sizeinunits, unit_bits,
+		csiz->lower_bound, csiz->upper_bound,
+		csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+	/* Figure out wheter size lies within PER visible constraint */
+
+	if(csiz->effective_bits >= 0) {
+		if((int)sizeinunits < csiz->lower_bound
+		|| (int)sizeinunits > csiz->upper_bound) {
+			if(ct_extensible) {
+				cval = &asn_DEF_OCTET_STRING_constraints.value;
+				csiz = &asn_DEF_OCTET_STRING_constraints.size;
+				unit_bits = canonical_unit_bits;
+				inext = 1;
+			} else
+				ASN__ENCODE_FAILED;
+		}
+	} else {
+		inext = 0;
+	}
+
+
+	if(ct_extensible) {
+		/* Declare whether length is [not] within extension root */
+		if(per_put_few_bits(po, inext, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+	/* X.691, #16.5: zero-length encoding */
+	/* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+	/* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+	if(csiz->effective_bits >= 0) {
+		ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits",
+				st->size, sizeinunits - csiz->lower_bound,
+				csiz->effective_bits);
+		if (csiz->effective_bits > 0) {
+		        ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound);
+		        if(ret) ASN__ENCODE_FAILED;
+		}
+		if (st->size > 2) { /* X.691 #16 NOTE 1 */
+			if (aper_put_align(po) < 0)
+				ASN__ENCODE_FAILED;
+		}
+		if(bpc) {
+			ret = OCTET_STRING_per_put_characters(po, st->buf,
+				sizeinunits, bpc, unit_bits,
+				cval->lower_bound, cval->upper_bound, pc);
+		} else {
+			ret = per_put_many_bits(po, st->buf,
+				sizeinunits * unit_bits);
+		}
+		if(ret) ASN__ENCODE_FAILED;
+		ASN__ENCODED_OK(er);
+	}
+
+	ASN_DEBUG("Encoding %lu bytes", st->size);
+
+	if(sizeinunits == 0) {
+		if(aper_put_length(po, -1, 0))
+			ASN__ENCODE_FAILED;
+		ASN__ENCODED_OK(er);
+	}
+
+	buf = st->buf;
+	while(sizeinunits) {
+		ssize_t maySave = aper_put_length(po, -1, sizeinunits);
+
+		if(maySave < 0) ASN__ENCODE_FAILED;
+
+		ASN_DEBUG("Encoding %ld of %ld",
+			(long)maySave, (long)sizeinunits);
+
+		if(bpc) {
+			ret = OCTET_STRING_per_put_characters(po, buf,
+				maySave, bpc, unit_bits,
+				cval->lower_bound, cval->upper_bound, pc);
+		} else {
+			ret = per_put_many_bits(po, buf, maySave * unit_bits);
+		}
+		if(ret) ASN__ENCODE_FAILED;
+
+		if(bpc)
+			buf += maySave * bpc;
+		else
+			buf += maySave >> 3;
+		sizeinunits -= maySave;
+		assert(!(maySave & 0x07) || !sizeinunits);
+	}
+
+	ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	char scratch[16 * 3 + 4];
+	char *p = scratch;
+	uint8_t *buf;
+	uint8_t *end;
+	size_t i;
+
+	(void)td;	/* Unused argument */
+
+	if(!st || (!st->buf && st->size))
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	/*
+	 * Dump the contents of the buffer in hexadecimal.
+	 */
+	buf = st->buf;
+	end = buf + st->size;
+	for(i = 0; buf < end; buf++, i++) {
+		if(!(i % 16) && (i || st->size > 16)) {
+			if(cb(scratch, p - scratch, app_key) < 0)
+				return -1;
+			_i_INDENT(1);
+			p = scratch;
+		}
+		*p++ = h2c[(*buf >> 4) & 0x0F];
+		*p++ = h2c[*buf & 0x0F];
+		*p++ = 0x20;
+	}
+
+	if(p > scratch) {
+		p--;	/* Remove the tail space */
+		if(cb(scratch, p - scratch, app_key) < 0)
+			return -1;
+	}
+
+	return 0;
+}
+
+int
+OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, asn_app_consume_bytes_f *cb,
+                        void *app_key) {
+    const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+
+	(void)td;	/* Unused argument */
+	(void)ilevel;	/* Unused argument */
+
+	if(st && (st->buf || !st->size)) {
+		return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0;
+	} else {
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+	}
+}
+
+void
+OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr,
+                  enum asn_struct_free_method method) {
+	OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+	const asn_OCTET_STRING_specifics_t *specs;
+	asn_struct_ctx_t *ctx;
+	struct _stack *stck;
+
+	if(!td || !st)
+		return;
+
+	specs = td->specifics
+		    ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+		    : &asn_SPC_OCTET_STRING_specs;
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+	ASN_DEBUG("Freeing %s as OCTET STRING", td->name);
+
+	if(st->buf) {
+		FREEMEM(st->buf);
+		st->buf = 0;
+	}
+
+	/*
+	 * Remove decode-time stack.
+	 */
+	stck = (struct _stack *)ctx->ptr;
+	if(stck) {
+		while(stck->tail) {
+			struct _stack_el *sel = stck->tail;
+			stck->tail = sel->prev;
+			FREEMEM(sel);
+		}
+		FREEMEM(stck);
+	}
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(sptr, 0,
+               td->specifics
+                   ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics))
+                         ->struct_size
+                   : sizeof(OCTET_STRING_t));
+        break;
+    }
+}
+
+/*
+ * Conversion routines.
+ */
+int
+OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) {
+	void *buf;
+
+	if(st == 0 || (str == 0 && len)) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	/*
+	 * Clear the OCTET STRING.
+	 */
+	if(str == NULL) {
+		FREEMEM(st->buf);
+		st->buf = 0;
+		st->size = 0;
+		return 0;
+	}
+
+	/* Determine the original string size, if not explicitly given */
+	if(len < 0)
+		len = strlen(str);
+
+	/* Allocate and fill the memory */
+	buf = MALLOC(len + 1);
+	if(buf == NULL)
+		return -1;
+
+	memcpy(buf, str, len);
+	((uint8_t *)buf)[len] = '\0';	/* Couldn't use memcpy(len+1)! */
+	FREEMEM(st->buf);
+	st->buf = (uint8_t *)buf;
+	st->size = len;
+
+	return 0;
+}
+
+OCTET_STRING_t *
+OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str,
+                         int len) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_OCTET_STRING_specs;
+    OCTET_STRING_t *st;
+
+	st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
+	if(st && str && OCTET_STRING_fromBuf(st, str, len)) {
+		FREEMEM(st);
+		st = NULL;
+	}
+
+	return st;
+}
+
+/*
+ * Lexicographically compare the common prefix of both strings,
+ * and if it is the same return -1 for the smallest string.
+ */
+int
+OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                     const void *bptr) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics;
+    const OCTET_STRING_t *a = aptr;
+    const OCTET_STRING_t *b = bptr;
+
+    assert(!specs || specs->subvariant != ASN_OSUBV_BIT);
+
+    if(a && b) {
+        size_t common_prefix_size = a->size <= b->size ? a->size : b->size;
+        int ret = memcmp(a->buf, b->buf, common_prefix_size);
+        if(ret == 0) {
+            /* Figure out which string with equal prefixes is longer. */
+            if(a->size < b->size) {
+                return -1;
+            } else if(a->size > b->size) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else {
+            return ret < 0 ? -1 : 1;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+
+}
+
+/*
+ * Biased function for randomizing character values around their limits.
+ */
+static uint32_t
+OCTET_STRING__random_char(unsigned long lb, unsigned long ub) {
+    assert(lb <= ub);
+    switch(asn_random_between(0, 16)) {
+    case 0:
+        if(lb < ub) return lb + 1;
+        /* Fall through */
+    case 1:
+        return lb;
+    case 2:
+        if(lb < ub) return ub - 1;
+        /* Fall through */
+    case 3:
+        return ub;
+    default:
+        return asn_random_between(lb, ub);
+    }
+}
+
+
+size_t
+OCTET_STRING_random_length_constrained(
+    const asn_TYPE_descriptor_t *td,
+    const asn_encoding_constraints_t *constraints, size_t max_length) {
+    const unsigned lengths[] = {0,     1,     2,     3,     4,     8,
+                                126,   127,   128,   16383, 16384, 16385,
+                                65534, 65535, 65536, 65537};
+    size_t rnd_len;
+
+    /* Figure out how far we should go */
+    rnd_len = lengths[asn_random_between(
+        0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_CONSTRAINED) {
+            long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length
+                                             ? pc->upper_bound
+                                             : (ssize_t)max_length;
+            if(max_length <= (size_t)pc->lower_bound) {
+                return pc->lower_bound;
+            }
+            if(pc->flags & APC_EXTENSIBLE) {
+                switch(asn_random_between(0, 5)) {
+                case 0:
+                    if(pc->lower_bound > 0) {
+                        rnd_len = pc->lower_bound - 1;
+                        break;
+                    }
+                    /* Fall through */
+                case 1:
+                    rnd_len = pc->upper_bound + 1;
+                    break;
+                case 2:
+                    /* Keep rnd_len from the table */
+                    if(rnd_len <= max_length) {
+                        break;
+                    }
+                    /* Fall through */
+                default:
+                    rnd_len = asn_random_between(pc->lower_bound,
+                                                 suggested_upper_bound);
+                }
+            } else {
+                rnd_len =
+                    asn_random_between(pc->lower_bound, suggested_upper_bound);
+            }
+        } else {
+            rnd_len = asn_random_between(0, max_length);
+        }
+    } else if(rnd_len > max_length) {
+        rnd_len = asn_random_between(0, max_length);
+    }
+
+    return rnd_len;
+}
+
+asn_random_fill_result_t
+OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                         const asn_encoding_constraints_t *constraints,
+                         size_t max_length) {
+	const asn_OCTET_STRING_specifics_t *specs = td->specifics
+				? (const asn_OCTET_STRING_specifics_t *)td->specifics
+				: &asn_SPC_OCTET_STRING_specs;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    unsigned int unit_bytes = 1;
+    unsigned long clb = 0;  /* Lower bound on char */
+    unsigned long cub = 255;  /* Higher bound on char value */
+    uint8_t *buf;
+    uint8_t *bend;
+    uint8_t *b;
+    size_t rnd_len;
+    OCTET_STRING_t *st;
+
+    if(max_length == 0 && !*sptr) return result_skipped;
+
+    switch(specs->subvariant) {
+    default:
+    case ASN_OSUBV_ANY:
+        return result_failed;
+    case ASN_OSUBV_BIT:
+        /* Handled by BIT_STRING itself. */
+        return result_failed;
+    case ASN_OSUBV_STR:
+        unit_bytes = 1;
+        clb = 0;
+        cub = 255;
+        break;
+    case ASN_OSUBV_U16:
+        unit_bytes = 2;
+        clb = 0;
+        cub = 65535;
+        break;
+    case ASN_OSUBV_U32:
+        unit_bytes = 4;
+        clb = 0;
+        cub = 0x10FFFF;
+        break;
+    }
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->value;
+        if(pc->flags & APC_SEMI_CONSTRAINED) {
+            clb = pc->lower_bound;
+        } else if(pc->flags & APC_CONSTRAINED) {
+            clb = pc->lower_bound;
+            cub = pc->upper_bound;
+        }
+    }
+
+    rnd_len =
+        OCTET_STRING_random_length_constrained(td, constraints, max_length);
+
+    buf = CALLOC(unit_bytes, rnd_len + 1);
+    if(!buf) return result_failed;
+
+    bend = &buf[unit_bytes * rnd_len];
+
+    switch(unit_bytes) {
+    case 1:
+        for(b = buf; b < bend; b += unit_bytes) {
+            *(uint8_t *)b = OCTET_STRING__random_char(clb, cub);
+        }
+        *(uint8_t *)b = 0;
+        break;
+    case 2:
+        for(b = buf; b < bend; b += unit_bytes) {
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 8;
+            b[1] = code;
+        }
+        *(uint16_t *)b = 0;
+        break;
+    case 4:
+        for(b = buf; b < bend; b += unit_bytes) {
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 24;
+            b[1] = code >> 16;
+            b[2] = code >> 8;
+            b[3] = code;
+        }
+        *(uint32_t *)b = 0;
+        break;
+    }
+
+    if(*sptr) {
+        st = *sptr;
+        FREEMEM(st->buf);
+    } else {
+        st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) {
+            FREEMEM(buf);
+            return result_failed;
+        }
+    }
+
+    st->buf = buf;
+    st->size = unit_bytes * rnd_len;
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/asn1c_defs/OCTET_STRING.h b/asn1c_defs/OCTET_STRING.h
new file mode 100644
index 0000000..c2f8bae
--- /dev/null
+++ b/asn1c_defs/OCTET_STRING.h
@@ -0,0 +1,102 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_OCTET_STRING_H_
+#define	_OCTET_STRING_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct OCTET_STRING {
+	uint8_t *buf;	/* Buffer with consecutive OCTET_STRING bits */
+	size_t size;	/* Size of the buffer */
+
+	asn_struct_ctx_t _asn_ctx;	/* Parsing across buffer boundaries */
+} OCTET_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING;
+extern asn_TYPE_operation_t asn_OP_OCTET_STRING;
+
+asn_struct_free_f OCTET_STRING_free;
+asn_struct_print_f OCTET_STRING_print;
+asn_struct_print_f OCTET_STRING_print_utf8;
+asn_struct_compare_f OCTET_STRING_compare;
+ber_type_decoder_f OCTET_STRING_decode_ber;
+der_type_encoder_f OCTET_STRING_encode_der;
+xer_type_decoder_f OCTET_STRING_decode_xer_hex;		/* Hexadecimal */
+xer_type_decoder_f OCTET_STRING_decode_xer_binary;	/* 01010111010 */
+xer_type_decoder_f OCTET_STRING_decode_xer_utf8;	/* ASCII/UTF-8 */
+xer_type_encoder_f OCTET_STRING_encode_xer;
+xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
+oer_type_decoder_f OCTET_STRING_decode_oer;
+oer_type_encoder_f OCTET_STRING_encode_oer;
+per_type_decoder_f OCTET_STRING_decode_uper;
+per_type_encoder_f OCTET_STRING_encode_uper;
+per_type_decoder_f OCTET_STRING_decode_aper;
+per_type_encoder_f OCTET_STRING_encode_aper;
+asn_random_fill_f  OCTET_STRING_random_fill;
+
+#define OCTET_STRING_constraint  asn_generic_no_constraint
+#define OCTET_STRING_decode_xer  OCTET_STRING_decode_xer_hex
+
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/*
+ * This function clears the previous value of the OCTET STRING (if any)
+ * and then allocates a new memory with the specified content (str/size).
+ * If size = -1, the size of the original string will be determined
+ * using strlen(str).
+ * If str equals to NULL, the function will silently clear the
+ * current contents of the OCTET STRING.
+ * Returns 0 if it was possible to perform operation, -1 otherwise.
+ */
+int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);
+
+/* Handy conversion from the C string into the OCTET STRING. */
+#define	OCTET_STRING_fromString(s, str)	OCTET_STRING_fromBuf(s, str, -1)
+
+/*
+ * Allocate and fill the new OCTET STRING and return a pointer to the newly
+ * allocated object. NULL is permitted in str: the function will just allocate
+ * empty OCTET STRING.
+ */
+OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td,
+                                         const char *str, int size);
+
+/****************************
+ * Internally useful stuff. *
+ ****************************/
+
+typedef struct asn_OCTET_STRING_specifics_s {
+    /*
+     * Target structure description.
+     */
+    unsigned struct_size;   /* Size of the structure */
+    unsigned ctx_offset;    /* Offset of the asn_struct_ctx_t member */
+
+    enum asn_OS_Subvariant {
+        ASN_OSUBV_ANY, /* The open type (ANY) */
+        ASN_OSUBV_BIT, /* BIT STRING */
+        ASN_OSUBV_STR, /* String types, not {BMP,Universal}String  */
+        ASN_OSUBV_U16, /* 16-bit character (BMPString) */
+        ASN_OSUBV_U32  /* 32-bit character (UniversalString) */
+    } subvariant;
+} asn_OCTET_STRING_specifics_t;
+
+extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs;
+
+size_t OCTET_STRING_random_length_constrained(
+    const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *,
+    size_t max_length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _OCTET_STRING_H_ */
diff --git a/asn1c_defs/OPEN_TYPE.c b/asn1c_defs/OPEN_TYPE.c
new file mode 100644
index 0000000..a54e99c
--- /dev/null
+++ b/asn1c_defs/OPEN_TYPE.c
@@ -0,0 +1,509 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <per_opentype.h>
+#include <errno.h>
+
+asn_TYPE_operation_t asn_OP_OPEN_TYPE = {
+	OPEN_TYPE_free,
+	OPEN_TYPE_print,
+	OPEN_TYPE_compare,
+	OPEN_TYPE_decode_ber,
+	OPEN_TYPE_encode_der,
+	OPEN_TYPE_decode_xer,
+	OPEN_TYPE_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+ 	0, 0,	/* No OER support, use "-gen-OER" to enable */
+#else
+	OPEN_TYPE_decode_oer,
+	OPEN_TYPE_encode_oer,
+#endif
+#ifdef ASN_DISABLE_PER_SUPPORT
+	0, 0, 0, 0,
+#else
+	OPEN_TYPE_decode_uper,
+	OPEN_TYPE_encode_uper,
+	OPEN_TYPE_decode_aper,
+	OPEN_TYPE_encode_aper,
+#endif
+	0,  /* Random fill is not supported for open type */
+	0	/* Use generic outmost tag fetcher */
+};
+
+#undef  ADVANCE
+#define ADVANCE(num_bytes)               \
+    do {                                 \
+        size_t num = num_bytes;          \
+        ptr = ((const char *)ptr) + num; \
+        size -= num;                     \
+        consumed_myself += num;          \
+    } while(0)
+
+asn_dec_rval_t
+OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void *sptr,
+                  const asn_TYPE_member_t *elm, const void *ptr, size_t size) {
+    size_t consumed_myself = 0;
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    ASN_DEBUG("presence %d\n", selected.presence_index);
+
+    rv = selected.type_descriptor->op->ber_decoder(
+        opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size,
+        elm->tag_mode);
+    ADVANCE(rv.consumed);
+    rv.consumed = 0;
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            rv.code = RC_OK;
+            rv.consumed = consumed_myself;
+            return rv;
+        } else {
+            /* Oh, now a full-blown failure failure */
+        }
+        /* Fall through */
+    case RC_FAIL:
+        rv.consumed = consumed_myself;
+        /* Fall through */
+    case RC_WMORE:
+        break;
+    }
+
+    if(*memb_ptr2) {
+        if(elm->flags & ATF_POINTER) {
+            ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+            *memb_ptr2 = NULL;
+        } else {
+            ASN_STRUCT_RESET(*selected.type_descriptor,
+                                          inner_value);
+        }
+    }
+    return rv;
+}
+
+asn_dec_rval_t
+OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void *sptr,
+                  const asn_TYPE_member_t *elm, const void *ptr, size_t size) {
+    size_t consumed_myself = 0;
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    int xer_context = 0;
+    ssize_t ch_size;
+    pxer_chunk_type_e ch_type;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    /*
+     * Confirm wrapper.
+     */
+    for(;;) {
+        ch_size = xer_next_token(&xer_context, ptr, size, &ch_type);
+        if(ch_size < 0) {
+            ASN__DECODE_FAILED;
+        } else {
+            switch(ch_type) {
+            case PXER_WMORE:
+                ASN__DECODE_STARVED;
+            case PXER_COMMENT:
+            case PXER_TEXT:
+                ADVANCE(ch_size);
+                continue;
+            case PXER_TAG:
+                break;
+            }
+            break;
+        }
+    }
+
+    /*
+     * Wrapper value confirmed.
+     */
+    switch(xer_check_tag(ptr, ch_size, elm->name)) {
+    case XCT_OPENING:
+        ADVANCE(ch_size);
+        break;
+    case XCT_BROKEN:
+    default:
+        ASN__DECODE_FAILED;
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = selected.type_descriptor->op->xer_decoder(
+        opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size);
+    ADVANCE(rv.consumed);
+    rv.consumed = 0;
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_FAIL:
+        /* Point to a best position where failure occurred */
+        rv.consumed = consumed_myself;
+        /* Fall through */
+    case RC_WMORE:
+        /* Wrt. rv.consumed==0:
+         * In case a genuine RC_WMORE, the whole Open Type decoding
+         * will have to be restarted.
+         */
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+        return rv;
+    }
+
+    /*
+     * Finalize wrapper.
+     */
+    for(;;) {
+        ch_size = xer_next_token(&xer_context, ptr, size, &ch_type);
+        if(ch_size < 0) {
+            ASN__DECODE_FAILED;
+        } else {
+            switch(ch_type) {
+            case PXER_WMORE:
+                ASN__DECODE_STARVED;
+            case PXER_COMMENT:
+            case PXER_TEXT:
+                ADVANCE(ch_size);
+                continue;
+            case PXER_TAG:
+                break;
+            }
+            break;
+        }
+    }
+
+    /*
+     * Wrapper value confirmed.
+     */
+    switch(xer_check_tag(ptr, ch_size, elm->name)) {
+    case XCT_CLOSING:
+        ADVANCE(ch_size);
+        break;
+    case XCT_BROKEN:
+    default:
+        ASN__DECODE_FAILED;
+    }
+
+    rv.consumed += consumed_myself;
+
+    return rv;
+}
+
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void *sptr,
+                   const asn_TYPE_member_t *elm, asn_per_data_t *pd) {
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
+                            &inner_value, pd);
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_WMORE:
+    case RC_FAIL:
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+    }
+    return rv;
+}
+
+asn_enc_rval_t
+OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, asn_per_outp_t *po) {
+    const void *memb_ptr;   /* Pointer to the member */
+    asn_TYPE_member_t *elm; /* CHOICE's element */
+    asn_enc_rval_t er = {0,0,0};
+    unsigned present;
+
+    (void)constraints;
+
+    present = CHOICE_variant_get_presence(td, sptr);
+    if(present == 0 || present > td->elements_count) {
+        ASN__ENCODE_FAILED;
+    } else {
+        present--;
+    }
+
+    ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present);
+
+    elm = &td->elements[present];
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+    } else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = 0;
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void *sptr,
+                   const asn_TYPE_member_t *elm, asn_per_data_t *pd) {
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
+                            &inner_value, pd);
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_WMORE:
+    case RC_FAIL:
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+    }
+    return rv;
+}
+
+asn_enc_rval_t
+OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, asn_per_outp_t *po) {
+    const void *memb_ptr;   /* Pointer to the member */
+    asn_TYPE_member_t *elm; /* CHOICE's element */
+    asn_enc_rval_t er = {0,0,0};
+    unsigned present;
+
+    (void)constraints;
+
+    present = CHOICE_variant_get_presence(td, sptr);
+    if(present == 0 || present > td->elements_count) {
+        ASN__ENCODE_FAILED;
+    } else {
+        present--;
+    }
+
+    ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present);
+
+    elm = &td->elements[present];
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+    } else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = 0;
+    ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
diff --git a/asn1c_defs/OPEN_TYPE.h b/asn1c_defs/OPEN_TYPE.h
new file mode 100644
index 0000000..b0d023c
--- /dev/null
+++ b/asn1c_defs/OPEN_TYPE.h
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 2017-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_OPEN_TYPE_H
+#define ASN_OPEN_TYPE_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OPEN_TYPE_free CHOICE_free
+#define OPEN_TYPE_print CHOICE_print
+#define OPEN_TYPE_compare CHOICE_compare
+#define OPEN_TYPE_constraint CHOICE_constraint
+#define OPEN_TYPE_decode_ber NULL
+#define OPEN_TYPE_encode_der CHOICE_encode_der
+#define OPEN_TYPE_decode_xer NULL
+#define OPEN_TYPE_encode_xer CHOICE_encode_xer
+#define OPEN_TYPE_decode_oer NULL
+#define OPEN_TYPE_encode_oer CHOICE_encode_oer
+#define OPEN_TYPE_decode_uper NULL
+#define OPEN_TYPE_decode_aper NULL
+
+extern asn_TYPE_operation_t asn_OP_OPEN_TYPE;
+
+/*
+ * Decode an Open Type which is potentially constraiend
+ * by the other members of the parent structure.
+ */
+asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 const asn_TYPE_member_t *element,
+                                 const void *ptr, size_t size);
+
+asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 const asn_TYPE_member_t *element,
+                                 const void *ptr, size_t size);
+
+asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 asn_TYPE_member_t *element, const void *ptr,
+                                 size_t size);
+
+asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *parent_type,
+                                  void *parent_structure,
+                                  const asn_TYPE_member_t *element,
+                                  asn_per_data_t *pd);
+
+asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *parent_type,
+                                  void *parent_structure,
+                                  const asn_TYPE_member_t *element,
+                                  asn_per_data_t *pd);
+
+asn_enc_rval_t OPEN_TYPE_encode_uper(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+asn_enc_rval_t OPEN_TYPE_encode_aper(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_OPEN_TYPE_H */
diff --git a/asn1c_defs/PrintableString.c b/asn1c_defs/PrintableString.c
new file mode 100644
index 0000000..8fc3939
--- /dev/null
+++ b/asn1c_defs/PrintableString.c
@@ -0,0 +1,130 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <PrintableString.h>
+
+/*
+ * ASN.1:1984 (X.409)
+ */
+static const int _PrintableString_alphabet[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,	/* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,	/* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,	/*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,	/* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,	/*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,	/* pqrstuvwxyz      */
+};
+static const int _PrintableString_code2value[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122};
+
+/*
+ * PrintableString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (19 << 2)),	/* [UNIVERSAL 19] IMPLICIT ...*/
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))	/* ... OCTET STRING */
+};
+static int asn_DEF_PrintableString_v2c(unsigned int value) {
+	return _PrintableString_alphabet[value > 255 ? 0 : value] - 1;
+}
+static int asn_DEF_PrintableString_c2v(unsigned int code) {
+	if(code < 74)
+		return _PrintableString_code2value[code];
+	return -1;
+}
+static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = {
+	{ APC_CONSTRAINED, 4, 4, 0x20, 0x39 },	/* Value */
+	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
+	asn_DEF_PrintableString_v2c,
+	asn_DEF_PrintableString_c2v
+};
+asn_TYPE_operation_t asn_OP_PrintableString = {
+	OCTET_STRING_free,
+	OCTET_STRING_print_utf8,	/* ASCII subset */
+	OCTET_STRING_compare,
+	OCTET_STRING_decode_ber,      /* Implemented in terms of OCTET STRING */
+	OCTET_STRING_encode_der,
+	OCTET_STRING_decode_xer_utf8,
+	OCTET_STRING_encode_xer_utf8,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	OCTET_STRING_decode_oer,
+	OCTET_STRING_encode_oer,
+#endif	/* ASN_DISABLE_OER_SUPPORT */
+#ifdef	ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	OCTET_STRING_decode_uper,
+	OCTET_STRING_encode_uper,
+	OCTET_STRING_decode_aper,
+	OCTET_STRING_encode_aper,
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	OCTET_STRING_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_PrintableString = {
+	"PrintableString",
+	"PrintableString",
+	&asn_OP_PrintableString,
+	asn_DEF_PrintableString_tags,
+	sizeof(asn_DEF_PrintableString_tags)
+	  / sizeof(asn_DEF_PrintableString_tags[0]) - 1,
+	asn_DEF_PrintableString_tags,
+	sizeof(asn_DEF_PrintableString_tags)
+	  / sizeof(asn_DEF_PrintableString_tags[0]),
+	{ 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+
+int
+PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const PrintableString_t *st = (const PrintableString_t *)sptr;
+
+	if(st && st->buf) {
+		uint8_t *buf = st->buf;
+		uint8_t *end = buf + st->size;
+
+		/*
+		 * Check the alphabet of the PrintableString.
+		 * ASN.1:1984 (X.409)
+		 */
+		for(; buf < end; buf++) {
+			if(!_PrintableString_alphabet[*buf]) {
+				ASN__CTFAIL(app_key, td, sptr,
+					"%s: value byte %ld (%d) "
+					"not in PrintableString alphabet "
+					"(%s:%d)",
+					td->name,
+					(long)((buf - st->buf) + 1),
+					*buf,
+					__FILE__, __LINE__);
+				return -1;
+			}
+		}
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
diff --git a/asn1c_defs/PrintableString.h b/asn1c_defs/PrintableString.h
new file mode 100644
index 0000000..8c2b61a
--- /dev/null
+++ b/asn1c_defs/PrintableString.h
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PrintableString_H_
+#define	_PrintableString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t PrintableString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_PrintableString;
+extern asn_TYPE_operation_t asn_OP_PrintableString;
+
+asn_constr_check_f PrintableString_constraint;
+
+#define PrintableString_free            OCTET_STRING_free
+#define PrintableString_print           OCTET_STRING_print_utf8
+#define PrintableString_compare         OCTET_STRING_compare
+#define PrintableString_decode_ber      OCTET_STRING_decode_ber
+#define PrintableString_encode_der      OCTET_STRING_encode_der
+#define PrintableString_decode_xer      OCTET_STRING_decode_xer_utf8
+#define PrintableString_encode_xer      OCTET_STRING_encode_xer_utf8
+#define PrintableString_decode_uper     OCTET_STRING_decode_uper
+#define PrintableString_encode_uper     OCTET_STRING_encode_uper
+#define PrintableString_decode_aper     OCTET_STRING_decode_aper
+#define PrintableString_encode_aper     OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PrintableString_H_ */
diff --git a/asn1c_defs/X2N_ABS-Status.c b/asn1c_defs/X2N_ABS-Status.c
new file mode 100644
index 0000000..bb4807b
--- /dev/null
+++ b/asn1c_defs/X2N_ABS-Status.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ABS-Status.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_ABS_Status_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABS_Status, dL_ABS_status),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_ABS_status,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-ABS-status"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABS_Status, usableABSInformation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_UsableABSInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"usableABSInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ABS_Status, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P106,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ABS_Status_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ABS_Status_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABS_Status_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-ABS-status */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* usableABSInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_ABS_Status_specs_1 = {
+	sizeof(struct X2N_ABS_Status),
+	offsetof(struct X2N_ABS_Status, _asn_ctx),
+	asn_MAP_X2N_ABS_Status_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ABS_Status_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABS_Status = {
+	"ABS-Status",
+	"ABS-Status",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABS_Status_tags_1,
+	sizeof(asn_DEF_X2N_ABS_Status_tags_1)
+		/sizeof(asn_DEF_X2N_ABS_Status_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ABS_Status_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABS_Status_tags_1)
+		/sizeof(asn_DEF_X2N_ABS_Status_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABS_Status_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ABS_Status_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ABS-Status.h b/asn1c_defs/X2N_ABS-Status.h
new file mode 100644
index 0000000..64c1935
--- /dev/null
+++ b/asn1c_defs/X2N_ABS-Status.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ABS_Status_H_
+#define	_X2N_ABS_Status_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_DL-ABS-status.h"
+#include "X2N_UsableABSInformation.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ABS-Status */
+typedef struct X2N_ABS_Status {
+	X2N_DL_ABS_status_t	 dL_ABS_status;
+	X2N_UsableABSInformation_t	 usableABSInformation;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABS_Status_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABS_Status;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ABS_Status_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ABSInformation.c b/asn1c_defs/X2N_ABSInformation.c
new file mode 100644
index 0000000..77497af
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformation.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ABSInformation.h"
+
+#include "X2N_ABSInformationFDD.h"
+#include "X2N_ABSInformationTDD.h"
+static asn_per_constraints_t asn_PER_type_X2N_ABSInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ABSInformation_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_ABSInformation, choice.fdd),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ABSInformationFDD,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fdd"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_ABSInformation, choice.tdd),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ABSInformationTDD,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tdd"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformation, choice.abs_inactive),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"abs-inactive"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABSInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tdd */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* abs-inactive */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_ABSInformation_specs_1 = {
+	sizeof(struct X2N_ABSInformation),
+	offsetof(struct X2N_ABSInformation, _asn_ctx),
+	offsetof(struct X2N_ABSInformation, present),
+	sizeof(((struct X2N_ABSInformation *)0)->present),
+	asn_MAP_X2N_ABSInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformation = {
+	"ABSInformation",
+	"ABSInformation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ABSInformation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ABSInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ABSInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ABSInformation.h b/asn1c_defs/X2N_ABSInformation.h
new file mode 100644
index 0000000..ca087ff
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformation.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ABSInformation_H_
+#define	_X2N_ABSInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ABSInformation_PR {
+	X2N_ABSInformation_PR_NOTHING,	/* No components present */
+	X2N_ABSInformation_PR_fdd,
+	X2N_ABSInformation_PR_tdd,
+	X2N_ABSInformation_PR_abs_inactive
+	/* Extensions may appear below */
+	
+} X2N_ABSInformation_PR;
+
+/* Forward declarations */
+struct X2N_ABSInformationFDD;
+struct X2N_ABSInformationTDD;
+
+/* X2N_ABSInformation */
+typedef struct X2N_ABSInformation {
+	X2N_ABSInformation_PR present;
+	union X2N_ABSInformation_u {
+		struct X2N_ABSInformationFDD	*fdd;
+		struct X2N_ABSInformationTDD	*tdd;
+		NULL_t	 abs_inactive;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABSInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ABSInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ABSInformationFDD.c b/asn1c_defs/X2N_ABSInformationFDD.c
new file mode 100644
index 0000000..0022fbb
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformationFDD.c
@@ -0,0 +1,205 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ABSInformationFDD.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 40)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_measurement_subset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 40)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_abs_pattern_info_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  40,  40 }	/* (SIZE(40..40)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_measurement_subset_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  40,  40 }	/* (SIZE(40..40)) */,
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_3[] = {
+	{ 0,	3,	"one" },
+	{ 1,	3,	"two" },
+	{ 2,	4,	"four" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_3[] = {
+	2,	/* four(2) */
+	0,	/* one(0) */
+	1	/* two(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_3 = {
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_3,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3 = {
+	"numberOfCellSpecificAntennaPorts",
+	"numberOfCellSpecificAntennaPorts",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3,
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ABSInformationFDD_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD, abs_pattern_info),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_abs_pattern_info_constr_2,  memb_X2N_abs_pattern_info_constraint_1 },
+		0, 0, /* No default value */
+		"abs-pattern-info"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD, numberOfCellSpecificAntennaPorts),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"numberOfCellSpecificAntennaPorts"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD, measurement_subset),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_measurement_subset_constr_8,  memb_X2N_measurement_subset_constraint_1 },
+		0, 0, /* No default value */
+		"measurement-subset"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ABSInformationFDD, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P104,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ABSInformationFDD_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ABSInformationFDD_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABSInformationFDD_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* abs-pattern-info */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* numberOfCellSpecificAntennaPorts */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurement-subset */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationFDD_specs_1 = {
+	sizeof(struct X2N_ABSInformationFDD),
+	offsetof(struct X2N_ABSInformationFDD, _asn_ctx),
+	asn_MAP_X2N_ABSInformationFDD_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ABSInformationFDD_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationFDD = {
+	"ABSInformationFDD",
+	"ABSInformationFDD",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABSInformationFDD_tags_1,
+	sizeof(asn_DEF_X2N_ABSInformationFDD_tags_1)
+		/sizeof(asn_DEF_X2N_ABSInformationFDD_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ABSInformationFDD_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABSInformationFDD_tags_1)
+		/sizeof(asn_DEF_X2N_ABSInformationFDD_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABSInformationFDD_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ABSInformationFDD_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ABSInformationFDD.h b/asn1c_defs/X2N_ABSInformationFDD.h
new file mode 100644
index 0000000..858ab0c
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformationFDD.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ABSInformationFDD_H_
+#define	_X2N_ABSInformationFDD_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ABSInformationFDD__numberOfCellSpecificAntennaPorts {
+	X2N_ABSInformationFDD__numberOfCellSpecificAntennaPorts_one	= 0,
+	X2N_ABSInformationFDD__numberOfCellSpecificAntennaPorts_two	= 1,
+	X2N_ABSInformationFDD__numberOfCellSpecificAntennaPorts_four	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ABSInformationFDD__numberOfCellSpecificAntennaPorts;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ABSInformationFDD */
+typedef struct X2N_ABSInformationFDD {
+	BIT_STRING_t	 abs_pattern_info;
+	long	 numberOfCellSpecificAntennaPorts;
+	BIT_STRING_t	 measurement_subset;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABSInformationFDD_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationFDD;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationFDD_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ABSInformationFDD_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ABSInformationFDD_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ABSInformationTDD.c b/asn1c_defs/X2N_ABSInformationTDD.c
new file mode 100644
index 0000000..f0e36f0
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformationTDD.c
@@ -0,0 +1,205 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ABSInformationTDD.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 70)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_measurement_subset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 70)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_abs_pattern_info_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  1,  70 }	/* (SIZE(1..70,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_measurement_subset_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  1,  70 }	/* (SIZE(1..70,...)) */,
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_3[] = {
+	{ 0,	3,	"one" },
+	{ 1,	3,	"two" },
+	{ 2,	4,	"four" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_3[] = {
+	2,	/* four(2) */
+	0,	/* one(0) */
+	1	/* two(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_3 = {
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_3,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3 = {
+	"numberOfCellSpecificAntennaPorts",
+	"numberOfCellSpecificAntennaPorts",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3,
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ABSInformationTDD_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD, abs_pattern_info),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_abs_pattern_info_constr_2,  memb_X2N_abs_pattern_info_constraint_1 },
+		0, 0, /* No default value */
+		"abs-pattern-info"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD, numberOfCellSpecificAntennaPorts),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"numberOfCellSpecificAntennaPorts"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD, measurement_subset),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_measurement_subset_constr_8,  memb_X2N_measurement_subset_constraint_1 },
+		0, 0, /* No default value */
+		"measurement-subset"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ABSInformationTDD, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P105,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ABSInformationTDD_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ABSInformationTDD_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABSInformationTDD_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* abs-pattern-info */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* numberOfCellSpecificAntennaPorts */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurement-subset */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationTDD_specs_1 = {
+	sizeof(struct X2N_ABSInformationTDD),
+	offsetof(struct X2N_ABSInformationTDD, _asn_ctx),
+	asn_MAP_X2N_ABSInformationTDD_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ABSInformationTDD_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationTDD = {
+	"ABSInformationTDD",
+	"ABSInformationTDD",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABSInformationTDD_tags_1,
+	sizeof(asn_DEF_X2N_ABSInformationTDD_tags_1)
+		/sizeof(asn_DEF_X2N_ABSInformationTDD_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ABSInformationTDD_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABSInformationTDD_tags_1)
+		/sizeof(asn_DEF_X2N_ABSInformationTDD_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABSInformationTDD_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ABSInformationTDD_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ABSInformationTDD.h b/asn1c_defs/X2N_ABSInformationTDD.h
new file mode 100644
index 0000000..2886ef4
--- /dev/null
+++ b/asn1c_defs/X2N_ABSInformationTDD.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ABSInformationTDD_H_
+#define	_X2N_ABSInformationTDD_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ABSInformationTDD__numberOfCellSpecificAntennaPorts {
+	X2N_ABSInformationTDD__numberOfCellSpecificAntennaPorts_one	= 0,
+	X2N_ABSInformationTDD__numberOfCellSpecificAntennaPorts_two	= 1,
+	X2N_ABSInformationTDD__numberOfCellSpecificAntennaPorts_four	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ABSInformationTDD__numberOfCellSpecificAntennaPorts;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ABSInformationTDD */
+typedef struct X2N_ABSInformationTDD {
+	BIT_STRING_t	 abs_pattern_info;
+	long	 numberOfCellSpecificAntennaPorts;
+	BIT_STRING_t	 measurement_subset;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABSInformationTDD_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_3;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationTDD;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationTDD_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ABSInformationTDD_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ABSInformationTDD_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AS-SecurityInformation.c b/asn1c_defs/X2N_AS-SecurityInformation.c
new file mode 100644
index 0000000..dcb9015
--- /dev/null
+++ b/asn1c_defs/X2N_AS-SecurityInformation.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AS-SecurityInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_AS_SecurityInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AS_SecurityInformation, key_eNodeB_star),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Key_eNodeB_Star,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"key-eNodeB-star"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AS_SecurityInformation, nextHopChainingCount),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NextHopChainingCount,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nextHopChainingCount"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_AS_SecurityInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P110,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_AS_SecurityInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_AS_SecurityInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AS_SecurityInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* key-eNodeB-star */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nextHopChainingCount */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AS_SecurityInformation_specs_1 = {
+	sizeof(struct X2N_AS_SecurityInformation),
+	offsetof(struct X2N_AS_SecurityInformation, _asn_ctx),
+	asn_MAP_X2N_AS_SecurityInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_AS_SecurityInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AS_SecurityInformation = {
+	"AS-SecurityInformation",
+	"AS-SecurityInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AS_SecurityInformation_tags_1,
+	sizeof(asn_DEF_X2N_AS_SecurityInformation_tags_1)
+		/sizeof(asn_DEF_X2N_AS_SecurityInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AS_SecurityInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AS_SecurityInformation_tags_1)
+		/sizeof(asn_DEF_X2N_AS_SecurityInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AS_SecurityInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_AS_SecurityInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AS-SecurityInformation.h b/asn1c_defs/X2N_AS-SecurityInformation.h
new file mode 100644
index 0000000..ca1fdb8
--- /dev/null
+++ b/asn1c_defs/X2N_AS-SecurityInformation.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AS_SecurityInformation_H_
+#define	_X2N_AS_SecurityInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Key-eNodeB-Star.h"
+#include "X2N_NextHopChainingCount.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_AS-SecurityInformation */
+typedef struct X2N_AS_SecurityInformation {
+	X2N_Key_eNodeB_Star_t	 key_eNodeB_star;
+	X2N_NextHopChainingCount_t	 nextHopChainingCount;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AS_SecurityInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AS_SecurityInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AS_SecurityInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_AS_SecurityInformation_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AS_SecurityInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ActivatedCellList-Item.c b/asn1c_defs/X2N_ActivatedCellList-Item.c
new file mode 100644
index 0000000..f227956
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedCellList-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ActivatedCellList-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ActivatedCellList_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedCellList_Item, ecgi),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ecgi"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ActivatedCellList_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P15,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ActivatedCellList_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedCellList_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ActivatedCellList_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ecgi */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedCellList_Item_specs_1 = {
+	sizeof(struct X2N_ActivatedCellList_Item),
+	offsetof(struct X2N_ActivatedCellList_Item, _asn_ctx),
+	asn_MAP_X2N_ActivatedCellList_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ActivatedCellList_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList_Item = {
+	"ActivatedCellList-Item",
+	"ActivatedCellList-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ActivatedCellList_Item_tags_1,
+	sizeof(asn_DEF_X2N_ActivatedCellList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ActivatedCellList_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedCellList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ActivatedCellList_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ActivatedCellList_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ActivatedCellList-Item.h b/asn1c_defs/X2N_ActivatedCellList-Item.h
new file mode 100644
index 0000000..39e2a4d
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedCellList-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ActivatedCellList_Item_H_
+#define	_X2N_ActivatedCellList_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ActivatedCellList-Item */
+typedef struct X2N_ActivatedCellList_Item {
+	X2N_ECGI_t	 ecgi;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedCellList_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedCellList_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ActivatedCellList_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ActivatedCellList_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ActivatedCellList.c b/asn1c_defs/X2N_ActivatedCellList.c
new file mode 100644
index 0000000..8e0e6cb
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedCellList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ActivatedCellList.h"
+
+#include "X2N_ActivatedCellList-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ActivatedCellList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ActivatedCellList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedCellList_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedCellList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ActivatedCellList_specs_1 = {
+	sizeof(struct X2N_ActivatedCellList),
+	offsetof(struct X2N_ActivatedCellList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList = {
+	"ActivatedCellList",
+	"ActivatedCellList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ActivatedCellList_tags_1,
+	sizeof(asn_DEF_X2N_ActivatedCellList_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ActivatedCellList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedCellList_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ActivatedCellList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ActivatedCellList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ActivatedCellList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ActivatedCellList.h b/asn1c_defs/X2N_ActivatedCellList.h
new file mode 100644
index 0000000..57a7fde
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedCellList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ActivatedCellList_H_
+#define	_X2N_ActivatedCellList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ActivatedCellList_Item;
+
+/* X2N_ActivatedCellList */
+typedef struct X2N_ActivatedCellList {
+	A_SEQUENCE_OF(struct X2N_ActivatedCellList_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedCellList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ActivatedCellList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ActivatedNRCellList-Item.c b/asn1c_defs/X2N_ActivatedNRCellList-Item.c
new file mode 100644
index 0000000..ef37e49
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedNRCellList-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ActivatedNRCellList-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ActivatedNRCellList_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedNRCellList_Item, nrCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrCellID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ActivatedNRCellList_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P102,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ActivatedNRCellList_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedNRCellList_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ActivatedNRCellList_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedNRCellList_Item_specs_1 = {
+	sizeof(struct X2N_ActivatedNRCellList_Item),
+	offsetof(struct X2N_ActivatedNRCellList_Item, _asn_ctx),
+	asn_MAP_X2N_ActivatedNRCellList_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ActivatedNRCellList_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList_Item = {
+	"ActivatedNRCellList-Item",
+	"ActivatedNRCellList-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ActivatedNRCellList_Item_tags_1,
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ActivatedNRCellList_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ActivatedNRCellList_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ActivatedNRCellList_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ActivatedNRCellList-Item.h b/asn1c_defs/X2N_ActivatedNRCellList-Item.h
new file mode 100644
index 0000000..e2a6c5c
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedNRCellList-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ActivatedNRCellList_Item_H_
+#define	_X2N_ActivatedNRCellList_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRCGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ActivatedNRCellList-Item */
+typedef struct X2N_ActivatedNRCellList_Item {
+	X2N_NRCGI_t	 nrCellID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedNRCellList_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedNRCellList_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ActivatedNRCellList_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ActivatedNRCellList_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ActivatedNRCellList.c b/asn1c_defs/X2N_ActivatedNRCellList.c
new file mode 100644
index 0000000..81be8e1
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedNRCellList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ActivatedNRCellList.h"
+
+#include "X2N_ActivatedNRCellList-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ActivatedNRCellList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ActivatedNRCellList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedNRCellList_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedNRCellList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ActivatedNRCellList_specs_1 = {
+	sizeof(struct X2N_ActivatedNRCellList),
+	offsetof(struct X2N_ActivatedNRCellList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList = {
+	"ActivatedNRCellList",
+	"ActivatedNRCellList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ActivatedNRCellList_tags_1,
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ActivatedNRCellList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_tags_1)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ActivatedNRCellList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ActivatedNRCellList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ActivatedNRCellList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ActivatedNRCellList.h b/asn1c_defs/X2N_ActivatedNRCellList.h
new file mode 100644
index 0000000..f63735f
--- /dev/null
+++ b/asn1c_defs/X2N_ActivatedNRCellList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ActivatedNRCellList_H_
+#define	_X2N_ActivatedNRCellList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ActivatedNRCellList_Item;
+
+/* X2N_ActivatedNRCellList */
+typedef struct X2N_ActivatedNRCellList {
+	A_SEQUENCE_OF(struct X2N_ActivatedNRCellList_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedNRCellList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ActivatedNRCellList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ActivationID.c b/asn1c_defs/X2N_ActivationID.c
new file mode 100644
index 0000000..47393ec
--- /dev/null
+++ b/asn1c_defs/X2N_ActivationID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ActivationID.h"
+
+int
+X2N_ActivationID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ActivationID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ActivationID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivationID = {
+	"ActivationID",
+	"ActivationID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_ActivationID_tags_1,
+	sizeof(asn_DEF_X2N_ActivationID_tags_1)
+		/sizeof(asn_DEF_X2N_ActivationID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ActivationID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivationID_tags_1)
+		/sizeof(asn_DEF_X2N_ActivationID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ActivationID_constr_1, X2N_ActivationID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ActivationID.h b/asn1c_defs/X2N_ActivationID.h
new file mode 100644
index 0000000..075c9d5
--- /dev/null
+++ b/asn1c_defs/X2N_ActivationID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ActivationID_H_
+#define	_X2N_ActivationID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ActivationID */
+typedef long	 X2N_ActivationID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivationID;
+asn_struct_free_f X2N_ActivationID_free;
+asn_struct_print_f X2N_ActivationID_print;
+asn_constr_check_f X2N_ActivationID_constraint;
+ber_type_decoder_f X2N_ActivationID_decode_ber;
+der_type_encoder_f X2N_ActivationID_encode_der;
+xer_type_decoder_f X2N_ActivationID_decode_xer;
+xer_type_encoder_f X2N_ActivationID_encode_xer;
+per_type_decoder_f X2N_ActivationID_decode_uper;
+per_type_encoder_f X2N_ActivationID_encode_uper;
+per_type_decoder_f X2N_ActivationID_decode_aper;
+per_type_encoder_f X2N_ActivationID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ActivationID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.c b/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.c
new file mode 100644
index 0000000..42cfcda
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AdditionalSpecialSubframe-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframe_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info, additionalspecialSubframePatterns),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_AdditionalSpecialSubframePatterns,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"additionalspecialSubframePatterns"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info, cyclicPrefixDL),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixDL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixDL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info, cyclicPrefixUL),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixUL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixUL"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_AdditionalSpecialSubframe_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P107,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_AdditionalSpecialSubframe_Info_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AdditionalSpecialSubframe_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* additionalspecialSubframePatterns */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframe_Info_specs_1 = {
+	sizeof(struct X2N_AdditionalSpecialSubframe_Info),
+	offsetof(struct X2N_AdditionalSpecialSubframe_Info, _asn_ctx),
+	asn_MAP_X2N_AdditionalSpecialSubframe_Info_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_AdditionalSpecialSubframe_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframe_Info = {
+	"AdditionalSpecialSubframe-Info",
+	"AdditionalSpecialSubframe-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AdditionalSpecialSubframe_Info_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_AdditionalSpecialSubframe_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.h b/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.h
new file mode 100644
index 0000000..c434b94
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframe-Info.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AdditionalSpecialSubframe_Info_H_
+#define	_X2N_AdditionalSpecialSubframe_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_AdditionalSpecialSubframePatterns.h"
+#include "X2N_CyclicPrefixDL.h"
+#include "X2N_CyclicPrefixUL.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_AdditionalSpecialSubframe-Info */
+typedef struct X2N_AdditionalSpecialSubframe_Info {
+	X2N_AdditionalSpecialSubframePatterns_t	 additionalspecialSubframePatterns;
+	X2N_CyclicPrefixDL_t	 cyclicPrefixDL;
+	X2N_CyclicPrefixUL_t	 cyclicPrefixUL;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AdditionalSpecialSubframe_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframe_Info;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AdditionalSpecialSubframe_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.c b/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.c
new file mode 100644
index 0000000..d7745ba
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AdditionalSpecialSubframeExtension-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframeExtension_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info, additionalspecialSubframePatternsExtension),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"additionalspecialSubframePatternsExtension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info, cyclicPrefixDL),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixDL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixDL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info, cyclicPrefixUL),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixUL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixUL"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P108,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* additionalspecialSubframePatternsExtension */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframeExtension_Info_specs_1 = {
+	sizeof(struct X2N_AdditionalSpecialSubframeExtension_Info),
+	offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info, _asn_ctx),
+	asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info = {
+	"AdditionalSpecialSubframeExtension-Info",
+	"AdditionalSpecialSubframeExtension-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AdditionalSpecialSubframeExtension_Info_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_AdditionalSpecialSubframeExtension_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.h b/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.h
new file mode 100644
index 0000000..b12390a
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframeExtension-Info.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AdditionalSpecialSubframeExtension_Info_H_
+#define	_X2N_AdditionalSpecialSubframeExtension_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_AdditionalSpecialSubframePatternsExtension.h"
+#include "X2N_CyclicPrefixDL.h"
+#include "X2N_CyclicPrefixUL.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_AdditionalSpecialSubframeExtension-Info */
+typedef struct X2N_AdditionalSpecialSubframeExtension_Info {
+	X2N_AdditionalSpecialSubframePatternsExtension_t	 additionalspecialSubframePatternsExtension;
+	X2N_CyclicPrefixDL_t	 cyclicPrefixDL;
+	X2N_CyclicPrefixUL_t	 cyclicPrefixUL;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AdditionalSpecialSubframeExtension_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AdditionalSpecialSubframeExtension_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.c b/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.c
new file mode 100644
index 0000000..d68665c
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.c
@@ -0,0 +1,71 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AdditionalSpecialSubframePatterns.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_AdditionalSpecialSubframePatterns_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  9 }	/* (0..9,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_AdditionalSpecialSubframePatterns_value2enum_1[] = {
+	{ 0,	4,	"ssp0" },
+	{ 1,	4,	"ssp1" },
+	{ 2,	4,	"ssp2" },
+	{ 3,	4,	"ssp3" },
+	{ 4,	4,	"ssp4" },
+	{ 5,	4,	"ssp5" },
+	{ 6,	4,	"ssp6" },
+	{ 7,	4,	"ssp7" },
+	{ 8,	4,	"ssp8" },
+	{ 9,	4,	"ssp9" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_AdditionalSpecialSubframePatterns_enum2value_1[] = {
+	0,	/* ssp0(0) */
+	1,	/* ssp1(1) */
+	2,	/* ssp2(2) */
+	3,	/* ssp3(3) */
+	4,	/* ssp4(4) */
+	5,	/* ssp5(5) */
+	6,	/* ssp6(6) */
+	7,	/* ssp7(7) */
+	8,	/* ssp8(8) */
+	9	/* ssp9(9) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_AdditionalSpecialSubframePatterns_specs_1 = {
+	asn_MAP_X2N_AdditionalSpecialSubframePatterns_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_AdditionalSpecialSubframePatterns_enum2value_1,	/* N => "tag"; sorted by N */
+	10,	/* Number of elements in the maps */
+	11,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframePatterns = {
+	"AdditionalSpecialSubframePatterns",
+	"AdditionalSpecialSubframePatterns",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatterns_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_AdditionalSpecialSubframePatterns_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_AdditionalSpecialSubframePatterns_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.h b/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.h
new file mode 100644
index 0000000..b0600d2
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframePatterns.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AdditionalSpecialSubframePatterns_H_
+#define	_X2N_AdditionalSpecialSubframePatterns_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_AdditionalSpecialSubframePatterns {
+	X2N_AdditionalSpecialSubframePatterns_ssp0	= 0,
+	X2N_AdditionalSpecialSubframePatterns_ssp1	= 1,
+	X2N_AdditionalSpecialSubframePatterns_ssp2	= 2,
+	X2N_AdditionalSpecialSubframePatterns_ssp3	= 3,
+	X2N_AdditionalSpecialSubframePatterns_ssp4	= 4,
+	X2N_AdditionalSpecialSubframePatterns_ssp5	= 5,
+	X2N_AdditionalSpecialSubframePatterns_ssp6	= 6,
+	X2N_AdditionalSpecialSubframePatterns_ssp7	= 7,
+	X2N_AdditionalSpecialSubframePatterns_ssp8	= 8,
+	X2N_AdditionalSpecialSubframePatterns_ssp9	= 9
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_AdditionalSpecialSubframePatterns;
+
+/* X2N_AdditionalSpecialSubframePatterns */
+typedef long	 X2N_AdditionalSpecialSubframePatterns_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_AdditionalSpecialSubframePatterns_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframePatterns;
+extern const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatterns_specs_1;
+asn_struct_free_f AdditionalSpecialSubframePatterns_free;
+asn_struct_print_f AdditionalSpecialSubframePatterns_print;
+asn_constr_check_f AdditionalSpecialSubframePatterns_constraint;
+ber_type_decoder_f AdditionalSpecialSubframePatterns_decode_ber;
+der_type_encoder_f AdditionalSpecialSubframePatterns_encode_der;
+xer_type_decoder_f AdditionalSpecialSubframePatterns_decode_xer;
+xer_type_encoder_f AdditionalSpecialSubframePatterns_encode_xer;
+per_type_decoder_f AdditionalSpecialSubframePatterns_decode_uper;
+per_type_encoder_f AdditionalSpecialSubframePatterns_encode_uper;
+per_type_decoder_f AdditionalSpecialSubframePatterns_decode_aper;
+per_type_encoder_f AdditionalSpecialSubframePatterns_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AdditionalSpecialSubframePatterns_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.c b/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.c
new file mode 100644
index 0000000..b07db78
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AdditionalSpecialSubframePatternsExtension.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_AdditionalSpecialSubframePatternsExtension_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_AdditionalSpecialSubframePatternsExtension_value2enum_1[] = {
+	{ 0,	5,	"ssp10" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_AdditionalSpecialSubframePatternsExtension_enum2value_1[] = {
+	0	/* ssp10(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_AdditionalSpecialSubframePatternsExtension_specs_1 = {
+	asn_MAP_X2N_AdditionalSpecialSubframePatternsExtension_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_AdditionalSpecialSubframePatternsExtension_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension = {
+	"AdditionalSpecialSubframePatternsExtension",
+	"AdditionalSpecialSubframePatternsExtension",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_AdditionalSpecialSubframePatternsExtension_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_AdditionalSpecialSubframePatternsExtension_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.h b/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.h
new file mode 100644
index 0000000..fae3c8b
--- /dev/null
+++ b/asn1c_defs/X2N_AdditionalSpecialSubframePatternsExtension.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AdditionalSpecialSubframePatternsExtension_H_
+#define	_X2N_AdditionalSpecialSubframePatternsExtension_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_AdditionalSpecialSubframePatternsExtension {
+	X2N_AdditionalSpecialSubframePatternsExtension_ssp10	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_AdditionalSpecialSubframePatternsExtension;
+
+/* X2N_AdditionalSpecialSubframePatternsExtension */
+typedef long	 X2N_AdditionalSpecialSubframePatternsExtension_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_AdditionalSpecialSubframePatternsExtension_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframePatternsExtension;
+extern const asn_INTEGER_specifics_t asn_SPC_AdditionalSpecialSubframePatternsExtension_specs_1;
+asn_struct_free_f AdditionalSpecialSubframePatternsExtension_free;
+asn_struct_print_f AdditionalSpecialSubframePatternsExtension_print;
+asn_constr_check_f AdditionalSpecialSubframePatternsExtension_constraint;
+ber_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_ber;
+der_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_der;
+xer_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_xer;
+xer_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_xer;
+per_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_uper;
+per_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_uper;
+per_type_decoder_f AdditionalSpecialSubframePatternsExtension_decode_aper;
+per_type_encoder_f AdditionalSpecialSubframePatternsExtension_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AdditionalSpecialSubframePatternsExtension_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AerialUEsubscriptionInformation.c b/asn1c_defs/X2N_AerialUEsubscriptionInformation.c
new file mode 100644
index 0000000..621d9ab
--- /dev/null
+++ b/asn1c_defs/X2N_AerialUEsubscriptionInformation.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AerialUEsubscriptionInformation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_AerialUEsubscriptionInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_AerialUEsubscriptionInformation_value2enum_1[] = {
+	{ 0,	7,	"allowed" },
+	{ 1,	11,	"not-allowed" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_AerialUEsubscriptionInformation_enum2value_1[] = {
+	0,	/* allowed(0) */
+	1	/* not-allowed(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_AerialUEsubscriptionInformation_specs_1 = {
+	asn_MAP_X2N_AerialUEsubscriptionInformation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_AerialUEsubscriptionInformation_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AerialUEsubscriptionInformation = {
+	"AerialUEsubscriptionInformation",
+	"AerialUEsubscriptionInformation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1,
+	sizeof(asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1)
+		/sizeof(asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1)
+		/sizeof(asn_DEF_X2N_AerialUEsubscriptionInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_AerialUEsubscriptionInformation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_AerialUEsubscriptionInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AerialUEsubscriptionInformation.h b/asn1c_defs/X2N_AerialUEsubscriptionInformation.h
new file mode 100644
index 0000000..493be46
--- /dev/null
+++ b/asn1c_defs/X2N_AerialUEsubscriptionInformation.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AerialUEsubscriptionInformation_H_
+#define	_X2N_AerialUEsubscriptionInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_AerialUEsubscriptionInformation {
+	X2N_AerialUEsubscriptionInformation_allowed	= 0,
+	X2N_AerialUEsubscriptionInformation_not_allowed	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_AerialUEsubscriptionInformation;
+
+/* X2N_AerialUEsubscriptionInformation */
+typedef long	 X2N_AerialUEsubscriptionInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AerialUEsubscriptionInformation;
+asn_struct_free_f X2N_AerialUEsubscriptionInformation_free;
+asn_struct_print_f X2N_AerialUEsubscriptionInformation_print;
+asn_constr_check_f X2N_AerialUEsubscriptionInformation_constraint;
+ber_type_decoder_f X2N_AerialUEsubscriptionInformation_decode_ber;
+der_type_encoder_f X2N_AerialUEsubscriptionInformation_encode_der;
+xer_type_decoder_f X2N_AerialUEsubscriptionInformation_decode_xer;
+xer_type_encoder_f X2N_AerialUEsubscriptionInformation_encode_xer;
+per_type_decoder_f X2N_AerialUEsubscriptionInformation_decode_uper;
+per_type_encoder_f X2N_AerialUEsubscriptionInformation_encode_uper;
+per_type_decoder_f X2N_AerialUEsubscriptionInformation_decode_aper;
+per_type_encoder_f X2N_AerialUEsubscriptionInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AerialUEsubscriptionInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AllocationAndRetentionPriority.c b/asn1c_defs/X2N_AllocationAndRetentionPriority.c
new file mode 100644
index 0000000..8e2ae24
--- /dev/null
+++ b/asn1c_defs/X2N_AllocationAndRetentionPriority.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AllocationAndRetentionPriority.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_AllocationAndRetentionPriority_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority, priorityLevel),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PriorityLevel,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"priorityLevel"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority, pre_emptionCapability),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Pre_emptionCapability,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pre-emptionCapability"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority, pre_emptionVulnerability),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Pre_emptionVulnerability,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pre-emptionVulnerability"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_AllocationAndRetentionPriority, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P109,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_AllocationAndRetentionPriority_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_AllocationAndRetentionPriority_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AllocationAndRetentionPriority_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* priorityLevel */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pre-emptionCapability */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pre-emptionVulnerability */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AllocationAndRetentionPriority_specs_1 = {
+	sizeof(struct X2N_AllocationAndRetentionPriority),
+	offsetof(struct X2N_AllocationAndRetentionPriority, _asn_ctx),
+	asn_MAP_X2N_AllocationAndRetentionPriority_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_AllocationAndRetentionPriority_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AllocationAndRetentionPriority = {
+	"AllocationAndRetentionPriority",
+	"AllocationAndRetentionPriority",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AllocationAndRetentionPriority_tags_1,
+	sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_tags_1)
+		/sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_tags_1[0]), /* 1 */
+	asn_DEF_X2N_AllocationAndRetentionPriority_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_tags_1)
+		/sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AllocationAndRetentionPriority_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_AllocationAndRetentionPriority_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AllocationAndRetentionPriority.h b/asn1c_defs/X2N_AllocationAndRetentionPriority.h
new file mode 100644
index 0000000..8e99f0e
--- /dev/null
+++ b/asn1c_defs/X2N_AllocationAndRetentionPriority.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AllocationAndRetentionPriority_H_
+#define	_X2N_AllocationAndRetentionPriority_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PriorityLevel.h"
+#include "X2N_Pre-emptionCapability.h"
+#include "X2N_Pre-emptionVulnerability.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_AllocationAndRetentionPriority */
+typedef struct X2N_AllocationAndRetentionPriority {
+	X2N_PriorityLevel_t	 priorityLevel;
+	X2N_Pre_emptionCapability_t	 pre_emptionCapability;
+	X2N_Pre_emptionVulnerability_t	 pre_emptionVulnerability;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AllocationAndRetentionPriority_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AllocationAndRetentionPriority;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AllocationAndRetentionPriority_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_AllocationAndRetentionPriority_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AllocationAndRetentionPriority_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AreaScopeOfMDT.c b/asn1c_defs/X2N_AreaScopeOfMDT.c
new file mode 100644
index 0000000..9f8ea22
--- /dev/null
+++ b/asn1c_defs/X2N_AreaScopeOfMDT.c
@@ -0,0 +1,85 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AreaScopeOfMDT.h"
+
+#include "X2N_CellBasedMDT.h"
+#include "X2N_TABasedMDT.h"
+#include "X2N_TAIBasedMDT.h"
+asn_per_constraints_t asn_PER_type_X2N_AreaScopeOfMDT_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_AreaScopeOfMDT_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfMDT, choice.cellBased),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellBasedMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellBased"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfMDT, choice.tABased),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TABasedMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tABased"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AreaScopeOfMDT, choice.pLMNWide),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNWide"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfMDT, choice.tAIBased),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAIBasedMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAIBased"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AreaScopeOfMDT_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellBased */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tABased */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMNWide */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* tAIBased */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_AreaScopeOfMDT_specs_1 = {
+	sizeof(struct X2N_AreaScopeOfMDT),
+	offsetof(struct X2N_AreaScopeOfMDT, _asn_ctx),
+	offsetof(struct X2N_AreaScopeOfMDT, present),
+	sizeof(((struct X2N_AreaScopeOfMDT *)0)->present),
+	asn_MAP_X2N_AreaScopeOfMDT_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AreaScopeOfMDT = {
+	"AreaScopeOfMDT",
+	"AreaScopeOfMDT",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_AreaScopeOfMDT_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_AreaScopeOfMDT_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_AreaScopeOfMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AreaScopeOfMDT.h b/asn1c_defs/X2N_AreaScopeOfMDT.h
new file mode 100644
index 0000000..5c8536b
--- /dev/null
+++ b/asn1c_defs/X2N_AreaScopeOfMDT.h
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AreaScopeOfMDT_H_
+#define	_X2N_AreaScopeOfMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_AreaScopeOfMDT_PR {
+	X2N_AreaScopeOfMDT_PR_NOTHING,	/* No components present */
+	X2N_AreaScopeOfMDT_PR_cellBased,
+	X2N_AreaScopeOfMDT_PR_tABased,
+	X2N_AreaScopeOfMDT_PR_pLMNWide,
+	/* Extensions may appear below */
+	X2N_AreaScopeOfMDT_PR_tAIBased
+} X2N_AreaScopeOfMDT_PR;
+
+/* Forward declarations */
+struct X2N_CellBasedMDT;
+struct X2N_TABasedMDT;
+struct X2N_TAIBasedMDT;
+
+/* X2N_AreaScopeOfMDT */
+typedef struct X2N_AreaScopeOfMDT {
+	X2N_AreaScopeOfMDT_PR present;
+	union X2N_AreaScopeOfMDT_u {
+		struct X2N_CellBasedMDT	*cellBased;
+		struct X2N_TABasedMDT	*tABased;
+		NULL_t	 pLMNWide;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		struct X2N_TAIBasedMDT	*tAIBased;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AreaScopeOfMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AreaScopeOfMDT;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_AreaScopeOfMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_AreaScopeOfMDT_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_AreaScopeOfMDT_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AreaScopeOfMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_AreaScopeOfQMC.c b/asn1c_defs/X2N_AreaScopeOfQMC.c
new file mode 100644
index 0000000..3cf3e9e
--- /dev/null
+++ b/asn1c_defs/X2N_AreaScopeOfQMC.c
@@ -0,0 +1,86 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_AreaScopeOfQMC.h"
+
+#include "X2N_CellBasedQMC.h"
+#include "X2N_TABasedQMC.h"
+#include "X2N_TAIBasedQMC.h"
+#include "X2N_PLMNAreaBasedQMC.h"
+asn_per_constraints_t asn_PER_type_X2N_AreaScopeOfQMC_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_AreaScopeOfQMC_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfQMC, choice.cellBased),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellBasedQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellBased"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfQMC, choice.tABased),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TABasedQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tABased"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfQMC, choice.tAIBased),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAIBasedQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAIBased"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_AreaScopeOfQMC, choice.pLMNAreaBased),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMNAreaBasedQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMNAreaBased"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AreaScopeOfQMC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellBased */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tABased */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tAIBased */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pLMNAreaBased */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_AreaScopeOfQMC_specs_1 = {
+	sizeof(struct X2N_AreaScopeOfQMC),
+	offsetof(struct X2N_AreaScopeOfQMC, _asn_ctx),
+	offsetof(struct X2N_AreaScopeOfQMC, present),
+	sizeof(((struct X2N_AreaScopeOfQMC *)0)->present),
+	asn_MAP_X2N_AreaScopeOfQMC_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AreaScopeOfQMC = {
+	"AreaScopeOfQMC",
+	"AreaScopeOfQMC",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_AreaScopeOfQMC_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_AreaScopeOfQMC_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_AreaScopeOfQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_AreaScopeOfQMC.h b/asn1c_defs/X2N_AreaScopeOfQMC.h
new file mode 100644
index 0000000..ed4d57a
--- /dev/null
+++ b/asn1c_defs/X2N_AreaScopeOfQMC.h
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_AreaScopeOfQMC_H_
+#define	_X2N_AreaScopeOfQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_AreaScopeOfQMC_PR {
+	X2N_AreaScopeOfQMC_PR_NOTHING,	/* No components present */
+	X2N_AreaScopeOfQMC_PR_cellBased,
+	X2N_AreaScopeOfQMC_PR_tABased,
+	X2N_AreaScopeOfQMC_PR_tAIBased,
+	X2N_AreaScopeOfQMC_PR_pLMNAreaBased
+	/* Extensions may appear below */
+	
+} X2N_AreaScopeOfQMC_PR;
+
+/* Forward declarations */
+struct X2N_CellBasedQMC;
+struct X2N_TABasedQMC;
+struct X2N_TAIBasedQMC;
+struct X2N_PLMNAreaBasedQMC;
+
+/* X2N_AreaScopeOfQMC */
+typedef struct X2N_AreaScopeOfQMC {
+	X2N_AreaScopeOfQMC_PR present;
+	union X2N_AreaScopeOfQMC_u {
+		struct X2N_CellBasedQMC	*cellBased;
+		struct X2N_TABasedQMC	*tABased;
+		struct X2N_TAIBasedQMC	*tAIBased;
+		struct X2N_PLMNAreaBasedQMC	*pLMNAreaBased;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AreaScopeOfQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AreaScopeOfQMC;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_AreaScopeOfQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_AreaScopeOfQMC_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_AreaScopeOfQMC_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_AreaScopeOfQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BandInfo.c b/asn1c_defs/X2N_BandInfo.c
new file mode 100644
index 0000000..aea2395
--- /dev/null
+++ b/asn1c_defs/X2N_BandInfo.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BandInfo.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_BandInfo_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BandInfo, freqBandIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FreqBandIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"freqBandIndicator"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_BandInfo, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P169,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_BandInfo_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_BandInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_BandInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_BandInfo_specs_1 = {
+	sizeof(struct X2N_BandInfo),
+	offsetof(struct X2N_BandInfo, _asn_ctx),
+	asn_MAP_X2N_BandInfo_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_BandInfo_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BandInfo = {
+	"BandInfo",
+	"BandInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_BandInfo_tags_1,
+	sizeof(asn_DEF_X2N_BandInfo_tags_1)
+		/sizeof(asn_DEF_X2N_BandInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BandInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BandInfo_tags_1)
+		/sizeof(asn_DEF_X2N_BandInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_BandInfo_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_BandInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BandInfo.h b/asn1c_defs/X2N_BandInfo.h
new file mode 100644
index 0000000..400a328
--- /dev/null
+++ b/asn1c_defs/X2N_BandInfo.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BandInfo_H_
+#define	_X2N_BandInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_FreqBandIndicator.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_BandInfo */
+typedef struct X2N_BandInfo {
+	X2N_FreqBandIndicator_t	 freqBandIndicator;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BandInfo_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BandInfo;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_BandInfo_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_BandInfo_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BandInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BandwidthReducedSI.c b/asn1c_defs/X2N_BandwidthReducedSI.c
new file mode 100644
index 0000000..7161cdc
--- /dev/null
+++ b/asn1c_defs/X2N_BandwidthReducedSI.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BandwidthReducedSI.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_BandwidthReducedSI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_BandwidthReducedSI_value2enum_1[] = {
+	{ 0,	9,	"scheduled" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_BandwidthReducedSI_enum2value_1[] = {
+	0	/* scheduled(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_BandwidthReducedSI_specs_1 = {
+	asn_MAP_X2N_BandwidthReducedSI_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_BandwidthReducedSI_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BandwidthReducedSI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BandwidthReducedSI = {
+	"BandwidthReducedSI",
+	"BandwidthReducedSI",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_BandwidthReducedSI_tags_1,
+	sizeof(asn_DEF_X2N_BandwidthReducedSI_tags_1)
+		/sizeof(asn_DEF_X2N_BandwidthReducedSI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BandwidthReducedSI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BandwidthReducedSI_tags_1)
+		/sizeof(asn_DEF_X2N_BandwidthReducedSI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BandwidthReducedSI_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_BandwidthReducedSI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BandwidthReducedSI.h b/asn1c_defs/X2N_BandwidthReducedSI.h
new file mode 100644
index 0000000..f133dba
--- /dev/null
+++ b/asn1c_defs/X2N_BandwidthReducedSI.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BandwidthReducedSI_H_
+#define	_X2N_BandwidthReducedSI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_BandwidthReducedSI {
+	X2N_BandwidthReducedSI_scheduled	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_BandwidthReducedSI;
+
+/* X2N_BandwidthReducedSI */
+typedef long	 X2N_BandwidthReducedSI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BandwidthReducedSI;
+asn_struct_free_f X2N_BandwidthReducedSI_free;
+asn_struct_print_f X2N_BandwidthReducedSI_print;
+asn_constr_check_f X2N_BandwidthReducedSI_constraint;
+ber_type_decoder_f X2N_BandwidthReducedSI_decode_ber;
+der_type_encoder_f X2N_BandwidthReducedSI_encode_der;
+xer_type_decoder_f X2N_BandwidthReducedSI_decode_xer;
+xer_type_encoder_f X2N_BandwidthReducedSI_encode_xer;
+per_type_decoder_f X2N_BandwidthReducedSI_decode_uper;
+per_type_encoder_f X2N_BandwidthReducedSI_encode_uper;
+per_type_decoder_f X2N_BandwidthReducedSI_decode_aper;
+per_type_encoder_f X2N_BandwidthReducedSI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BandwidthReducedSI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BearerType.c b/asn1c_defs/X2N_BearerType.c
new file mode 100644
index 0000000..bc422df
--- /dev/null
+++ b/asn1c_defs/X2N_BearerType.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BearerType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_BearerType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_BearerType_value2enum_1[] = {
+	{ 0,	6,	"non-IP" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_BearerType_enum2value_1[] = {
+	0	/* non-IP(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_BearerType_specs_1 = {
+	asn_MAP_X2N_BearerType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_BearerType_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BearerType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BearerType = {
+	"BearerType",
+	"BearerType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_BearerType_tags_1,
+	sizeof(asn_DEF_X2N_BearerType_tags_1)
+		/sizeof(asn_DEF_X2N_BearerType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BearerType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BearerType_tags_1)
+		/sizeof(asn_DEF_X2N_BearerType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BearerType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_BearerType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BearerType.h b/asn1c_defs/X2N_BearerType.h
new file mode 100644
index 0000000..edbe025
--- /dev/null
+++ b/asn1c_defs/X2N_BearerType.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BearerType_H_
+#define	_X2N_BearerType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_BearerType {
+	X2N_BearerType_non_IP	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_BearerType;
+
+/* X2N_BearerType */
+typedef long	 X2N_BearerType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_BearerType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BearerType;
+extern const asn_INTEGER_specifics_t asn_SPC_BearerType_specs_1;
+asn_struct_free_f BearerType_free;
+asn_struct_print_f BearerType_print;
+asn_constr_check_f BearerType_constraint;
+ber_type_decoder_f BearerType_decode_ber;
+der_type_encoder_f BearerType_encode_der;
+xer_type_decoder_f BearerType_decode_xer;
+xer_type_encoder_f BearerType_encode_xer;
+per_type_decoder_f BearerType_decode_uper;
+per_type_encoder_f BearerType_encode_uper;
+per_type_decoder_f BearerType_decode_aper;
+per_type_encoder_f BearerType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BearerType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BenefitMetric.c b/asn1c_defs/X2N_BenefitMetric.c
new file mode 100644
index 0000000..9a25d9f
--- /dev/null
+++ b/asn1c_defs/X2N_BenefitMetric.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BenefitMetric.h"
+
+int
+X2N_BenefitMetric_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= -101 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_BenefitMetric_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8, -101,  100 }	/* (-101..100,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BenefitMetric_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BenefitMetric = {
+	"BenefitMetric",
+	"BenefitMetric",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_BenefitMetric_tags_1,
+	sizeof(asn_DEF_X2N_BenefitMetric_tags_1)
+		/sizeof(asn_DEF_X2N_BenefitMetric_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BenefitMetric_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BenefitMetric_tags_1)
+		/sizeof(asn_DEF_X2N_BenefitMetric_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BenefitMetric_constr_1, X2N_BenefitMetric_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_BenefitMetric.h b/asn1c_defs/X2N_BenefitMetric.h
new file mode 100644
index 0000000..6bb37f0
--- /dev/null
+++ b/asn1c_defs/X2N_BenefitMetric.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BenefitMetric_H_
+#define	_X2N_BenefitMetric_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_BenefitMetric */
+typedef long	 X2N_BenefitMetric_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_BenefitMetric_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BenefitMetric;
+asn_struct_free_f X2N_BenefitMetric_free;
+asn_struct_print_f X2N_BenefitMetric_print;
+asn_constr_check_f X2N_BenefitMetric_constraint;
+ber_type_decoder_f X2N_BenefitMetric_decode_ber;
+der_type_encoder_f X2N_BenefitMetric_encode_der;
+xer_type_decoder_f X2N_BenefitMetric_decode_xer;
+xer_type_encoder_f X2N_BenefitMetric_encode_xer;
+per_type_decoder_f X2N_BenefitMetric_decode_uper;
+per_type_encoder_f X2N_BenefitMetric_encode_uper;
+per_type_decoder_f X2N_BenefitMetric_decode_aper;
+per_type_encoder_f X2N_BenefitMetric_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BenefitMetric_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BitRate.c b/asn1c_defs/X2N_BitRate.c
new file mode 100644
index 0000000..d0b8a9f
--- /dev/null
+++ b/asn1c_defs/X2N_BitRate.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BitRate.h"
+
+int
+X2N_BitRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 10000000000)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_BitRate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 34, -1,  0,  10000000000 }	/* (0..10000000000) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BitRate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BitRate = {
+	"BitRate",
+	"BitRate",
+	&asn_OP_INTEGER,
+	asn_DEF_X2N_BitRate_tags_1,
+	sizeof(asn_DEF_X2N_BitRate_tags_1)
+		/sizeof(asn_DEF_X2N_BitRate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BitRate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BitRate_tags_1)
+		/sizeof(asn_DEF_X2N_BitRate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BitRate_constr_1, X2N_BitRate_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_BitRate.h b/asn1c_defs/X2N_BitRate.h
new file mode 100644
index 0000000..d26887f
--- /dev/null
+++ b/asn1c_defs/X2N_BitRate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BitRate_H_
+#define	_X2N_BitRate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <INTEGER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_BitRate */
+typedef INTEGER_t	 X2N_BitRate_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_BitRate_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BitRate;
+asn_struct_free_f X2N_BitRate_free;
+asn_struct_print_f X2N_BitRate_print;
+asn_constr_check_f X2N_BitRate_constraint;
+ber_type_decoder_f X2N_BitRate_decode_ber;
+der_type_encoder_f X2N_BitRate_encode_der;
+xer_type_decoder_f X2N_BitRate_decode_xer;
+xer_type_encoder_f X2N_BitRate_encode_xer;
+per_type_decoder_f X2N_BitRate_decode_uper;
+per_type_encoder_f X2N_BitRate_encode_uper;
+per_type_decoder_f X2N_BitRate_decode_aper;
+per_type_encoder_f X2N_BitRate_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BitRate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BluetoothMeasConfig.c b/asn1c_defs/X2N_BluetoothMeasConfig.c
new file mode 100644
index 0000000..ac67f73
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasConfig.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BluetoothMeasConfig.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_BluetoothMeasConfig_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_BluetoothMeasConfig_value2enum_1[] = {
+	{ 0,	5,	"setup" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_BluetoothMeasConfig_enum2value_1[] = {
+	0	/* setup(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_BluetoothMeasConfig_specs_1 = {
+	asn_MAP_X2N_BluetoothMeasConfig_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_BluetoothMeasConfig_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BluetoothMeasConfig_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasConfig = {
+	"BluetoothMeasConfig",
+	"BluetoothMeasConfig",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_BluetoothMeasConfig_tags_1,
+	sizeof(asn_DEF_X2N_BluetoothMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasConfig_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BluetoothMeasConfig_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BluetoothMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasConfig_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BluetoothMeasConfig_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_BluetoothMeasConfig_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BluetoothMeasConfig.h b/asn1c_defs/X2N_BluetoothMeasConfig.h
new file mode 100644
index 0000000..a8b8717
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasConfig.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BluetoothMeasConfig_H_
+#define	_X2N_BluetoothMeasConfig_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_BluetoothMeasConfig {
+	X2N_BluetoothMeasConfig_setup	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_BluetoothMeasConfig;
+
+/* X2N_BluetoothMeasConfig */
+typedef long	 X2N_BluetoothMeasConfig_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_BluetoothMeasConfig_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasConfig;
+extern const asn_INTEGER_specifics_t asn_SPC_BluetoothMeasConfig_specs_1;
+asn_struct_free_f BluetoothMeasConfig_free;
+asn_struct_print_f BluetoothMeasConfig_print;
+asn_constr_check_f BluetoothMeasConfig_constraint;
+ber_type_decoder_f BluetoothMeasConfig_decode_ber;
+der_type_encoder_f BluetoothMeasConfig_encode_der;
+xer_type_decoder_f BluetoothMeasConfig_decode_xer;
+xer_type_encoder_f BluetoothMeasConfig_encode_xer;
+per_type_decoder_f BluetoothMeasConfig_decode_uper;
+per_type_encoder_f BluetoothMeasConfig_encode_uper;
+per_type_decoder_f BluetoothMeasConfig_decode_aper;
+per_type_encoder_f BluetoothMeasConfig_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BluetoothMeasConfig_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BluetoothMeasConfigNameList.c b/asn1c_defs/X2N_BluetoothMeasConfigNameList.c
new file mode 100644
index 0000000..6c35acf
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasConfigNameList.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BluetoothMeasConfigNameList.h"
+
+asn_per_constraints_t asn_PER_type_X2N_BluetoothMeasConfigNameList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  1,  4 }	/* (SIZE(1..4)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_BluetoothMeasConfigNameList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_BluetoothName,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_BluetoothMeasConfigNameList_specs_1 = {
+	sizeof(struct X2N_BluetoothMeasConfigNameList),
+	offsetof(struct X2N_BluetoothMeasConfigNameList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasConfigNameList = {
+	"BluetoothMeasConfigNameList",
+	"BluetoothMeasConfigNameList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1,
+	sizeof(asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasConfigNameList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BluetoothMeasConfigNameList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_BluetoothMeasConfigNameList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_BluetoothMeasConfigNameList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BluetoothMeasConfigNameList.h b/asn1c_defs/X2N_BluetoothMeasConfigNameList.h
new file mode 100644
index 0000000..e917df9
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasConfigNameList.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BluetoothMeasConfigNameList_H_
+#define	_X2N_BluetoothMeasConfigNameList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_BluetoothName.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_BluetoothMeasConfigNameList */
+typedef struct X2N_BluetoothMeasConfigNameList {
+	A_SEQUENCE_OF(X2N_BluetoothName_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BluetoothMeasConfigNameList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasConfigNameList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_BluetoothMeasConfigNameList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_BluetoothMeasConfigNameList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_BluetoothMeasConfigNameList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BluetoothMeasConfigNameList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BluetoothMeasurementConfiguration.c b/asn1c_defs/X2N_BluetoothMeasurementConfiguration.c
new file mode 100644
index 0000000..49a37df
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasurementConfiguration.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BluetoothMeasurementConfiguration.h"
+
+#include "X2N_BluetoothMeasConfigNameList.h"
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_bt_rssi_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_bt_rssi_value2enum_4[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_bt_rssi_enum2value_4[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_bt_rssi_specs_4 = {
+	asn_MAP_X2N_bt_rssi_value2enum_4,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_bt_rssi_enum2value_4,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_bt_rssi_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_bt_rssi_4 = {
+	"bt-rssi",
+	"bt-rssi",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_bt_rssi_tags_4,
+	sizeof(asn_DEF_X2N_bt_rssi_tags_4)
+		/sizeof(asn_DEF_X2N_bt_rssi_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_bt_rssi_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_bt_rssi_tags_4)
+		/sizeof(asn_DEF_X2N_bt_rssi_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_bt_rssi_constr_4, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_bt_rssi_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_BluetoothMeasurementConfiguration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BluetoothMeasurementConfiguration, bluetoothMeasConfig),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BluetoothMeasConfig,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"bluetoothMeasConfig"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_BluetoothMeasurementConfiguration, bluetoothMeasConfigNameList),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BluetoothMeasConfigNameList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"bluetoothMeasConfigNameList"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_BluetoothMeasurementConfiguration, bt_rssi),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_bt_rssi_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"bt-rssi"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_BluetoothMeasurementConfiguration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P111,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_BluetoothMeasurementConfiguration_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_BluetoothMeasurementConfiguration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bluetoothMeasConfig */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bluetoothMeasConfigNameList */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bt-rssi */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_BluetoothMeasurementConfiguration_specs_1 = {
+	sizeof(struct X2N_BluetoothMeasurementConfiguration),
+	offsetof(struct X2N_BluetoothMeasurementConfiguration, _asn_ctx),
+	asn_MAP_X2N_BluetoothMeasurementConfiguration_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_BluetoothMeasurementConfiguration_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasurementConfiguration = {
+	"BluetoothMeasurementConfiguration",
+	"BluetoothMeasurementConfiguration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1,
+	sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_BluetoothMeasurementConfiguration_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_BluetoothMeasurementConfiguration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BluetoothMeasurementConfiguration.h b/asn1c_defs/X2N_BluetoothMeasurementConfiguration.h
new file mode 100644
index 0000000..486f82c
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothMeasurementConfiguration.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BluetoothMeasurementConfiguration_H_
+#define	_X2N_BluetoothMeasurementConfiguration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_BluetoothMeasConfig.h"
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_BluetoothMeasurementConfiguration__bt_rssi {
+	X2N_BluetoothMeasurementConfiguration__bt_rssi_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_BluetoothMeasurementConfiguration__bt_rssi;
+
+/* Forward declarations */
+struct X2N_BluetoothMeasConfigNameList;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_BluetoothMeasurementConfiguration */
+typedef struct X2N_BluetoothMeasurementConfiguration {
+	X2N_BluetoothMeasConfig_t	 bluetoothMeasConfig;
+	struct X2N_BluetoothMeasConfigNameList	*bluetoothMeasConfigNameList;	/* OPTIONAL */
+	long	*bt_rssi;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BluetoothMeasurementConfiguration_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_bt_rssi_4;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasurementConfiguration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BluetoothMeasurementConfiguration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BluetoothName.c b/asn1c_defs/X2N_BluetoothName.c
new file mode 100644
index 0000000..66e82da
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothName.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BluetoothName.h"
+
+int
+X2N_BluetoothName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 248)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_BluetoothName_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  248 }	/* (SIZE(1..248)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BluetoothName_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothName = {
+	"BluetoothName",
+	"BluetoothName",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_BluetoothName_tags_1,
+	sizeof(asn_DEF_X2N_BluetoothName_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothName_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BluetoothName_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BluetoothName_tags_1)
+		/sizeof(asn_DEF_X2N_BluetoothName_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BluetoothName_constr_1, X2N_BluetoothName_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BluetoothName.h b/asn1c_defs/X2N_BluetoothName.h
new file mode 100644
index 0000000..8c755ab
--- /dev/null
+++ b/asn1c_defs/X2N_BluetoothName.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BluetoothName_H_
+#define	_X2N_BluetoothName_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_BluetoothName */
+typedef OCTET_STRING_t	 X2N_BluetoothName_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_BluetoothName_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothName;
+asn_struct_free_f X2N_BluetoothName_free;
+asn_struct_print_f X2N_BluetoothName_print;
+asn_constr_check_f X2N_BluetoothName_constraint;
+ber_type_decoder_f X2N_BluetoothName_decode_ber;
+der_type_encoder_f X2N_BluetoothName_encode_der;
+xer_type_decoder_f X2N_BluetoothName_decode_xer;
+xer_type_encoder_f X2N_BluetoothName_encode_xer;
+per_type_decoder_f X2N_BluetoothName_decode_uper;
+per_type_encoder_f X2N_BluetoothName_encode_uper;
+per_type_decoder_f X2N_BluetoothName_decode_aper;
+per_type_encoder_f X2N_BluetoothName_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BluetoothName_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_BroadcastPLMNs-Item.c b/asn1c_defs/X2N_BroadcastPLMNs-Item.c
new file mode 100644
index 0000000..f1f3272
--- /dev/null
+++ b/asn1c_defs/X2N_BroadcastPLMNs-Item.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_BroadcastPLMNs-Item.h"
+
+asn_per_constraints_t asn_PER_type_X2N_BroadcastPLMNs_Item_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  6 }	/* (SIZE(1..6)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_BroadcastPLMNs_Item_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BroadcastPLMNs_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_BroadcastPLMNs_Item_specs_1 = {
+	sizeof(struct X2N_BroadcastPLMNs_Item),
+	offsetof(struct X2N_BroadcastPLMNs_Item, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BroadcastPLMNs_Item = {
+	"BroadcastPLMNs-Item",
+	"BroadcastPLMNs-Item",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_BroadcastPLMNs_Item_tags_1,
+	sizeof(asn_DEF_X2N_BroadcastPLMNs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_BroadcastPLMNs_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_BroadcastPLMNs_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_BroadcastPLMNs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_BroadcastPLMNs_Item_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_BroadcastPLMNs_Item_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_BroadcastPLMNs_Item_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_BroadcastPLMNs_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_BroadcastPLMNs-Item.h b/asn1c_defs/X2N_BroadcastPLMNs-Item.h
new file mode 100644
index 0000000..97951f8
--- /dev/null
+++ b/asn1c_defs/X2N_BroadcastPLMNs-Item.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_BroadcastPLMNs_Item_H_
+#define	_X2N_BroadcastPLMNs_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_BroadcastPLMNs-Item */
+typedef struct X2N_BroadcastPLMNs_Item {
+	A_SEQUENCE_OF(X2N_PLMN_Identity_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BroadcastPLMNs_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BroadcastPLMNs_Item;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_BroadcastPLMNs_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_BroadcastPLMNs_Item_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_BroadcastPLMNs_Item_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_BroadcastPLMNs_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CNTypeRestrictions.c b/asn1c_defs/X2N_CNTypeRestrictions.c
new file mode 100644
index 0000000..2d1533b
--- /dev/null
+++ b/asn1c_defs/X2N_CNTypeRestrictions.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CNTypeRestrictions.h"
+
+#include "X2N_CNTypeRestrictionsItem.h"
+static asn_per_constraints_t asn_PER_type_X2N_CNTypeRestrictions_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CNTypeRestrictions_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CNTypeRestrictionsItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CNTypeRestrictions_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CNTypeRestrictions_specs_1 = {
+	sizeof(struct X2N_CNTypeRestrictions),
+	offsetof(struct X2N_CNTypeRestrictions, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictions = {
+	"CNTypeRestrictions",
+	"CNTypeRestrictions",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CNTypeRestrictions_tags_1,
+	sizeof(asn_DEF_X2N_CNTypeRestrictions_tags_1)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictions_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CNTypeRestrictions_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CNTypeRestrictions_tags_1)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictions_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CNTypeRestrictions_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CNTypeRestrictions_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CNTypeRestrictions_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CNTypeRestrictions.h b/asn1c_defs/X2N_CNTypeRestrictions.h
new file mode 100644
index 0000000..8239814
--- /dev/null
+++ b/asn1c_defs/X2N_CNTypeRestrictions.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CNTypeRestrictions_H_
+#define	_X2N_CNTypeRestrictions_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_CNTypeRestrictionsItem;
+
+/* X2N_CNTypeRestrictions */
+typedef struct X2N_CNTypeRestrictions {
+	A_SEQUENCE_OF(struct X2N_CNTypeRestrictionsItem) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CNTypeRestrictions_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictions;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CNTypeRestrictions_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CNTypeRestrictionsItem.c b/asn1c_defs/X2N_CNTypeRestrictionsItem.c
new file mode 100644
index 0000000..5413e0a
--- /dev/null
+++ b/asn1c_defs/X2N_CNTypeRestrictionsItem.c
@@ -0,0 +1,119 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CNTypeRestrictionsItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_cn_type_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_cn_type_value2enum_3[] = {
+	{ 0,	16,	"fiveGC-forbidden" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_cn_type_enum2value_3[] = {
+	0	/* fiveGC-forbidden(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_cn_type_specs_3 = {
+	asn_MAP_X2N_cn_type_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_cn_type_enum2value_3,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_cn_type_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_cn_type_3 = {
+	"cn-type",
+	"cn-type",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_cn_type_tags_3,
+	sizeof(asn_DEF_X2N_cn_type_tags_3)
+		/sizeof(asn_DEF_X2N_cn_type_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_cn_type_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_cn_type_tags_3)
+		/sizeof(asn_DEF_X2N_cn_type_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_cn_type_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_cn_type_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CNTypeRestrictionsItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CNTypeRestrictionsItem, plmn_Id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"plmn-Id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CNTypeRestrictionsItem, cn_type),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_cn_type_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cn-type"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CNTypeRestrictionsItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P116,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CNTypeRestrictionsItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CNTypeRestrictionsItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CNTypeRestrictionsItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cn-type */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CNTypeRestrictionsItem_specs_1 = {
+	sizeof(struct X2N_CNTypeRestrictionsItem),
+	offsetof(struct X2N_CNTypeRestrictionsItem, _asn_ctx),
+	asn_MAP_X2N_CNTypeRestrictionsItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CNTypeRestrictionsItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictionsItem = {
+	"CNTypeRestrictionsItem",
+	"CNTypeRestrictionsItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CNTypeRestrictionsItem_tags_1,
+	sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_tags_1)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CNTypeRestrictionsItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_tags_1)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CNTypeRestrictionsItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CNTypeRestrictionsItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CNTypeRestrictionsItem.h b/asn1c_defs/X2N_CNTypeRestrictionsItem.h
new file mode 100644
index 0000000..cdd09c0
--- /dev/null
+++ b/asn1c_defs/X2N_CNTypeRestrictionsItem.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CNTypeRestrictionsItem_H_
+#define	_X2N_CNTypeRestrictionsItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CNTypeRestrictionsItem__cn_type {
+	X2N_CNTypeRestrictionsItem__cn_type_fiveGC_forbidden	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CNTypeRestrictionsItem__cn_type;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CNTypeRestrictionsItem */
+typedef struct X2N_CNTypeRestrictionsItem {
+	X2N_PLMN_Identity_t	 plmn_Id;
+	long	 cn_type;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CNTypeRestrictionsItem_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_cn_type_3;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictionsItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CNTypeRestrictionsItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CNTypeRestrictionsItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CNTypeRestrictionsItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_COUNTValueExtended.c b/asn1c_defs/X2N_COUNTValueExtended.c
new file mode 100644
index 0000000..5f7830d
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTValueExtended.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_COUNTValueExtended.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_COUNTValueExtended_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTValueExtended, pDCP_SNExtended),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PDCP_SNExtended,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pDCP-SNExtended"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTValueExtended, hFNModified),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HFNModified,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hFNModified"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_COUNTValueExtended, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P124,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_COUNTValueExtended_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTValueExtended_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTValueExtended_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SNExtended */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFNModified */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTValueExtended_specs_1 = {
+	sizeof(struct X2N_COUNTValueExtended),
+	offsetof(struct X2N_COUNTValueExtended, _asn_ctx),
+	asn_MAP_X2N_COUNTValueExtended_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_COUNTValueExtended_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTValueExtended = {
+	"COUNTValueExtended",
+	"COUNTValueExtended",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTValueExtended_tags_1,
+	sizeof(asn_DEF_X2N_COUNTValueExtended_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTValueExtended_tags_1[0]), /* 1 */
+	asn_DEF_X2N_COUNTValueExtended_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTValueExtended_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTValueExtended_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTValueExtended_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTValueExtended_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_COUNTValueExtended.h b/asn1c_defs/X2N_COUNTValueExtended.h
new file mode 100644
index 0000000..1d1866a
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTValueExtended.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_COUNTValueExtended_H_
+#define	_X2N_COUNTValueExtended_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PDCP-SNExtended.h"
+#include "X2N_HFNModified.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_COUNTValueExtended */
+typedef struct X2N_COUNTValueExtended {
+	X2N_PDCP_SNExtended_t	 pDCP_SNExtended;
+	X2N_HFNModified_t	 hFNModified;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTValueExtended_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTValueExtended;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_COUNTValueExtended_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_COUNTvalue.c b/asn1c_defs/X2N_COUNTvalue.c
new file mode 100644
index 0000000..ea60cc4
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTvalue.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_COUNTvalue.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_COUNTvalue_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvalue, pDCP_SN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PDCP_SN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pDCP-SN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvalue, hFN),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HFN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hFN"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_COUNTvalue, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P123,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_COUNTvalue_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTvalue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTvalue_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFN */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvalue_specs_1 = {
+	sizeof(struct X2N_COUNTvalue),
+	offsetof(struct X2N_COUNTvalue, _asn_ctx),
+	asn_MAP_X2N_COUNTvalue_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_COUNTvalue_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvalue = {
+	"COUNTvalue",
+	"COUNTvalue",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTvalue_tags_1,
+	sizeof(asn_DEF_X2N_COUNTvalue_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTvalue_tags_1[0]), /* 1 */
+	asn_DEF_X2N_COUNTvalue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTvalue_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTvalue_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTvalue_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTvalue_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_COUNTvalue.h b/asn1c_defs/X2N_COUNTvalue.h
new file mode 100644
index 0000000..f2c3a84
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTvalue.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_COUNTvalue_H_
+#define	_X2N_COUNTvalue_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PDCP-SN.h"
+#include "X2N_HFN.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_COUNTvalue */
+typedef struct X2N_COUNTvalue {
+	X2N_PDCP_SN_t	 pDCP_SN;
+	X2N_HFN_t	 hFN;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTvalue_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvalue;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvalue_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_COUNTvalue_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_COUNTvalue_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.c b/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.c
new file mode 100644
index 0000000..3fb10d4
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_COUNTvaluePDCP-SNlength18.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_COUNTvaluePDCP_SNlength18_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvaluePDCP_SNlength18, pDCP_SNlength18),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PDCP_SNlength18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pDCP-SNlength18"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvaluePDCP_SNlength18, hFNforPDCP_SNlength18),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HFNforPDCP_SNlength18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hFNforPDCP-SNlength18"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_COUNTvaluePDCP_SNlength18, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P125,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_COUNTvaluePDCP_SNlength18_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTvaluePDCP_SNlength18_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCP-SNlength18 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hFNforPDCP-SNlength18 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvaluePDCP_SNlength18_specs_1 = {
+	sizeof(struct X2N_COUNTvaluePDCP_SNlength18),
+	offsetof(struct X2N_COUNTvaluePDCP_SNlength18, _asn_ctx),
+	asn_MAP_X2N_COUNTvaluePDCP_SNlength18_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_COUNTvaluePDCP_SNlength18_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18 = {
+	"COUNTvaluePDCP-SNlength18",
+	"COUNTvaluePDCP-SNlength18",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1,
+	sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1[0]), /* 1 */
+	asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTvaluePDCP_SNlength18_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTvaluePDCP_SNlength18_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.h b/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.h
new file mode 100644
index 0000000..3718c98
--- /dev/null
+++ b/asn1c_defs/X2N_COUNTvaluePDCP-SNlength18.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_COUNTvaluePDCP_SNlength18_H_
+#define	_X2N_COUNTvaluePDCP_SNlength18_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PDCP-SNlength18.h"
+#include "X2N_HFNforPDCP-SNlength18.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_COUNTvaluePDCP-SNlength18 */
+typedef struct X2N_COUNTvaluePDCP_SNlength18 {
+	X2N_PDCP_SNlength18_t	 pDCP_SNlength18;
+	X2N_HFNforPDCP_SNlength18_t	 hFNforPDCP_SNlength18;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTvaluePDCP_SNlength18_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_COUNTvaluePDCP_SNlength18_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CRNTI.c b/asn1c_defs/X2N_CRNTI.c
new file mode 100644
index 0000000..bb0c681
--- /dev/null
+++ b/asn1c_defs/X2N_CRNTI.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CRNTI.h"
+
+int
+X2N_CRNTI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_CRNTI_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  16,  16 }	/* (SIZE(16..16)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CRNTI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CRNTI = {
+	"CRNTI",
+	"CRNTI",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_CRNTI_tags_1,
+	sizeof(asn_DEF_X2N_CRNTI_tags_1)
+		/sizeof(asn_DEF_X2N_CRNTI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CRNTI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CRNTI_tags_1)
+		/sizeof(asn_DEF_X2N_CRNTI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CRNTI_constr_1, X2N_CRNTI_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CRNTI.h b/asn1c_defs/X2N_CRNTI.h
new file mode 100644
index 0000000..c3d658c
--- /dev/null
+++ b/asn1c_defs/X2N_CRNTI.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CRNTI_H_
+#define	_X2N_CRNTI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CRNTI */
+typedef BIT_STRING_t	 X2N_CRNTI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CRNTI;
+asn_struct_free_f X2N_CRNTI_free;
+asn_struct_print_f X2N_CRNTI_print;
+asn_constr_check_f X2N_CRNTI_constraint;
+ber_type_decoder_f X2N_CRNTI_decode_ber;
+der_type_encoder_f X2N_CRNTI_encode_der;
+xer_type_decoder_f X2N_CRNTI_decode_xer;
+xer_type_encoder_f X2N_CRNTI_encode_xer;
+per_type_decoder_f X2N_CRNTI_decode_uper;
+per_type_encoder_f X2N_CRNTI_encode_uper;
+per_type_decoder_f X2N_CRNTI_decode_aper;
+per_type_encoder_f X2N_CRNTI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CRNTI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CSG-Id.c b/asn1c_defs/X2N_CSG-Id.c
new file mode 100644
index 0000000..2ee72a7
--- /dev/null
+++ b/asn1c_defs/X2N_CSG-Id.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CSG-Id.h"
+
+int
+X2N_CSG_Id_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 27)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_CSG_Id_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  27,  27 }	/* (SIZE(27..27)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSG_Id_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSG_Id = {
+	"CSG-Id",
+	"CSG-Id",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_CSG_Id_tags_1,
+	sizeof(asn_DEF_X2N_CSG_Id_tags_1)
+		/sizeof(asn_DEF_X2N_CSG_Id_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CSG_Id_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSG_Id_tags_1)
+		/sizeof(asn_DEF_X2N_CSG_Id_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CSG_Id_constr_1, X2N_CSG_Id_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CSG-Id.h b/asn1c_defs/X2N_CSG-Id.h
new file mode 100644
index 0000000..abe8408
--- /dev/null
+++ b/asn1c_defs/X2N_CSG-Id.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CSG_Id_H_
+#define	_X2N_CSG_Id_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CSG-Id */
+typedef BIT_STRING_t	 X2N_CSG_Id_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSG_Id;
+asn_struct_free_f X2N_CSG_Id_free;
+asn_struct_print_f X2N_CSG_Id_print;
+asn_constr_check_f X2N_CSG_Id_constraint;
+ber_type_decoder_f X2N_CSG_Id_decode_ber;
+der_type_encoder_f X2N_CSG_Id_encode_der;
+xer_type_decoder_f X2N_CSG_Id_decode_xer;
+xer_type_encoder_f X2N_CSG_Id_encode_xer;
+per_type_decoder_f X2N_CSG_Id_decode_uper;
+per_type_encoder_f X2N_CSG_Id_encode_uper;
+per_type_decoder_f X2N_CSG_Id_decode_aper;
+per_type_encoder_f X2N_CSG_Id_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CSG_Id_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CSGMembershipStatus.c b/asn1c_defs/X2N_CSGMembershipStatus.c
new file mode 100644
index 0000000..97e3800
--- /dev/null
+++ b/asn1c_defs/X2N_CSGMembershipStatus.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CSGMembershipStatus.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_CSGMembershipStatus_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CSGMembershipStatus_value2enum_1[] = {
+	{ 0,	6,	"member" },
+	{ 1,	10,	"not-member" }
+};
+static const unsigned int asn_MAP_X2N_CSGMembershipStatus_enum2value_1[] = {
+	0,	/* member(0) */
+	1	/* not-member(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_CSGMembershipStatus_specs_1 = {
+	asn_MAP_X2N_CSGMembershipStatus_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CSGMembershipStatus_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSGMembershipStatus_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSGMembershipStatus = {
+	"CSGMembershipStatus",
+	"CSGMembershipStatus",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CSGMembershipStatus_tags_1,
+	sizeof(asn_DEF_X2N_CSGMembershipStatus_tags_1)
+		/sizeof(asn_DEF_X2N_CSGMembershipStatus_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CSGMembershipStatus_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSGMembershipStatus_tags_1)
+		/sizeof(asn_DEF_X2N_CSGMembershipStatus_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CSGMembershipStatus_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CSGMembershipStatus_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CSGMembershipStatus.h b/asn1c_defs/X2N_CSGMembershipStatus.h
new file mode 100644
index 0000000..d26530a
--- /dev/null
+++ b/asn1c_defs/X2N_CSGMembershipStatus.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CSGMembershipStatus_H_
+#define	_X2N_CSGMembershipStatus_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CSGMembershipStatus {
+	X2N_CSGMembershipStatus_member	= 0,
+	X2N_CSGMembershipStatus_not_member	= 1
+} e_X2N_CSGMembershipStatus;
+
+/* X2N_CSGMembershipStatus */
+typedef long	 X2N_CSGMembershipStatus_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSGMembershipStatus;
+asn_struct_free_f X2N_CSGMembershipStatus_free;
+asn_struct_print_f X2N_CSGMembershipStatus_print;
+asn_constr_check_f X2N_CSGMembershipStatus_constraint;
+ber_type_decoder_f X2N_CSGMembershipStatus_decode_ber;
+der_type_encoder_f X2N_CSGMembershipStatus_encode_der;
+xer_type_decoder_f X2N_CSGMembershipStatus_decode_xer;
+xer_type_encoder_f X2N_CSGMembershipStatus_encode_xer;
+per_type_decoder_f X2N_CSGMembershipStatus_decode_uper;
+per_type_encoder_f X2N_CSGMembershipStatus_encode_uper;
+per_type_decoder_f X2N_CSGMembershipStatus_decode_aper;
+per_type_encoder_f X2N_CSGMembershipStatus_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CSGMembershipStatus_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CSIReportList.c b/asn1c_defs/X2N_CSIReportList.c
new file mode 100644
index 0000000..4853046
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportList.c
@@ -0,0 +1,114 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CSIReportList.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_CSIReportList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1,  128 }	/* (SIZE(1..128)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportList__Member, uEID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uEID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportList__Member, cSIReportPerCSIProcess),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CSIReportPerCSIProcess,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cSIReportPerCSIProcess"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CSIReportList__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P128,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uEID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cSIReportPerCSIProcess */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CSIReportList__Member),
+	offsetof(struct X2N_CSIReportList__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_CSIReportList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CSIReportList_specs_1 = {
+	sizeof(struct X2N_CSIReportList),
+	offsetof(struct X2N_CSIReportList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportList = {
+	"CSIReportList",
+	"CSIReportList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CSIReportList_tags_1,
+	sizeof(asn_DEF_X2N_CSIReportList_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CSIReportList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportList_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CSIReportList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CSIReportList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CSIReportList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CSIReportList.h b/asn1c_defs/X2N_CSIReportList.h
new file mode 100644
index 0000000..441091d
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportList.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CSIReportList_H_
+#define	_X2N_CSIReportList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_UEID.h"
+#include "X2N_CSIReportPerCSIProcess.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CSIReportList__Member {
+	X2N_UEID_t	 uEID;
+	X2N_CSIReportPerCSIProcess_t	 cSIReportPerCSIProcess;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CSIReportList__Member;
+
+/* X2N_CSIReportList */
+typedef struct X2N_CSIReportList {
+	A_SEQUENCE_OF(CSIReportList__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CSIReportList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CSIReportPerCSIProcess.c b/asn1c_defs/X2N_CSIReportPerCSIProcess.c
new file mode 100644
index 0000000..f8fb845
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportPerCSIProcess.c
@@ -0,0 +1,144 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CSIReportPerCSIProcess.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_cSIProcessConfigurationIndex_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_cSIProcessConfigurationIndex_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  1,  7 }	/* (1..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_CSIReportPerCSIProcess_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  1,  4 }	/* (SIZE(1..4)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcess__Member, cSIProcessConfigurationIndex),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_cSIProcessConfigurationIndex_constr_3,  memb_X2N_cSIProcessConfigurationIndex_constraint_2 },
+		0, 0, /* No default value */
+		"cSIProcessConfigurationIndex"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcess__Member, cSIReportPerCSIProcessItem),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CSIReportPerCSIProcessItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cSIReportPerCSIProcessItem"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CSIReportPerCSIProcess__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P129,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cSIProcessConfigurationIndex */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cSIReportPerCSIProcessItem */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CSIReportPerCSIProcess__Member),
+	offsetof(struct X2N_CSIReportPerCSIProcess__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcess_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportPerCSIProcess_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CSIReportPerCSIProcess_specs_1 = {
+	sizeof(struct X2N_CSIReportPerCSIProcess),
+	offsetof(struct X2N_CSIReportPerCSIProcess, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcess = {
+	"CSIReportPerCSIProcess",
+	"CSIReportPerCSIProcess",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CSIReportPerCSIProcess_tags_1,
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CSIReportPerCSIProcess_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CSIReportPerCSIProcess_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CSIReportPerCSIProcess_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CSIReportPerCSIProcess_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CSIReportPerCSIProcess.h b/asn1c_defs/X2N_CSIReportPerCSIProcess.h
new file mode 100644
index 0000000..a95f05d
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportPerCSIProcess.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CSIReportPerCSIProcess_H_
+#define	_X2N_CSIReportPerCSIProcess_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <NativeInteger.h>
+#include "X2N_CSIReportPerCSIProcessItem.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CSIReportPerCSIProcess__Member {
+	long	 cSIProcessConfigurationIndex;
+	X2N_CSIReportPerCSIProcessItem_t	 cSIReportPerCSIProcessItem;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CSIReportPerCSIProcess__Member;
+
+/* X2N_CSIReportPerCSIProcess */
+typedef struct X2N_CSIReportPerCSIProcess {
+	A_SEQUENCE_OF(CSIReportPerCSIProcess__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportPerCSIProcess_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcess;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CSIReportPerCSIProcess_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcess_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CSIReportPerCSIProcess_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CSIReportPerCSIProcess_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CSIReportPerCSIProcessItem.c b/asn1c_defs/X2N_CSIReportPerCSIProcessItem.c
new file mode 100644
index 0000000..11b9d91
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportPerCSIProcessItem.c
@@ -0,0 +1,165 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CSIReportPerCSIProcessItem.h"
+
+#include "X2N_SubbandCQIList.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_rI_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_rI_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  1,  8 }	/* (1..8,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_CSIReportPerCSIProcessItem_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 1,  1,  1,  2 }	/* (SIZE(1..2)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, rI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_rI_constr_3,  memb_X2N_rI_constraint_2 },
+		0, 0, /* No default value */
+		"rI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, widebandCQI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WidebandCQI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"widebandCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, subbandSize),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubbandSize,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subbandSize"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, subbandCQIList),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubbandCQIList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subbandCQIList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P130,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* widebandCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subbandSize */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* subbandCQIList */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CSIReportPerCSIProcessItem__Member),
+	offsetof(struct X2N_CSIReportPerCSIProcessItem__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	5,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcessItem_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CSIReportPerCSIProcessItem_specs_1 = {
+	sizeof(struct X2N_CSIReportPerCSIProcessItem),
+	offsetof(struct X2N_CSIReportPerCSIProcessItem, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcessItem = {
+	"CSIReportPerCSIProcessItem",
+	"CSIReportPerCSIProcessItem",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1,
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CSIReportPerCSIProcessItem_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CSIReportPerCSIProcessItem_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CSIReportPerCSIProcessItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CSIReportPerCSIProcessItem.h b/asn1c_defs/X2N_CSIReportPerCSIProcessItem.h
new file mode 100644
index 0000000..dcee82e
--- /dev/null
+++ b/asn1c_defs/X2N_CSIReportPerCSIProcessItem.h
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CSIReportPerCSIProcessItem_H_
+#define	_X2N_CSIReportPerCSIProcessItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <NativeInteger.h>
+#include "X2N_WidebandCQI.h"
+#include "X2N_SubbandSize.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_SubbandCQIList;
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CSIReportPerCSIProcessItem__Member {
+	long	 rI;
+	X2N_WidebandCQI_t	 widebandCQI;
+	X2N_SubbandSize_t	 subbandSize;
+	struct X2N_SubbandCQIList	*subbandCQIList;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CSIReportPerCSIProcessItem__Member;
+
+/* X2N_CSIReportPerCSIProcessItem */
+typedef struct X2N_CSIReportPerCSIProcessItem {
+	A_SEQUENCE_OF(CSIReportPerCSIProcessItem__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportPerCSIProcessItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcessItem;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CSIReportPerCSIProcessItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcessItem_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CSIReportPerCSIProcessItem_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CSIReportPerCSIProcessItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CapacityValue.c b/asn1c_defs/X2N_CapacityValue.c
new file mode 100644
index 0000000..555a5d5
--- /dev/null
+++ b/asn1c_defs/X2N_CapacityValue.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CapacityValue.h"
+
+int
+X2N_CapacityValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CapacityValue_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CapacityValue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CapacityValue = {
+	"CapacityValue",
+	"CapacityValue",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_CapacityValue_tags_1,
+	sizeof(asn_DEF_X2N_CapacityValue_tags_1)
+		/sizeof(asn_DEF_X2N_CapacityValue_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CapacityValue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CapacityValue_tags_1)
+		/sizeof(asn_DEF_X2N_CapacityValue_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CapacityValue_constr_1, X2N_CapacityValue_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_CapacityValue.h b/asn1c_defs/X2N_CapacityValue.h
new file mode 100644
index 0000000..9175dfe
--- /dev/null
+++ b/asn1c_defs/X2N_CapacityValue.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CapacityValue_H_
+#define	_X2N_CapacityValue_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CapacityValue */
+typedef long	 X2N_CapacityValue_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CapacityValue_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CapacityValue;
+asn_struct_free_f X2N_CapacityValue_free;
+asn_struct_print_f X2N_CapacityValue_print;
+asn_constr_check_f X2N_CapacityValue_constraint;
+ber_type_decoder_f X2N_CapacityValue_decode_ber;
+der_type_encoder_f X2N_CapacityValue_encode_der;
+xer_type_decoder_f X2N_CapacityValue_decode_xer;
+xer_type_encoder_f X2N_CapacityValue_encode_xer;
+per_type_decoder_f X2N_CapacityValue_decode_uper;
+per_type_encoder_f X2N_CapacityValue_encode_uper;
+per_type_decoder_f X2N_CapacityValue_decode_aper;
+per_type_encoder_f X2N_CapacityValue_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CapacityValue_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Cause.c b/asn1c_defs/X2N_Cause.c
new file mode 100644
index 0000000..81e8765
--- /dev/null
+++ b/asn1c_defs/X2N_Cause.c
@@ -0,0 +1,82 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Cause.h"
+
+asn_per_constraints_t asn_PER_type_X2N_Cause_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_Cause_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Cause, choice.radioNetwork),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CauseRadioNetwork,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioNetwork"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Cause, choice.transport),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CauseTransport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Cause, choice.protocol),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CauseProtocol,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocol"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Cause, choice.misc),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CauseMisc,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"misc"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Cause_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* misc */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_Cause_specs_1 = {
+	sizeof(struct X2N_Cause),
+	offsetof(struct X2N_Cause, _asn_ctx),
+	offsetof(struct X2N_Cause, present),
+	sizeof(((struct X2N_Cause *)0)->present),
+	asn_MAP_X2N_Cause_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Cause = {
+	"Cause",
+	"Cause",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_Cause_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_Cause_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_Cause_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Cause.h b/asn1c_defs/X2N_Cause.h
new file mode 100644
index 0000000..54cef2e
--- /dev/null
+++ b/asn1c_defs/X2N_Cause.h
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Cause_H_
+#define	_X2N_Cause_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CauseRadioNetwork.h"
+#include "X2N_CauseTransport.h"
+#include "X2N_CauseProtocol.h"
+#include "X2N_CauseMisc.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Cause_PR {
+	X2N_Cause_PR_NOTHING,	/* No components present */
+	X2N_Cause_PR_radioNetwork,
+	X2N_Cause_PR_transport,
+	X2N_Cause_PR_protocol,
+	X2N_Cause_PR_misc
+	/* Extensions may appear below */
+	
+} X2N_Cause_PR;
+
+/* X2N_Cause */
+typedef struct X2N_Cause {
+	X2N_Cause_PR present;
+	union X2N_Cause_u {
+		X2N_CauseRadioNetwork_t	 radioNetwork;
+		X2N_CauseTransport_t	 transport;
+		X2N_CauseProtocol_t	 protocol;
+		X2N_CauseMisc_t	 misc;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Cause_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Cause;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_Cause_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_Cause_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_Cause_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Cause_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CauseMisc.c b/asn1c_defs/X2N_CauseMisc.c
new file mode 100644
index 0000000..58ff2e2
--- /dev/null
+++ b/asn1c_defs/X2N_CauseMisc.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CauseMisc.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CauseMisc_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CauseMisc_value2enum_1[] = {
+	{ 0,	27,	"control-processing-overload" },
+	{ 1,	16,	"hardware-failure" },
+	{ 2,	15,	"om-intervention" },
+	{ 3,	42,	"not-enough-user-plane-processing-resources" },
+	{ 4,	11,	"unspecified" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CauseMisc_enum2value_1[] = {
+	0,	/* control-processing-overload(0) */
+	1,	/* hardware-failure(1) */
+	3,	/* not-enough-user-plane-processing-resources(3) */
+	2,	/* om-intervention(2) */
+	4	/* unspecified(4) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CauseMisc_specs_1 = {
+	asn_MAP_X2N_CauseMisc_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CauseMisc_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CauseMisc_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CauseMisc = {
+	"CauseMisc",
+	"CauseMisc",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CauseMisc_tags_1,
+	sizeof(asn_DEF_X2N_CauseMisc_tags_1)
+		/sizeof(asn_DEF_X2N_CauseMisc_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CauseMisc_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CauseMisc_tags_1)
+		/sizeof(asn_DEF_X2N_CauseMisc_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CauseMisc_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CauseMisc_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CauseMisc.h b/asn1c_defs/X2N_CauseMisc.h
new file mode 100644
index 0000000..2b8db05
--- /dev/null
+++ b/asn1c_defs/X2N_CauseMisc.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CauseMisc_H_
+#define	_X2N_CauseMisc_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CauseMisc {
+	X2N_CauseMisc_control_processing_overload	= 0,
+	X2N_CauseMisc_hardware_failure	= 1,
+	X2N_CauseMisc_om_intervention	= 2,
+	X2N_CauseMisc_not_enough_user_plane_processing_resources	= 3,
+	X2N_CauseMisc_unspecified	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CauseMisc;
+
+/* X2N_CauseMisc */
+typedef long	 X2N_CauseMisc_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CauseMisc_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CauseMisc;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseMisc_specs_1;
+asn_struct_free_f CauseMisc_free;
+asn_struct_print_f CauseMisc_print;
+asn_constr_check_f CauseMisc_constraint;
+ber_type_decoder_f CauseMisc_decode_ber;
+der_type_encoder_f CauseMisc_encode_der;
+xer_type_decoder_f CauseMisc_decode_xer;
+xer_type_encoder_f CauseMisc_encode_xer;
+per_type_decoder_f CauseMisc_decode_uper;
+per_type_encoder_f CauseMisc_encode_uper;
+per_type_decoder_f CauseMisc_decode_aper;
+per_type_encoder_f CauseMisc_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CauseMisc_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CauseProtocol.c b/asn1c_defs/X2N_CauseProtocol.c
new file mode 100644
index 0000000..7250e23
--- /dev/null
+++ b/asn1c_defs/X2N_CauseProtocol.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CauseProtocol.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CauseProtocol_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CauseProtocol_value2enum_1[] = {
+	{ 0,	21,	"transfer-syntax-error" },
+	{ 1,	28,	"abstract-syntax-error-reject" },
+	{ 2,	39,	"abstract-syntax-error-ignore-and-notify" },
+	{ 3,	42,	"message-not-compatible-with-receiver-state" },
+	{ 4,	14,	"semantic-error" },
+	{ 5,	11,	"unspecified" },
+	{ 6,	49,	"abstract-syntax-error-falsely-constructed-message" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CauseProtocol_enum2value_1[] = {
+	6,	/* abstract-syntax-error-falsely-constructed-message(6) */
+	2,	/* abstract-syntax-error-ignore-and-notify(2) */
+	1,	/* abstract-syntax-error-reject(1) */
+	3,	/* message-not-compatible-with-receiver-state(3) */
+	4,	/* semantic-error(4) */
+	0,	/* transfer-syntax-error(0) */
+	5	/* unspecified(5) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CauseProtocol_specs_1 = {
+	asn_MAP_X2N_CauseProtocol_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CauseProtocol_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CauseProtocol_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CauseProtocol = {
+	"CauseProtocol",
+	"CauseProtocol",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CauseProtocol_tags_1,
+	sizeof(asn_DEF_X2N_CauseProtocol_tags_1)
+		/sizeof(asn_DEF_X2N_CauseProtocol_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CauseProtocol_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CauseProtocol_tags_1)
+		/sizeof(asn_DEF_X2N_CauseProtocol_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CauseProtocol_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CauseProtocol_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CauseProtocol.h b/asn1c_defs/X2N_CauseProtocol.h
new file mode 100644
index 0000000..653a41c
--- /dev/null
+++ b/asn1c_defs/X2N_CauseProtocol.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CauseProtocol_H_
+#define	_X2N_CauseProtocol_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CauseProtocol {
+	X2N_CauseProtocol_transfer_syntax_error	= 0,
+	X2N_CauseProtocol_abstract_syntax_error_reject	= 1,
+	X2N_CauseProtocol_abstract_syntax_error_ignore_and_notify	= 2,
+	X2N_CauseProtocol_message_not_compatible_with_receiver_state	= 3,
+	X2N_CauseProtocol_semantic_error	= 4,
+	X2N_CauseProtocol_unspecified	= 5,
+	X2N_CauseProtocol_abstract_syntax_error_falsely_constructed_message	= 6
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CauseProtocol;
+
+/* X2N_CauseProtocol */
+typedef long	 X2N_CauseProtocol_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CauseProtocol_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CauseProtocol;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseProtocol_specs_1;
+asn_struct_free_f CauseProtocol_free;
+asn_struct_print_f CauseProtocol_print;
+asn_constr_check_f CauseProtocol_constraint;
+ber_type_decoder_f CauseProtocol_decode_ber;
+der_type_encoder_f CauseProtocol_encode_der;
+xer_type_decoder_f CauseProtocol_decode_xer;
+xer_type_encoder_f CauseProtocol_encode_xer;
+per_type_decoder_f CauseProtocol_decode_uper;
+per_type_encoder_f CauseProtocol_encode_uper;
+per_type_decoder_f CauseProtocol_decode_aper;
+per_type_encoder_f CauseProtocol_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CauseProtocol_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CauseRadioNetwork.c b/asn1c_defs/X2N_CauseRadioNetwork.c
new file mode 100644
index 0000000..ad55a0e
--- /dev/null
+++ b/asn1c_defs/X2N_CauseRadioNetwork.c
@@ -0,0 +1,153 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CauseRadioNetwork.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CauseRadioNetwork_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  21 }	/* (0..21,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CauseRadioNetwork_value2enum_1[] = {
+	{ 0,	36,	"handover-desirable-for-radio-reasons" },
+	{ 1,	22,	"time-critical-handover" },
+	{ 2,	30,	"resource-optimisation-handover" },
+	{ 3,	27,	"reduce-load-in-serving-cell" },
+	{ 4,	16,	"partial-handover" },
+	{ 5,	26,	"unknown-new-eNB-UE-X2AP-ID" },
+	{ 6,	26,	"unknown-old-eNB-UE-X2AP-ID" },
+	{ 7,	26,	"unknown-pair-of-UE-X2AP-ID" },
+	{ 8,	21,	"ho-target-not-allowed" },
+	{ 9,	22,	"tx2relocoverall-expiry" },
+	{ 10,	17,	"trelocprep-expiry" },
+	{ 11,	18,	"cell-not-available" },
+	{ 12,	43,	"no-radio-resources-available-in-target-cell" },
+	{ 13,	19,	"invalid-MME-GroupID" },
+	{ 14,	16,	"unknown-MME-Code" },
+	{ 15,	63,	"encryption-and-or-integrity-protection-algorithms-not-supported" },
+	{ 16,	26,	"reportCharacteristicsEmpty" },
+	{ 17,	19,	"noReportPeriodicity" },
+	{ 18,	21,	"existingMeasurementID" },
+	{ 19,	26,	"unknown-eNB-Measurement-ID" },
+	{ 20,	37,	"measurement-temporarily-not-available" },
+	{ 21,	11,	"unspecified" },
+	{ 22,	14,	"load-balancing" },
+	{ 23,	21,	"handover-optimisation" },
+	{ 24,	26,	"value-out-of-allowed-range" },
+	{ 25,	27,	"multiple-E-RAB-ID-instances" },
+	{ 26,	18,	"switch-off-ongoing" },
+	{ 27,	23,	"not-supported-QCI-value" },
+	{ 28,	40,	"measurement-not-supported-for-the-object" },
+	{ 29,	17,	"tDCoverall-expiry" },
+	{ 30,	14,	"tDCprep-expiry" },
+	{ 31,	34,	"action-desirable-for-radio-reasons" },
+	{ 32,	11,	"reduce-load" },
+	{ 33,	21,	"resource-optimisation" },
+	{ 34,	20,	"time-critical-action" },
+	{ 35,	18,	"target-not-allowed" },
+	{ 36,	28,	"no-radio-resources-available" },
+	{ 37,	23,	"invalid-QoS-combination" },
+	{ 38,	35,	"encryption-algorithms-not-aupported" },
+	{ 39,	19,	"procedure-cancelled" },
+	{ 40,	11,	"rRM-purpose" },
+	{ 41,	21,	"improve-user-bit-rate" },
+	{ 42,	15,	"user-inactivity" },
+	{ 43,	29,	"radio-connection-with-UE-lost" },
+	{ 44,	40,	"failure-in-the-radio-interface-procedure" },
+	{ 45,	27,	"bearer-option-not-supported" },
+	{ 46,	12,	"mCG-Mobility" },
+	{ 47,	12,	"sCG-Mobility" },
+	{ 48,	23,	"count-reaches-max-value" },
+	{ 49,	29,	"unknown-old-en-gNB-UE-X2AP-ID" },
+	{ 50,	13,	"pDCP-Overload" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CauseRadioNetwork_enum2value_1[] = {
+	31,	/* action-desirable-for-radio-reasons(31) */
+	45,	/* bearer-option-not-supported(45) */
+	11,	/* cell-not-available(11) */
+	48,	/* count-reaches-max-value(48) */
+	38,	/* encryption-algorithms-not-aupported(38) */
+	15,	/* encryption-and-or-integrity-protection-algorithms-not-supported(15) */
+	18,	/* existingMeasurementID(18) */
+	44,	/* failure-in-the-radio-interface-procedure(44) */
+	0,	/* handover-desirable-for-radio-reasons(0) */
+	23,	/* handover-optimisation(23) */
+	8,	/* ho-target-not-allowed(8) */
+	41,	/* improve-user-bit-rate(41) */
+	13,	/* invalid-MME-GroupID(13) */
+	37,	/* invalid-QoS-combination(37) */
+	22,	/* load-balancing(22) */
+	46,	/* mCG-Mobility(46) */
+	28,	/* measurement-not-supported-for-the-object(28) */
+	20,	/* measurement-temporarily-not-available(20) */
+	25,	/* multiple-E-RAB-ID-instances(25) */
+	36,	/* no-radio-resources-available(36) */
+	12,	/* no-radio-resources-available-in-target-cell(12) */
+	17,	/* noReportPeriodicity(17) */
+	27,	/* not-supported-QCI-value(27) */
+	50,	/* pDCP-Overload(50) */
+	4,	/* partial-handover(4) */
+	39,	/* procedure-cancelled(39) */
+	40,	/* rRM-purpose(40) */
+	43,	/* radio-connection-with-UE-lost(43) */
+	32,	/* reduce-load(32) */
+	3,	/* reduce-load-in-serving-cell(3) */
+	16,	/* reportCharacteristicsEmpty(16) */
+	33,	/* resource-optimisation(33) */
+	2,	/* resource-optimisation-handover(2) */
+	47,	/* sCG-Mobility(47) */
+	26,	/* switch-off-ongoing(26) */
+	29,	/* tDCoverall-expiry(29) */
+	30,	/* tDCprep-expiry(30) */
+	35,	/* target-not-allowed(35) */
+	34,	/* time-critical-action(34) */
+	1,	/* time-critical-handover(1) */
+	10,	/* trelocprep-expiry(10) */
+	9,	/* tx2relocoverall-expiry(9) */
+	14,	/* unknown-MME-Code(14) */
+	19,	/* unknown-eNB-Measurement-ID(19) */
+	5,	/* unknown-new-eNB-UE-X2AP-ID(5) */
+	6,	/* unknown-old-eNB-UE-X2AP-ID(6) */
+	49,	/* unknown-old-en-gNB-UE-X2AP-ID(49) */
+	7,	/* unknown-pair-of-UE-X2AP-ID(7) */
+	21,	/* unspecified(21) */
+	42,	/* user-inactivity(42) */
+	24	/* value-out-of-allowed-range(24) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CauseRadioNetwork_specs_1 = {
+	asn_MAP_X2N_CauseRadioNetwork_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CauseRadioNetwork_enum2value_1,	/* N => "tag"; sorted by N */
+	51,	/* Number of elements in the maps */
+	23,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CauseRadioNetwork_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CauseRadioNetwork = {
+	"CauseRadioNetwork",
+	"CauseRadioNetwork",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CauseRadioNetwork_tags_1,
+	sizeof(asn_DEF_X2N_CauseRadioNetwork_tags_1)
+		/sizeof(asn_DEF_X2N_CauseRadioNetwork_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CauseRadioNetwork_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CauseRadioNetwork_tags_1)
+		/sizeof(asn_DEF_X2N_CauseRadioNetwork_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CauseRadioNetwork_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CauseRadioNetwork_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CauseRadioNetwork.h b/asn1c_defs/X2N_CauseRadioNetwork.h
new file mode 100644
index 0000000..e9fd47c
--- /dev/null
+++ b/asn1c_defs/X2N_CauseRadioNetwork.h
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CauseRadioNetwork_H_
+#define	_X2N_CauseRadioNetwork_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CauseRadioNetwork {
+	X2N_CauseRadioNetwork_handover_desirable_for_radio_reasons	= 0,
+	X2N_CauseRadioNetwork_time_critical_handover	= 1,
+	X2N_CauseRadioNetwork_resource_optimisation_handover	= 2,
+	X2N_CauseRadioNetwork_reduce_load_in_serving_cell	= 3,
+	X2N_CauseRadioNetwork_partial_handover	= 4,
+	X2N_CauseRadioNetwork_unknown_new_eNB_UE_X2AP_ID	= 5,
+	X2N_CauseRadioNetwork_unknown_old_eNB_UE_X2AP_ID	= 6,
+	X2N_CauseRadioNetwork_unknown_pair_of_UE_X2AP_ID	= 7,
+	X2N_CauseRadioNetwork_ho_target_not_allowed	= 8,
+	X2N_CauseRadioNetwork_tx2relocoverall_expiry	= 9,
+	X2N_CauseRadioNetwork_trelocprep_expiry	= 10,
+	X2N_CauseRadioNetwork_cell_not_available	= 11,
+	X2N_CauseRadioNetwork_no_radio_resources_available_in_target_cell	= 12,
+	X2N_CauseRadioNetwork_invalid_MME_GroupID	= 13,
+	X2N_CauseRadioNetwork_unknown_MME_Code	= 14,
+	X2N_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported	= 15,
+	X2N_CauseRadioNetwork_reportCharacteristicsEmpty	= 16,
+	X2N_CauseRadioNetwork_noReportPeriodicity	= 17,
+	X2N_CauseRadioNetwork_existingMeasurementID	= 18,
+	X2N_CauseRadioNetwork_unknown_eNB_Measurement_ID	= 19,
+	X2N_CauseRadioNetwork_measurement_temporarily_not_available	= 20,
+	X2N_CauseRadioNetwork_unspecified	= 21,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_CauseRadioNetwork_load_balancing	= 22,
+	X2N_CauseRadioNetwork_handover_optimisation	= 23,
+	X2N_CauseRadioNetwork_value_out_of_allowed_range	= 24,
+	X2N_CauseRadioNetwork_multiple_E_RAB_ID_instances	= 25,
+	X2N_CauseRadioNetwork_switch_off_ongoing	= 26,
+	X2N_CauseRadioNetwork_not_supported_QCI_value	= 27,
+	X2N_CauseRadioNetwork_measurement_not_supported_for_the_object	= 28,
+	X2N_CauseRadioNetwork_tDCoverall_expiry	= 29,
+	X2N_CauseRadioNetwork_tDCprep_expiry	= 30,
+	X2N_CauseRadioNetwork_action_desirable_for_radio_reasons	= 31,
+	X2N_CauseRadioNetwork_reduce_load	= 32,
+	X2N_CauseRadioNetwork_resource_optimisation	= 33,
+	X2N_CauseRadioNetwork_time_critical_action	= 34,
+	X2N_CauseRadioNetwork_target_not_allowed	= 35,
+	X2N_CauseRadioNetwork_no_radio_resources_available	= 36,
+	X2N_CauseRadioNetwork_invalid_QoS_combination	= 37,
+	X2N_CauseRadioNetwork_encryption_algorithms_not_aupported	= 38,
+	X2N_CauseRadioNetwork_procedure_cancelled	= 39,
+	X2N_CauseRadioNetwork_rRM_purpose	= 40,
+	X2N_CauseRadioNetwork_improve_user_bit_rate	= 41,
+	X2N_CauseRadioNetwork_user_inactivity	= 42,
+	X2N_CauseRadioNetwork_radio_connection_with_UE_lost	= 43,
+	X2N_CauseRadioNetwork_failure_in_the_radio_interface_procedure	= 44,
+	X2N_CauseRadioNetwork_bearer_option_not_supported	= 45,
+	X2N_CauseRadioNetwork_mCG_Mobility	= 46,
+	X2N_CauseRadioNetwork_sCG_Mobility	= 47,
+	X2N_CauseRadioNetwork_count_reaches_max_value	= 48,
+	X2N_CauseRadioNetwork_unknown_old_en_gNB_UE_X2AP_ID	= 49,
+	X2N_CauseRadioNetwork_pDCP_Overload	= 50
+} e_X2N_CauseRadioNetwork;
+
+/* X2N_CauseRadioNetwork */
+typedef long	 X2N_CauseRadioNetwork_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CauseRadioNetwork_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CauseRadioNetwork;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseRadioNetwork_specs_1;
+asn_struct_free_f CauseRadioNetwork_free;
+asn_struct_print_f CauseRadioNetwork_print;
+asn_constr_check_f CauseRadioNetwork_constraint;
+ber_type_decoder_f CauseRadioNetwork_decode_ber;
+der_type_encoder_f CauseRadioNetwork_encode_der;
+xer_type_decoder_f CauseRadioNetwork_decode_xer;
+xer_type_encoder_f CauseRadioNetwork_encode_xer;
+per_type_decoder_f CauseRadioNetwork_decode_uper;
+per_type_encoder_f CauseRadioNetwork_encode_uper;
+per_type_decoder_f CauseRadioNetwork_decode_aper;
+per_type_encoder_f CauseRadioNetwork_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CauseRadioNetwork_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CauseTransport.c b/asn1c_defs/X2N_CauseTransport.c
new file mode 100644
index 0000000..0dd9e5d
--- /dev/null
+++ b/asn1c_defs/X2N_CauseTransport.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CauseTransport.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CauseTransport_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CauseTransport_value2enum_1[] = {
+	{ 0,	30,	"transport-resource-unavailable" },
+	{ 1,	11,	"unspecified" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CauseTransport_enum2value_1[] = {
+	0,	/* transport-resource-unavailable(0) */
+	1	/* unspecified(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CauseTransport_specs_1 = {
+	asn_MAP_X2N_CauseTransport_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CauseTransport_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CauseTransport_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CauseTransport = {
+	"CauseTransport",
+	"CauseTransport",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CauseTransport_tags_1,
+	sizeof(asn_DEF_X2N_CauseTransport_tags_1)
+		/sizeof(asn_DEF_X2N_CauseTransport_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CauseTransport_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CauseTransport_tags_1)
+		/sizeof(asn_DEF_X2N_CauseTransport_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CauseTransport_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CauseTransport_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CauseTransport.h b/asn1c_defs/X2N_CauseTransport.h
new file mode 100644
index 0000000..dc3171d
--- /dev/null
+++ b/asn1c_defs/X2N_CauseTransport.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CauseTransport_H_
+#define	_X2N_CauseTransport_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CauseTransport {
+	X2N_CauseTransport_transport_resource_unavailable	= 0,
+	X2N_CauseTransport_unspecified	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CauseTransport;
+
+/* X2N_CauseTransport */
+typedef long	 X2N_CauseTransport_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CauseTransport_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CauseTransport;
+extern const asn_INTEGER_specifics_t asn_SPC_CauseTransport_specs_1;
+asn_struct_free_f CauseTransport_free;
+asn_struct_print_f CauseTransport_print;
+asn_constr_check_f CauseTransport_constraint;
+ber_type_decoder_f CauseTransport_decode_ber;
+der_type_encoder_f CauseTransport_encode_der;
+xer_type_decoder_f CauseTransport_decode_xer;
+xer_type_encoder_f CauseTransport_encode_xer;
+per_type_decoder_f CauseTransport_decode_uper;
+per_type_encoder_f CauseTransport_encode_uper;
+per_type_decoder_f CauseTransport_decode_aper;
+per_type_encoder_f CauseTransport_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CauseTransport_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Cell-Size.c b/asn1c_defs/X2N_Cell-Size.c
new file mode 100644
index 0000000..52e53db
--- /dev/null
+++ b/asn1c_defs/X2N_Cell-Size.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Cell-Size.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Cell_Size_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Cell_Size_value2enum_1[] = {
+	{ 0,	9,	"verysmall" },
+	{ 1,	5,	"small" },
+	{ 2,	6,	"medium" },
+	{ 3,	5,	"large" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Cell_Size_enum2value_1[] = {
+	3,	/* large(3) */
+	2,	/* medium(2) */
+	1,	/* small(1) */
+	0	/* verysmall(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Cell_Size_specs_1 = {
+	asn_MAP_X2N_Cell_Size_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Cell_Size_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Cell_Size_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Cell_Size = {
+	"Cell-Size",
+	"Cell-Size",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Cell_Size_tags_1,
+	sizeof(asn_DEF_X2N_Cell_Size_tags_1)
+		/sizeof(asn_DEF_X2N_Cell_Size_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Cell_Size_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Cell_Size_tags_1)
+		/sizeof(asn_DEF_X2N_Cell_Size_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Cell_Size_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Cell_Size_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Cell-Size.h b/asn1c_defs/X2N_Cell-Size.h
new file mode 100644
index 0000000..af272c4
--- /dev/null
+++ b/asn1c_defs/X2N_Cell-Size.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Cell_Size_H_
+#define	_X2N_Cell_Size_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Cell_Size {
+	X2N_Cell_Size_verysmall	= 0,
+	X2N_Cell_Size_small	= 1,
+	X2N_Cell_Size_medium	= 2,
+	X2N_Cell_Size_large	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Cell_Size;
+
+/* X2N_Cell-Size */
+typedef long	 X2N_Cell_Size_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Cell_Size_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Cell_Size;
+extern const asn_INTEGER_specifics_t asn_SPC_Cell_Size_specs_1;
+asn_struct_free_f Cell_Size_free;
+asn_struct_print_f Cell_Size_print;
+asn_constr_check_f Cell_Size_constraint;
+ber_type_decoder_f Cell_Size_decode_ber;
+der_type_encoder_f Cell_Size_encode_der;
+xer_type_decoder_f Cell_Size_decode_xer;
+xer_type_encoder_f Cell_Size_encode_xer;
+per_type_decoder_f Cell_Size_decode_uper;
+per_type_encoder_f Cell_Size_encode_uper;
+per_type_decoder_f Cell_Size_decode_aper;
+per_type_encoder_f Cell_Size_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Cell_Size_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellActivationFailure.c b/asn1c_defs/X2N_CellActivationFailure.c
new file mode 100644
index 0000000..57575b2
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellActivationFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P27,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationFailure_specs_1 = {
+	sizeof(struct X2N_CellActivationFailure),
+	offsetof(struct X2N_CellActivationFailure, _asn_ctx),
+	asn_MAP_X2N_CellActivationFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationFailure = {
+	"CellActivationFailure",
+	"CellActivationFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationFailure_tags_1,
+	sizeof(asn_DEF_X2N_CellActivationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellActivationFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_CellActivationFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellActivationFailure.h b/asn1c_defs/X2N_CellActivationFailure.h
new file mode 100644
index 0000000..b53c5a8
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellActivationFailure_H_
+#define	_X2N_CellActivationFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CellActivationFailure */
+typedef struct X2N_CellActivationFailure {
+	X2N_ProtocolIE_Container_8180P27_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellActivationFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellActivationRequest.c b/asn1c_defs/X2N_CellActivationRequest.c
new file mode 100644
index 0000000..a796fea
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellActivationRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P25,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationRequest_specs_1 = {
+	sizeof(struct X2N_CellActivationRequest),
+	offsetof(struct X2N_CellActivationRequest, _asn_ctx),
+	asn_MAP_X2N_CellActivationRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationRequest = {
+	"CellActivationRequest",
+	"CellActivationRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationRequest_tags_1,
+	sizeof(asn_DEF_X2N_CellActivationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellActivationRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_CellActivationRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellActivationRequest.h b/asn1c_defs/X2N_CellActivationRequest.h
new file mode 100644
index 0000000..86ab5f8
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellActivationRequest_H_
+#define	_X2N_CellActivationRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CellActivationRequest */
+typedef struct X2N_CellActivationRequest {
+	X2N_ProtocolIE_Container_8180P25_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellActivationRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellActivationResponse.c b/asn1c_defs/X2N_CellActivationResponse.c
new file mode 100644
index 0000000..6e2fff8
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellActivationResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P26,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationResponse_specs_1 = {
+	sizeof(struct X2N_CellActivationResponse),
+	offsetof(struct X2N_CellActivationResponse, _asn_ctx),
+	asn_MAP_X2N_CellActivationResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationResponse = {
+	"CellActivationResponse",
+	"CellActivationResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationResponse_tags_1,
+	sizeof(asn_DEF_X2N_CellActivationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellActivationResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_CellActivationResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_CellActivationResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellActivationResponse.h b/asn1c_defs/X2N_CellActivationResponse.h
new file mode 100644
index 0000000..003edaf
--- /dev/null
+++ b/asn1c_defs/X2N_CellActivationResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellActivationResponse_H_
+#define	_X2N_CellActivationResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CellActivationResponse */
+typedef struct X2N_CellActivationResponse {
+	X2N_ProtocolIE_Container_8180P26_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellActivationResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellAssistanceInformation.c b/asn1c_defs/X2N_CellAssistanceInformation.c
new file mode 100644
index 0000000..9933574
--- /dev/null
+++ b/asn1c_defs/X2N_CellAssistanceInformation.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellAssistanceInformation.h"
+
+#include "X2N_Limited-list.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_full_list_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_CellAssistanceInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_full_list_value2enum_3[] = {
+	{ 0,	16,	"allServedNRcells" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_full_list_enum2value_3[] = {
+	0	/* allServedNRcells(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_full_list_specs_3 = {
+	asn_MAP_X2N_full_list_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_full_list_enum2value_3,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_full_list_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_full_list_3 = {
+	"full-list",
+	"full-list",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_full_list_tags_3,
+	sizeof(asn_DEF_X2N_full_list_tags_3)
+		/sizeof(asn_DEF_X2N_full_list_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_full_list_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_full_list_tags_3)
+		/sizeof(asn_DEF_X2N_full_list_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_full_list_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_full_list_specs_3	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_CellAssistanceInformation_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_CellAssistanceInformation, choice.limited_list),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Limited_list,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"limited-list"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellAssistanceInformation, choice.full_list),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_full_list_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"full-list"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellAssistanceInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* limited-list */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* full-list */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_CellAssistanceInformation_specs_1 = {
+	sizeof(struct X2N_CellAssistanceInformation),
+	offsetof(struct X2N_CellAssistanceInformation, _asn_ctx),
+	offsetof(struct X2N_CellAssistanceInformation, present),
+	sizeof(((struct X2N_CellAssistanceInformation *)0)->present),
+	asn_MAP_X2N_CellAssistanceInformation_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellAssistanceInformation = {
+	"CellAssistanceInformation",
+	"CellAssistanceInformation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_CellAssistanceInformation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_CellAssistanceInformation_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellAssistanceInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellAssistanceInformation.h b/asn1c_defs/X2N_CellAssistanceInformation.h
new file mode 100644
index 0000000..c0f9e7e
--- /dev/null
+++ b/asn1c_defs/X2N_CellAssistanceInformation.h
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellAssistanceInformation_H_
+#define	_X2N_CellAssistanceInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CellAssistanceInformation_PR {
+	X2N_CellAssistanceInformation_PR_NOTHING,	/* No components present */
+	X2N_CellAssistanceInformation_PR_limited_list,
+	X2N_CellAssistanceInformation_PR_full_list
+	/* Extensions may appear below */
+	
+} X2N_CellAssistanceInformation_PR;
+typedef enum X2N_CellAssistanceInformation__full_list {
+	X2N_CellAssistanceInformation__full_list_allServedNRcells	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CellAssistanceInformation__full_list;
+
+/* Forward declarations */
+struct X2N_Limited_list;
+
+/* X2N_CellAssistanceInformation */
+typedef struct X2N_CellAssistanceInformation {
+	X2N_CellAssistanceInformation_PR present;
+	union X2N_CellAssistanceInformation_u {
+		struct X2N_Limited_list	*limited_list;
+		long	 full_list;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellAssistanceInformation_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_full_list_3;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellAssistanceInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellAssistanceInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellBasedMDT.c b/asn1c_defs/X2N_CellBasedMDT.c
new file mode 100644
index 0000000..92ec4a3
--- /dev/null
+++ b/asn1c_defs/X2N_CellBasedMDT.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellBasedMDT.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_CellBasedMDT_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedMDT, cellIdListforMDT),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellIdListforMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellIdListforMDT"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellBasedMDT, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P112,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellBasedMDT_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellBasedMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellBasedMDT_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdListforMDT */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedMDT_specs_1 = {
+	sizeof(struct X2N_CellBasedMDT),
+	offsetof(struct X2N_CellBasedMDT, _asn_ctx),
+	asn_MAP_X2N_CellBasedMDT_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_CellBasedMDT_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedMDT = {
+	"CellBasedMDT",
+	"CellBasedMDT",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellBasedMDT_tags_1,
+	sizeof(asn_DEF_X2N_CellBasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_CellBasedMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellBasedMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellBasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_CellBasedMDT_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellBasedMDT_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellBasedMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellBasedMDT.h b/asn1c_defs/X2N_CellBasedMDT.h
new file mode 100644
index 0000000..6b998ac
--- /dev/null
+++ b/asn1c_defs/X2N_CellBasedMDT.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellBasedMDT_H_
+#define	_X2N_CellBasedMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CellIdListforMDT.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellBasedMDT */
+typedef struct X2N_CellBasedMDT {
+	X2N_CellIdListforMDT_t	 cellIdListforMDT;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellBasedMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedMDT;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellBasedMDT_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellBasedMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellBasedQMC.c b/asn1c_defs/X2N_CellBasedQMC.c
new file mode 100644
index 0000000..d2f6f45
--- /dev/null
+++ b/asn1c_defs/X2N_CellBasedQMC.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellBasedQMC.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_CellBasedQMC_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedQMC, cellIdListforQMC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellIdListforQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellIdListforQMC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellBasedQMC, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P113,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellBasedQMC_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellBasedQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellBasedQMC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdListforQMC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedQMC_specs_1 = {
+	sizeof(struct X2N_CellBasedQMC),
+	offsetof(struct X2N_CellBasedQMC, _asn_ctx),
+	asn_MAP_X2N_CellBasedQMC_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_CellBasedQMC_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedQMC = {
+	"CellBasedQMC",
+	"CellBasedQMC",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellBasedQMC_tags_1,
+	sizeof(asn_DEF_X2N_CellBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_CellBasedQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellBasedQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_CellBasedQMC_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellBasedQMC_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellBasedQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellBasedQMC.h b/asn1c_defs/X2N_CellBasedQMC.h
new file mode 100644
index 0000000..0165fc2
--- /dev/null
+++ b/asn1c_defs/X2N_CellBasedQMC.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellBasedQMC_H_
+#define	_X2N_CellBasedQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CellIdListforQMC.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellBasedQMC */
+typedef struct X2N_CellBasedQMC {
+	X2N_CellIdListforQMC_t	 cellIdListforQMC;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellBasedQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedQMC;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellBasedQMC_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellBasedQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellCapacityClassValue.c b/asn1c_defs/X2N_CellCapacityClassValue.c
new file mode 100644
index 0000000..d22a90d
--- /dev/null
+++ b/asn1c_defs/X2N_CellCapacityClassValue.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellCapacityClassValue.h"
+
+int
+X2N_CellCapacityClassValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CellCapacityClassValue_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  1,  100 }	/* (1..100,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellCapacityClassValue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellCapacityClassValue = {
+	"CellCapacityClassValue",
+	"CellCapacityClassValue",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_CellCapacityClassValue_tags_1,
+	sizeof(asn_DEF_X2N_CellCapacityClassValue_tags_1)
+		/sizeof(asn_DEF_X2N_CellCapacityClassValue_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellCapacityClassValue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellCapacityClassValue_tags_1)
+		/sizeof(asn_DEF_X2N_CellCapacityClassValue_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellCapacityClassValue_constr_1, X2N_CellCapacityClassValue_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_CellCapacityClassValue.h b/asn1c_defs/X2N_CellCapacityClassValue.h
new file mode 100644
index 0000000..be81c42
--- /dev/null
+++ b/asn1c_defs/X2N_CellCapacityClassValue.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellCapacityClassValue_H_
+#define	_X2N_CellCapacityClassValue_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_CellCapacityClassValue */
+typedef long	 X2N_CellCapacityClassValue_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CellCapacityClassValue_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellCapacityClassValue;
+asn_struct_free_f X2N_CellCapacityClassValue_free;
+asn_struct_print_f X2N_CellCapacityClassValue_print;
+asn_constr_check_f X2N_CellCapacityClassValue_constraint;
+ber_type_decoder_f X2N_CellCapacityClassValue_decode_ber;
+der_type_encoder_f X2N_CellCapacityClassValue_encode_der;
+xer_type_decoder_f X2N_CellCapacityClassValue_decode_xer;
+xer_type_encoder_f X2N_CellCapacityClassValue_encode_xer;
+per_type_decoder_f X2N_CellCapacityClassValue_decode_uper;
+per_type_encoder_f X2N_CellCapacityClassValue_encode_uper;
+per_type_decoder_f X2N_CellCapacityClassValue_decode_aper;
+per_type_encoder_f X2N_CellCapacityClassValue_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellCapacityClassValue_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellDeploymentStatusIndicator.c b/asn1c_defs/X2N_CellDeploymentStatusIndicator.c
new file mode 100644
index 0000000..a874dad
--- /dev/null
+++ b/asn1c_defs/X2N_CellDeploymentStatusIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellDeploymentStatusIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CellDeploymentStatusIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CellDeploymentStatusIndicator_value2enum_1[] = {
+	{ 0,	23,	"pre-change-notification" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CellDeploymentStatusIndicator_enum2value_1[] = {
+	0	/* pre-change-notification(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CellDeploymentStatusIndicator_specs_1 = {
+	asn_MAP_X2N_CellDeploymentStatusIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CellDeploymentStatusIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellDeploymentStatusIndicator = {
+	"CellDeploymentStatusIndicator",
+	"CellDeploymentStatusIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1,
+	sizeof(asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_CellDeploymentStatusIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellDeploymentStatusIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CellDeploymentStatusIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellDeploymentStatusIndicator.h b/asn1c_defs/X2N_CellDeploymentStatusIndicator.h
new file mode 100644
index 0000000..67e11e7
--- /dev/null
+++ b/asn1c_defs/X2N_CellDeploymentStatusIndicator.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellDeploymentStatusIndicator_H_
+#define	_X2N_CellDeploymentStatusIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CellDeploymentStatusIndicator {
+	X2N_CellDeploymentStatusIndicator_pre_change_notification	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CellDeploymentStatusIndicator;
+
+/* X2N_CellDeploymentStatusIndicator */
+typedef long	 X2N_CellDeploymentStatusIndicator_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CellDeploymentStatusIndicator_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellDeploymentStatusIndicator;
+extern const asn_INTEGER_specifics_t asn_SPC_CellDeploymentStatusIndicator_specs_1;
+asn_struct_free_f CellDeploymentStatusIndicator_free;
+asn_struct_print_f CellDeploymentStatusIndicator_print;
+asn_constr_check_f CellDeploymentStatusIndicator_constraint;
+ber_type_decoder_f CellDeploymentStatusIndicator_decode_ber;
+der_type_encoder_f CellDeploymentStatusIndicator_encode_der;
+xer_type_decoder_f CellDeploymentStatusIndicator_decode_xer;
+xer_type_encoder_f CellDeploymentStatusIndicator_encode_xer;
+per_type_decoder_f CellDeploymentStatusIndicator_decode_uper;
+per_type_encoder_f CellDeploymentStatusIndicator_encode_uper;
+per_type_decoder_f CellDeploymentStatusIndicator_decode_aper;
+per_type_encoder_f CellDeploymentStatusIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellDeploymentStatusIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellIdListforMDT.c b/asn1c_defs/X2N_CellIdListforMDT.c
new file mode 100644
index 0000000..36549ee
--- /dev/null
+++ b/asn1c_defs/X2N_CellIdListforMDT.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellIdListforMDT.h"
+
+#include "X2N_ECGI.h"
+asn_per_constraints_t asn_PER_type_X2N_CellIdListforMDT_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_CellIdListforMDT_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellIdListforMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CellIdListforMDT_specs_1 = {
+	sizeof(struct X2N_CellIdListforMDT),
+	offsetof(struct X2N_CellIdListforMDT, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellIdListforMDT = {
+	"CellIdListforMDT",
+	"CellIdListforMDT",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CellIdListforMDT_tags_1,
+	sizeof(asn_DEF_X2N_CellIdListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_CellIdListforMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellIdListforMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellIdListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_CellIdListforMDT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellIdListforMDT_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CellIdListforMDT_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CellIdListforMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellIdListforMDT.h b/asn1c_defs/X2N_CellIdListforMDT.h
new file mode 100644
index 0000000..bf5819c
--- /dev/null
+++ b/asn1c_defs/X2N_CellIdListforMDT.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellIdListforMDT_H_
+#define	_X2N_CellIdListforMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_CellIdListforMDT */
+typedef struct X2N_CellIdListforMDT {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellIdListforMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellIdListforMDT;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CellIdListforMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellIdListforMDT_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CellIdListforMDT_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellIdListforMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellIdListforQMC.c b/asn1c_defs/X2N_CellIdListforQMC.c
new file mode 100644
index 0000000..1c1bb82
--- /dev/null
+++ b/asn1c_defs/X2N_CellIdListforQMC.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellIdListforQMC.h"
+
+#include "X2N_ECGI.h"
+asn_per_constraints_t asn_PER_type_X2N_CellIdListforQMC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_CellIdListforQMC_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellIdListforQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CellIdListforQMC_specs_1 = {
+	sizeof(struct X2N_CellIdListforQMC),
+	offsetof(struct X2N_CellIdListforQMC, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellIdListforQMC = {
+	"CellIdListforQMC",
+	"CellIdListforQMC",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CellIdListforQMC_tags_1,
+	sizeof(asn_DEF_X2N_CellIdListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_CellIdListforQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellIdListforQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellIdListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_CellIdListforQMC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellIdListforQMC_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CellIdListforQMC_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CellIdListforQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellIdListforQMC.h b/asn1c_defs/X2N_CellIdListforQMC.h
new file mode 100644
index 0000000..6a10468
--- /dev/null
+++ b/asn1c_defs/X2N_CellIdListforQMC.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellIdListforQMC_H_
+#define	_X2N_CellIdListforQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_CellIdListforQMC */
+typedef struct X2N_CellIdListforQMC {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellIdListforQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellIdListforQMC;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CellIdListforQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellIdListforQMC_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CellIdListforQMC_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellIdListforQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellInformation-Item.c b/asn1c_defs/X2N_CellInformation-Item.c
new file mode 100644
index 0000000..1b29cef
--- /dev/null
+++ b/asn1c_defs/X2N_CellInformation-Item.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellInformation-Item.h"
+
+#include "X2N_UL-InterferenceOverloadIndication.h"
+#include "X2N_UL-HighInterferenceIndicationInfo.h"
+#include "X2N_RelativeNarrowbandTxPower.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CellInformation_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item, cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-ID"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_CellInformation_Item, ul_InterferenceOverloadIndication),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_InterferenceOverloadIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-InterferenceOverloadIndication"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_CellInformation_Item, ul_HighInterferenceIndicationInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_HighInterferenceIndicationInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-HighInterferenceIndicationInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_CellInformation_Item, relativeNarrowbandTxPower),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RelativeNarrowbandTxPower,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"relativeNarrowbandTxPower"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellInformation_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellInformation_Item_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellInformation_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellInformation_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-InterferenceOverloadIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-HighInterferenceIndicationInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* relativeNarrowbandTxPower */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CellInformation_Item_specs_1 = {
+	sizeof(struct X2N_CellInformation_Item),
+	offsetof(struct X2N_CellInformation_Item, _asn_ctx),
+	asn_MAP_X2N_CellInformation_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_CellInformation_Item_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_Item = {
+	"CellInformation-Item",
+	"CellInformation-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellInformation_Item_tags_1,
+	sizeof(asn_DEF_X2N_CellInformation_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellInformation_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellInformation_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellInformation_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellInformation_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellInformation_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_CellInformation_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellInformation-Item.h b/asn1c_defs/X2N_CellInformation-Item.h
new file mode 100644
index 0000000..80b0803
--- /dev/null
+++ b/asn1c_defs/X2N_CellInformation-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellInformation_Item_H_
+#define	_X2N_CellInformation_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_UL_InterferenceOverloadIndication;
+struct X2N_UL_HighInterferenceIndicationInfo;
+struct X2N_RelativeNarrowbandTxPower;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellInformation-Item */
+typedef struct X2N_CellInformation_Item {
+	X2N_ECGI_t	 cell_ID;
+	struct X2N_UL_InterferenceOverloadIndication	*ul_InterferenceOverloadIndication;	/* OPTIONAL */
+	struct X2N_UL_HighInterferenceIndicationInfo	*ul_HighInterferenceIndicationInfo;	/* OPTIONAL */
+	struct X2N_RelativeNarrowbandTxPower	*relativeNarrowbandTxPower;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellInformation_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellInformation_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellInformation-List.c b/asn1c_defs/X2N_CellInformation-List.c
new file mode 100644
index 0000000..ec25d23
--- /dev/null
+++ b/asn1c_defs/X2N_CellInformation-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellInformation-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_CellInformation_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CellInformation_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellInformation_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CellInformation_List_specs_1 = {
+	sizeof(struct X2N_CellInformation_List),
+	offsetof(struct X2N_CellInformation_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_List = {
+	"CellInformation-List",
+	"CellInformation-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CellInformation_List_tags_1,
+	sizeof(asn_DEF_X2N_CellInformation_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellInformation_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellInformation_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellInformation_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellInformation_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellInformation_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CellInformation_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CellInformation_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellInformation-List.h b/asn1c_defs/X2N_CellInformation-List.h
new file mode 100644
index 0000000..bbc882d
--- /dev/null
+++ b/asn1c_defs/X2N_CellInformation-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellInformation_List_H_
+#define	_X2N_CellInformation_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_CellInformation-List */
+typedef struct X2N_CellInformation_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellInformation_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellInformation_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellMeasurementResult-Item.c b/asn1c_defs/X2N_CellMeasurementResult-Item.c
new file mode 100644
index 0000000..5927d10
--- /dev/null
+++ b/asn1c_defs/X2N_CellMeasurementResult-Item.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellMeasurementResult-Item.h"
+
+#include "X2N_HWLoadIndicator.h"
+#include "X2N_S1TNLLoadIndicator.h"
+#include "X2N_RadioResourceStatus.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item, cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-ID"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_CellMeasurementResult_Item, hWLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HWLoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"hWLoadIndicator"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_CellMeasurementResult_Item, s1TNLLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_S1TNLLoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1TNLLoadIndicator"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_CellMeasurementResult_Item, radioResourceStatus),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RadioResourceStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioResourceStatus"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellMeasurementResult_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P13,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellMeasurementResult_Item_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellMeasurementResult_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellMeasurementResult_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hWLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* s1TNLLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* radioResourceStatus */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CellMeasurementResult_Item_specs_1 = {
+	sizeof(struct X2N_CellMeasurementResult_Item),
+	offsetof(struct X2N_CellMeasurementResult_Item, _asn_ctx),
+	asn_MAP_X2N_CellMeasurementResult_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_CellMeasurementResult_Item_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_Item = {
+	"CellMeasurementResult-Item",
+	"CellMeasurementResult-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellMeasurementResult_Item_tags_1,
+	sizeof(asn_DEF_X2N_CellMeasurementResult_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellMeasurementResult_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellMeasurementResult_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellMeasurementResult_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_CellMeasurementResult_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellMeasurementResult-Item.h b/asn1c_defs/X2N_CellMeasurementResult-Item.h
new file mode 100644
index 0000000..b2fb15b
--- /dev/null
+++ b/asn1c_defs/X2N_CellMeasurementResult-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellMeasurementResult_Item_H_
+#define	_X2N_CellMeasurementResult_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_HWLoadIndicator;
+struct X2N_S1TNLLoadIndicator;
+struct X2N_RadioResourceStatus;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellMeasurementResult-Item */
+typedef struct X2N_CellMeasurementResult_Item {
+	X2N_ECGI_t	 cell_ID;
+	struct X2N_HWLoadIndicator	*hWLoadIndicator;	/* OPTIONAL */
+	struct X2N_S1TNLLoadIndicator	*s1TNLLoadIndicator;	/* OPTIONAL */
+	struct X2N_RadioResourceStatus	*radioResourceStatus;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellMeasurementResult_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellMeasurementResult_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellMeasurementResult-List.c b/asn1c_defs/X2N_CellMeasurementResult-List.c
new file mode 100644
index 0000000..17be7ff
--- /dev/null
+++ b/asn1c_defs/X2N_CellMeasurementResult-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellMeasurementResult-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_CellMeasurementResult_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellMeasurementResult_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CellMeasurementResult_List_specs_1 = {
+	sizeof(struct X2N_CellMeasurementResult_List),
+	offsetof(struct X2N_CellMeasurementResult_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_List = {
+	"CellMeasurementResult-List",
+	"CellMeasurementResult-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CellMeasurementResult_List_tags_1,
+	sizeof(asn_DEF_X2N_CellMeasurementResult_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellMeasurementResult_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellMeasurementResult_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellMeasurementResult_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CellMeasurementResult_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CellMeasurementResult_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellMeasurementResult-List.h b/asn1c_defs/X2N_CellMeasurementResult-List.h
new file mode 100644
index 0000000..9029cf9
--- /dev/null
+++ b/asn1c_defs/X2N_CellMeasurementResult-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellMeasurementResult_List_H_
+#define	_X2N_CellMeasurementResult_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_CellMeasurementResult-List */
+typedef struct X2N_CellMeasurementResult_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellMeasurementResult_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellMeasurementResult_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellReplacingInfo.c b/asn1c_defs/X2N_CellReplacingInfo.c
new file mode 100644
index 0000000..4757092
--- /dev/null
+++ b/asn1c_defs/X2N_CellReplacingInfo.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellReplacingInfo.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_CellReplacingInfo_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellReplacingInfo, replacingCellsList),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReplacingCellsList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"replacingCellsList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellReplacingInfo, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P114,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellReplacingInfo_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellReplacingInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellReplacingInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* replacingCellsList */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellReplacingInfo_specs_1 = {
+	sizeof(struct X2N_CellReplacingInfo),
+	offsetof(struct X2N_CellReplacingInfo, _asn_ctx),
+	asn_MAP_X2N_CellReplacingInfo_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_CellReplacingInfo_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellReplacingInfo = {
+	"CellReplacingInfo",
+	"CellReplacingInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellReplacingInfo_tags_1,
+	sizeof(asn_DEF_X2N_CellReplacingInfo_tags_1)
+		/sizeof(asn_DEF_X2N_CellReplacingInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellReplacingInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellReplacingInfo_tags_1)
+		/sizeof(asn_DEF_X2N_CellReplacingInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellReplacingInfo_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellReplacingInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellReplacingInfo.h b/asn1c_defs/X2N_CellReplacingInfo.h
new file mode 100644
index 0000000..45b6a85
--- /dev/null
+++ b/asn1c_defs/X2N_CellReplacingInfo.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellReplacingInfo_H_
+#define	_X2N_CellReplacingInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ReplacingCellsList.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellReplacingInfo */
+typedef struct X2N_CellReplacingInfo {
+	X2N_ReplacingCellsList_t	 replacingCellsList;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellReplacingInfo_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellReplacingInfo;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellReplacingInfo_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellReplacingInfo_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellReplacingInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellReportingIndicator.c b/asn1c_defs/X2N_CellReportingIndicator.c
new file mode 100644
index 0000000..45726b9
--- /dev/null
+++ b/asn1c_defs/X2N_CellReportingIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellReportingIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_CellReportingIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CellReportingIndicator_value2enum_1[] = {
+	{ 0,	12,	"stop-request" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CellReportingIndicator_enum2value_1[] = {
+	0	/* stop-request(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_CellReportingIndicator_specs_1 = {
+	asn_MAP_X2N_CellReportingIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CellReportingIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellReportingIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellReportingIndicator = {
+	"CellReportingIndicator",
+	"CellReportingIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CellReportingIndicator_tags_1,
+	sizeof(asn_DEF_X2N_CellReportingIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_CellReportingIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellReportingIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellReportingIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_CellReportingIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellReportingIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CellReportingIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellReportingIndicator.h b/asn1c_defs/X2N_CellReportingIndicator.h
new file mode 100644
index 0000000..a7ffeb7
--- /dev/null
+++ b/asn1c_defs/X2N_CellReportingIndicator.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellReportingIndicator_H_
+#define	_X2N_CellReportingIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CellReportingIndicator {
+	X2N_CellReportingIndicator_stop_request	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CellReportingIndicator;
+
+/* X2N_CellReportingIndicator */
+typedef long	 X2N_CellReportingIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellReportingIndicator;
+asn_struct_free_f X2N_CellReportingIndicator_free;
+asn_struct_print_f X2N_CellReportingIndicator_print;
+asn_constr_check_f X2N_CellReportingIndicator_constraint;
+ber_type_decoder_f X2N_CellReportingIndicator_decode_ber;
+der_type_encoder_f X2N_CellReportingIndicator_encode_der;
+xer_type_decoder_f X2N_CellReportingIndicator_decode_xer;
+xer_type_encoder_f X2N_CellReportingIndicator_encode_xer;
+per_type_decoder_f X2N_CellReportingIndicator_decode_uper;
+per_type_encoder_f X2N_CellReportingIndicator_encode_uper;
+per_type_decoder_f X2N_CellReportingIndicator_decode_aper;
+per_type_encoder_f X2N_CellReportingIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellReportingIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellToReport-Item.c b/asn1c_defs/X2N_CellToReport-Item.c
new file mode 100644
index 0000000..32921ec
--- /dev/null
+++ b/asn1c_defs/X2N_CellToReport-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellToReport-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CellToReport_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_Item, cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellToReport_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P9,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellToReport_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellToReport_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellToReport_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CellToReport_Item_specs_1 = {
+	sizeof(struct X2N_CellToReport_Item),
+	offsetof(struct X2N_CellToReport_Item, _asn_ctx),
+	asn_MAP_X2N_CellToReport_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_CellToReport_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_Item = {
+	"CellToReport-Item",
+	"CellToReport-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellToReport_Item_tags_1,
+	sizeof(asn_DEF_X2N_CellToReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellToReport_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellToReport_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellToReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CellToReport_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellToReport_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellToReport_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellToReport-Item.h b/asn1c_defs/X2N_CellToReport-Item.h
new file mode 100644
index 0000000..6f2e58b
--- /dev/null
+++ b/asn1c_defs/X2N_CellToReport-Item.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellToReport_Item_H_
+#define	_X2N_CellToReport_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellToReport-Item */
+typedef struct X2N_CellToReport_Item {
+	X2N_ECGI_t	 cell_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellToReport_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellToReport_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellToReport-List.c b/asn1c_defs/X2N_CellToReport-List.c
new file mode 100644
index 0000000..2de6773
--- /dev/null
+++ b/asn1c_defs/X2N_CellToReport-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellToReport-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_CellToReport_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CellToReport_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellToReport_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CellToReport_List_specs_1 = {
+	sizeof(struct X2N_CellToReport_List),
+	offsetof(struct X2N_CellToReport_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_List = {
+	"CellToReport-List",
+	"CellToReport-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CellToReport_List_tags_1,
+	sizeof(asn_DEF_X2N_CellToReport_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellToReport_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellToReport_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellToReport_List_tags_1)
+		/sizeof(asn_DEF_X2N_CellToReport_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CellToReport_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CellToReport_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CellToReport_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellToReport-List.h b/asn1c_defs/X2N_CellToReport-List.h
new file mode 100644
index 0000000..d4c6b2d
--- /dev/null
+++ b/asn1c_defs/X2N_CellToReport-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellToReport_List_H_
+#define	_X2N_CellToReport_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_CellToReport-List */
+typedef struct X2N_CellToReport_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellToReport_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellToReport_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CellType.c b/asn1c_defs/X2N_CellType.c
new file mode 100644
index 0000000..147462d
--- /dev/null
+++ b/asn1c_defs/X2N_CellType.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CellType.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_CellType_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellType, cell_Size),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Cell_Size,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-Size"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CellType, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P115,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CellType_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_CellType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellType_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-Size */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellType_specs_1 = {
+	sizeof(struct X2N_CellType),
+	offsetof(struct X2N_CellType, _asn_ctx),
+	asn_MAP_X2N_CellType_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_CellType_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellType = {
+	"CellType",
+	"CellType",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellType_tags_1,
+	sizeof(asn_DEF_X2N_CellType_tags_1)
+		/sizeof(asn_DEF_X2N_CellType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CellType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellType_tags_1)
+		/sizeof(asn_DEF_X2N_CellType_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellType_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_CellType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CellType.h b/asn1c_defs/X2N_CellType.h
new file mode 100644
index 0000000..380ccc0
--- /dev/null
+++ b/asn1c_defs/X2N_CellType.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CellType_H_
+#define	_X2N_CellType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Cell-Size.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CellType */
+typedef struct X2N_CellType {
+	X2N_Cell_Size_t	 cell_Size;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellType;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellType_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CellType_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CellType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoMPHypothesisSet.c b/asn1c_defs/X2N_CoMPHypothesisSet.c
new file mode 100644
index 0000000..99a2b17
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPHypothesisSet.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoMPHypothesisSet.h"
+
+#include "X2N_CoMPHypothesisSetItem.h"
+asn_per_constraints_t asn_PER_type_X2N_CoMPHypothesisSet_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSet_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPHypothesisSetItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPHypothesisSet_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CoMPHypothesisSet_specs_1 = {
+	sizeof(struct X2N_CoMPHypothesisSet),
+	offsetof(struct X2N_CoMPHypothesisSet, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSet = {
+	"CoMPHypothesisSet",
+	"CoMPHypothesisSet",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CoMPHypothesisSet_tags_1,
+	sizeof(asn_DEF_X2N_CoMPHypothesisSet_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSet_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoMPHypothesisSet_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPHypothesisSet_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSet_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CoMPHypothesisSet_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CoMPHypothesisSet_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CoMPHypothesisSet_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoMPHypothesisSet.h b/asn1c_defs/X2N_CoMPHypothesisSet.h
new file mode 100644
index 0000000..3d9f698
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPHypothesisSet.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoMPHypothesisSet_H_
+#define	_X2N_CoMPHypothesisSet_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_CoMPHypothesisSetItem;
+
+/* X2N_CoMPHypothesisSet */
+typedef struct X2N_CoMPHypothesisSet {
+	A_SEQUENCE_OF(struct X2N_CoMPHypothesisSetItem) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPHypothesisSet_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSet;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CoMPHypothesisSet_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSet_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CoMPHypothesisSet_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoMPHypothesisSet_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoMPHypothesisSetItem.c b/asn1c_defs/X2N_CoMPHypothesisSetItem.c
new file mode 100644
index 0000000..036a81c
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPHypothesisSetItem.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoMPHypothesisSetItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_coMPHypothesis_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 4400)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_coMPHypothesis_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  13,  13,  6,  4400 }	/* (SIZE(6..4400,...)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSetItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPHypothesisSetItem, coMPCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"coMPCellID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPHypothesisSetItem, coMPHypothesis),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_coMPHypothesis_constr_3,  memb_X2N_coMPHypothesis_constraint_1 },
+		0, 0, /* No default value */
+		"coMPHypothesis"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CoMPHypothesisSetItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P117,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CoMPHypothesisSetItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPHypothesisSetItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPHypothesisSetItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coMPHypothesis */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPHypothesisSetItem_specs_1 = {
+	sizeof(struct X2N_CoMPHypothesisSetItem),
+	offsetof(struct X2N_CoMPHypothesisSetItem, _asn_ctx),
+	asn_MAP_X2N_CoMPHypothesisSetItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CoMPHypothesisSetItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSetItem = {
+	"CoMPHypothesisSetItem",
+	"CoMPHypothesisSetItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPHypothesisSetItem_tags_1,
+	sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoMPHypothesisSetItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPHypothesisSetItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPHypothesisSetItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoMPHypothesisSetItem.h b/asn1c_defs/X2N_CoMPHypothesisSetItem.h
new file mode 100644
index 0000000..8e34180
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPHypothesisSetItem.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoMPHypothesisSetItem_H_
+#define	_X2N_CoMPHypothesisSetItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CoMPHypothesisSetItem */
+typedef struct X2N_CoMPHypothesisSetItem {
+	X2N_ECGI_t	 coMPCellID;
+	BIT_STRING_t	 coMPHypothesis;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPHypothesisSetItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSetItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPHypothesisSetItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSetItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoMPHypothesisSetItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoMPInformation.c b/asn1c_defs/X2N_CoMPInformation.c
new file mode 100644
index 0000000..36b1c2d
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformation.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoMPInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CoMPInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformation, coMPInformationItem),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CoMPInformationItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"coMPInformationItem"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformation, coMPInformationStartTime),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CoMPInformationStartTime,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"coMPInformationStartTime"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CoMPInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P118,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CoMPInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPInformationItem */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coMPInformationStartTime */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformation_specs_1 = {
+	sizeof(struct X2N_CoMPInformation),
+	offsetof(struct X2N_CoMPInformation, _asn_ctx),
+	asn_MAP_X2N_CoMPInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CoMPInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformation = {
+	"CoMPInformation",
+	"CoMPInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPInformation_tags_1,
+	sizeof(asn_DEF_X2N_CoMPInformation_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformation_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoMPInformation.h b/asn1c_defs/X2N_CoMPInformation.h
new file mode 100644
index 0000000..2edd563
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformation.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoMPInformation_H_
+#define	_X2N_CoMPInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CoMPInformationItem.h"
+#include "X2N_CoMPInformationStartTime.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CoMPInformation */
+typedef struct X2N_CoMPInformation {
+	X2N_CoMPInformationItem_t	 coMPInformationItem;
+	X2N_CoMPInformationStartTime_t	 coMPInformationStartTime;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoMPInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoMPInformationItem.c b/asn1c_defs/X2N_CoMPInformationItem.c
new file mode 100644
index 0000000..7ef95bb
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformationItem.c
@@ -0,0 +1,114 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoMPInformationItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_per_constraints_t asn_PER_type_X2N_CoMPInformationItem_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationItem__Member, coMPHypothesisSet),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CoMPHypothesisSet,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"coMPHypothesisSet"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationItem__Member, benefitMetric),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BenefitMetric,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"benefitMetric"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CoMPInformationItem__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P119,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* coMPHypothesisSet */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* benefitMetric */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CoMPInformationItem__Member),
+	offsetof(struct X2N_CoMPInformationItem__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPInformationItem_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformationItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CoMPInformationItem_specs_1 = {
+	sizeof(struct X2N_CoMPInformationItem),
+	offsetof(struct X2N_CoMPInformationItem, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationItem = {
+	"CoMPInformationItem",
+	"CoMPInformationItem",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CoMPInformationItem_tags_1,
+	sizeof(asn_DEF_X2N_CoMPInformationItem_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformationItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformationItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformationItem_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformationItem_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CoMPInformationItem_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CoMPInformationItem_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CoMPInformationItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoMPInformationItem.h b/asn1c_defs/X2N_CoMPInformationItem.h
new file mode 100644
index 0000000..4e4b2ec
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformationItem.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoMPInformationItem_H_
+#define	_X2N_CoMPInformationItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_CoMPHypothesisSet.h"
+#include "X2N_BenefitMetric.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CoMPInformationItem__Member {
+	X2N_CoMPHypothesisSet_t	 coMPHypothesisSet;
+	X2N_BenefitMetric_t	 benefitMetric;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CoMPInformationItem__Member;
+
+/* X2N_CoMPInformationItem */
+typedef struct X2N_CoMPInformationItem {
+	A_SEQUENCE_OF(CoMPInformationItem__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformationItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationItem;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CoMPInformationItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPInformationItem_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CoMPInformationItem_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoMPInformationItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoMPInformationStartTime.c b/asn1c_defs/X2N_CoMPInformationStartTime.c
new file mode 100644
index 0000000..aef4f43
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformationStartTime.c
@@ -0,0 +1,174 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoMPInformationStartTime.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_startSFN_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1023)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_startSubframeNumber_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 9)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_startSFN_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  0,  1023 }	/* (0..1023,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_startSubframeNumber_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  9 }	/* (0..9,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_CoMPInformationStartTime_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (SIZE(0..1)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationStartTime__Member, startSFN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_startSFN_constr_3,  memb_X2N_startSFN_constraint_2 },
+		0, 0, /* No default value */
+		"startSFN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationStartTime__Member, startSubframeNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_startSubframeNumber_constr_4,  memb_X2N_startSubframeNumber_constraint_2 },
+		0, 0, /* No default value */
+		"startSubframeNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CoMPInformationStartTime__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P120,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startSFN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* startSubframeNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CoMPInformationStartTime__Member),
+	offsetof(struct X2N_CoMPInformationStartTime__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPInformationStartTime_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformationStartTime_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CoMPInformationStartTime_specs_1 = {
+	sizeof(struct X2N_CoMPInformationStartTime),
+	offsetof(struct X2N_CoMPInformationStartTime, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationStartTime = {
+	"CoMPInformationStartTime",
+	"CoMPInformationStartTime",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CoMPInformationStartTime_tags_1,
+	sizeof(asn_DEF_X2N_CoMPInformationStartTime_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformationStartTime_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformationStartTime_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformationStartTime_tags_1)
+		/sizeof(asn_DEF_X2N_CoMPInformationStartTime_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CoMPInformationStartTime_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CoMPInformationStartTime_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CoMPInformationStartTime_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoMPInformationStartTime.h b/asn1c_defs/X2N_CoMPInformationStartTime.h
new file mode 100644
index 0000000..f910447
--- /dev/null
+++ b/asn1c_defs/X2N_CoMPInformationStartTime.h
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoMPInformationStartTime_H_
+#define	_X2N_CoMPInformationStartTime_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CoMPInformationStartTime__Member {
+	long	 startSFN;
+	long	 startSubframeNumber;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CoMPInformationStartTime__Member;
+
+/* X2N_CoMPInformationStartTime */
+typedef struct X2N_CoMPInformationStartTime {
+	A_SEQUENCE_OF(CoMPInformationStartTime__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformationStartTime_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationStartTime;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CoMPInformationStartTime_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPInformationStartTime_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CoMPInformationStartTime_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoMPInformationStartTime_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.c b/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.c
new file mode 100644
index 0000000..c663a31
--- /dev/null
+++ b/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CompleteFailureCauseInformation-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_Item, cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_Item, measurementFailureCause_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeasurementFailureCause_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementFailureCause-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CompleteFailureCauseInformation_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P12,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CompleteFailureCauseInformation_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompleteFailureCauseInformation_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measurementFailureCause-List */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_Item_specs_1 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_Item),
+	offsetof(struct X2N_CompleteFailureCauseInformation_Item, _asn_ctx),
+	asn_MAP_X2N_CompleteFailureCauseInformation_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CompleteFailureCauseInformation_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_Item = {
+	"CompleteFailureCauseInformation-Item",
+	"CompleteFailureCauseInformation-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1,
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompleteFailureCauseInformation_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompleteFailureCauseInformation_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.h b/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.h
new file mode 100644
index 0000000..fea934e
--- /dev/null
+++ b/asn1c_defs/X2N_CompleteFailureCauseInformation-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CompleteFailureCauseInformation_Item_H_
+#define	_X2N_CompleteFailureCauseInformation_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include "X2N_MeasurementFailureCause-List.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CompleteFailureCauseInformation-Item */
+typedef struct X2N_CompleteFailureCauseInformation_Item {
+	X2N_ECGI_t	 cell_ID;
+	X2N_MeasurementFailureCause_List_t	 measurementFailureCause_List;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompleteFailureCauseInformation_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CompleteFailureCauseInformation_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CompleteFailureCauseInformation-List.c b/asn1c_defs/X2N_CompleteFailureCauseInformation-List.c
new file mode 100644
index 0000000..cec23ed
--- /dev/null
+++ b/asn1c_defs/X2N_CompleteFailureCauseInformation-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CompleteFailureCauseInformation-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_CompleteFailureCauseInformation_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_List_specs_1 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_List),
+	offsetof(struct X2N_CompleteFailureCauseInformation_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_List = {
+	"CompleteFailureCauseInformation-List",
+	"CompleteFailureCauseInformation-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1,
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CompleteFailureCauseInformation_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CompleteFailureCauseInformation_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CompleteFailureCauseInformation_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CompleteFailureCauseInformation-List.h b/asn1c_defs/X2N_CompleteFailureCauseInformation-List.h
new file mode 100644
index 0000000..793db0f
--- /dev/null
+++ b/asn1c_defs/X2N_CompleteFailureCauseInformation-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CompleteFailureCauseInformation_List_H_
+#define	_X2N_CompleteFailureCauseInformation_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_CompleteFailureCauseInformation-List */
+typedef struct X2N_CompleteFailureCauseInformation_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompleteFailureCauseInformation_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CompleteFailureCauseInformation_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CompositeAvailableCapacity.c b/asn1c_defs/X2N_CompositeAvailableCapacity.c
new file mode 100644
index 0000000..55a3cf8
--- /dev/null
+++ b/asn1c_defs/X2N_CompositeAvailableCapacity.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CompositeAvailableCapacity.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacity_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_CompositeAvailableCapacity, cellCapacityClassValue),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellCapacityClassValue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellCapacityClassValue"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacity, capacityValue),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CapacityValue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"capacityValue"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CompositeAvailableCapacity, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P121,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CompositeAvailableCapacity_oms_1[] = { 0, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CompositeAvailableCapacity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompositeAvailableCapacity_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellCapacityClassValue */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* capacityValue */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacity_specs_1 = {
+	sizeof(struct X2N_CompositeAvailableCapacity),
+	offsetof(struct X2N_CompositeAvailableCapacity, _asn_ctx),
+	asn_MAP_X2N_CompositeAvailableCapacity_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CompositeAvailableCapacity_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacity = {
+	"CompositeAvailableCapacity",
+	"CompositeAvailableCapacity",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompositeAvailableCapacity_tags_1,
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacity_tags_1)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacity_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CompositeAvailableCapacity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacity_tags_1)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacity_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompositeAvailableCapacity_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompositeAvailableCapacity_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CompositeAvailableCapacity.h b/asn1c_defs/X2N_CompositeAvailableCapacity.h
new file mode 100644
index 0000000..6498058
--- /dev/null
+++ b/asn1c_defs/X2N_CompositeAvailableCapacity.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CompositeAvailableCapacity_H_
+#define	_X2N_CompositeAvailableCapacity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CellCapacityClassValue.h"
+#include "X2N_CapacityValue.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CompositeAvailableCapacity */
+typedef struct X2N_CompositeAvailableCapacity {
+	X2N_CellCapacityClassValue_t	*cellCapacityClassValue;	/* OPTIONAL */
+	X2N_CapacityValue_t	 capacityValue;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompositeAvailableCapacity_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacity;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacity_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacity_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CompositeAvailableCapacity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CompositeAvailableCapacityGroup.c b/asn1c_defs/X2N_CompositeAvailableCapacityGroup.c
new file mode 100644
index 0000000..7c96d75
--- /dev/null
+++ b/asn1c_defs/X2N_CompositeAvailableCapacityGroup.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CompositeAvailableCapacityGroup.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacityGroup_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacityGroup, dL_CompositeAvailableCapacity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CompositeAvailableCapacity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-CompositeAvailableCapacity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacityGroup, uL_CompositeAvailableCapacity),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CompositeAvailableCapacity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-CompositeAvailableCapacity"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CompositeAvailableCapacityGroup, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P122,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CompositeAvailableCapacityGroup_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompositeAvailableCapacityGroup_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-CompositeAvailableCapacity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-CompositeAvailableCapacity */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacityGroup_specs_1 = {
+	sizeof(struct X2N_CompositeAvailableCapacityGroup),
+	offsetof(struct X2N_CompositeAvailableCapacityGroup, _asn_ctx),
+	asn_MAP_X2N_CompositeAvailableCapacityGroup_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_CompositeAvailableCapacityGroup_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacityGroup = {
+	"CompositeAvailableCapacityGroup",
+	"CompositeAvailableCapacityGroup",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1,
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompositeAvailableCapacityGroup_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompositeAvailableCapacityGroup_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CompositeAvailableCapacityGroup.h b/asn1c_defs/X2N_CompositeAvailableCapacityGroup.h
new file mode 100644
index 0000000..3841edf
--- /dev/null
+++ b/asn1c_defs/X2N_CompositeAvailableCapacityGroup.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CompositeAvailableCapacityGroup_H_
+#define	_X2N_CompositeAvailableCapacityGroup_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_CompositeAvailableCapacity.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CompositeAvailableCapacityGroup */
+typedef struct X2N_CompositeAvailableCapacityGroup {
+	X2N_CompositeAvailableCapacity_t	 dL_CompositeAvailableCapacity;
+	X2N_CompositeAvailableCapacity_t	 uL_CompositeAvailableCapacity;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompositeAvailableCapacityGroup_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacityGroup;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CompositeAvailableCapacityGroup_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Correlation-ID.c b/asn1c_defs/X2N_Correlation-ID.c
new file mode 100644
index 0000000..7f508ca
--- /dev/null
+++ b/asn1c_defs/X2N_Correlation-ID.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Correlation-ID.h"
+
+int
+X2N_Correlation_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Correlation_ID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  4,  4 }	/* (SIZE(4..4)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Correlation_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Correlation_ID = {
+	"Correlation-ID",
+	"Correlation-ID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_Correlation_ID_tags_1,
+	sizeof(asn_DEF_X2N_Correlation_ID_tags_1)
+		/sizeof(asn_DEF_X2N_Correlation_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Correlation_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Correlation_ID_tags_1)
+		/sizeof(asn_DEF_X2N_Correlation_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Correlation_ID_constr_1, X2N_Correlation_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Correlation-ID.h b/asn1c_defs/X2N_Correlation-ID.h
new file mode 100644
index 0000000..0063ca1
--- /dev/null
+++ b/asn1c_defs/X2N_Correlation-ID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Correlation_ID_H_
+#define	_X2N_Correlation_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Correlation-ID */
+typedef OCTET_STRING_t	 X2N_Correlation_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Correlation_ID;
+asn_struct_free_f X2N_Correlation_ID_free;
+asn_struct_print_f X2N_Correlation_ID_print;
+asn_constr_check_f X2N_Correlation_ID_constraint;
+ber_type_decoder_f X2N_Correlation_ID_decode_ber;
+der_type_encoder_f X2N_Correlation_ID_encode_der;
+xer_type_decoder_f X2N_Correlation_ID_decode_xer;
+xer_type_encoder_f X2N_Correlation_ID_encode_xer;
+per_type_decoder_f X2N_Correlation_ID_decode_uper;
+per_type_encoder_f X2N_Correlation_ID_encode_uper;
+per_type_decoder_f X2N_Correlation_ID_decode_aper;
+per_type_encoder_f X2N_Correlation_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Correlation_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoverageModification-Item.c b/asn1c_defs/X2N_CoverageModification-Item.c
new file mode 100644
index 0000000..4a5b7a2
--- /dev/null
+++ b/asn1c_defs/X2N_CoverageModification-Item.c
@@ -0,0 +1,113 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoverageModification-Item.h"
+
+#include "X2N_CellReplacingInfo.h"
+static int
+memb_X2N_coverageState_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_coverageState_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_CoverageModification_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoverageModification_Item, eCGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eCGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoverageModification_Item, coverageState),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_coverageState_constr_3,  memb_X2N_coverageState_constraint_1 },
+		0, 0, /* No default value */
+		"coverageState"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_CoverageModification_Item, cellDeploymentStatusIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellDeploymentStatusIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellDeploymentStatusIndicator"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CoverageModification_Item, cellReplacingInfo),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellReplacingInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellReplacingInfo"
+		},
+};
+static const int asn_MAP_X2N_CoverageModification_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_CoverageModification_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoverageModification_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eCGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* coverageState */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellDeploymentStatusIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* cellReplacingInfo */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoverageModification_Item_specs_1 = {
+	sizeof(struct X2N_CoverageModification_Item),
+	offsetof(struct X2N_CoverageModification_Item, _asn_ctx),
+	asn_MAP_X2N_CoverageModification_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_CoverageModification_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoverageModification_Item = {
+	"CoverageModification-Item",
+	"CoverageModification-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoverageModification_Item_tags_1,
+	sizeof(asn_DEF_X2N_CoverageModification_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CoverageModification_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoverageModification_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoverageModification_Item_tags_1)
+		/sizeof(asn_DEF_X2N_CoverageModification_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoverageModification_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_CoverageModification_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoverageModification-Item.h b/asn1c_defs/X2N_CoverageModification-Item.h
new file mode 100644
index 0000000..234702a
--- /dev/null
+++ b/asn1c_defs/X2N_CoverageModification-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoverageModification_Item_H_
+#define	_X2N_CoverageModification_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <NativeInteger.h>
+#include "X2N_CellDeploymentStatusIndicator.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_CellReplacingInfo;
+
+/* X2N_CoverageModification-Item */
+typedef struct X2N_CoverageModification_Item {
+	X2N_ECGI_t	 eCGI;
+	long	 coverageState;
+	X2N_CellDeploymentStatusIndicator_t	*cellDeploymentStatusIndicator;	/* OPTIONAL */
+	struct X2N_CellReplacingInfo	*cellReplacingInfo;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoverageModification_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoverageModification_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoverageModification_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CoverageModification_Item_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoverageModification_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CoverageModificationList.c b/asn1c_defs/X2N_CoverageModificationList.c
new file mode 100644
index 0000000..23def77
--- /dev/null
+++ b/asn1c_defs/X2N_CoverageModificationList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CoverageModificationList.h"
+
+#include "X2N_CoverageModification-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_CoverageModificationList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_CoverageModificationList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoverageModification_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoverageModificationList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_CoverageModificationList_specs_1 = {
+	sizeof(struct X2N_CoverageModificationList),
+	offsetof(struct X2N_CoverageModificationList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoverageModificationList = {
+	"CoverageModificationList",
+	"CoverageModificationList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CoverageModificationList_tags_1,
+	sizeof(asn_DEF_X2N_CoverageModificationList_tags_1)
+		/sizeof(asn_DEF_X2N_CoverageModificationList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CoverageModificationList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoverageModificationList_tags_1)
+		/sizeof(asn_DEF_X2N_CoverageModificationList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CoverageModificationList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CoverageModificationList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CoverageModificationList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CoverageModificationList.h b/asn1c_defs/X2N_CoverageModificationList.h
new file mode 100644
index 0000000..61891ae
--- /dev/null
+++ b/asn1c_defs/X2N_CoverageModificationList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CoverageModificationList_H_
+#define	_X2N_CoverageModificationList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_CoverageModification_Item;
+
+/* X2N_CoverageModificationList */
+typedef struct X2N_CoverageModificationList {
+	A_SEQUENCE_OF(struct X2N_CoverageModification_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoverageModificationList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoverageModificationList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CoverageModificationList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Criticality.c b/asn1c_defs/X2N_Criticality.c
new file mode 100644
index 0000000..7988e4c
--- /dev/null
+++ b/asn1c_defs/X2N_Criticality.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Criticality.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Criticality_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Criticality_value2enum_1[] = {
+	{ 0,	6,	"reject" },
+	{ 1,	6,	"ignore" },
+	{ 2,	6,	"notify" }
+};
+static const unsigned int asn_MAP_X2N_Criticality_enum2value_1[] = {
+	1,	/* ignore(1) */
+	2,	/* notify(2) */
+	0	/* reject(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Criticality_specs_1 = {
+	asn_MAP_X2N_Criticality_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Criticality_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Criticality_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Criticality = {
+	"Criticality",
+	"Criticality",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Criticality_tags_1,
+	sizeof(asn_DEF_X2N_Criticality_tags_1)
+		/sizeof(asn_DEF_X2N_Criticality_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Criticality_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Criticality_tags_1)
+		/sizeof(asn_DEF_X2N_Criticality_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Criticality_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Criticality_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Criticality.h b/asn1c_defs/X2N_Criticality.h
new file mode 100644
index 0000000..205853f
--- /dev/null
+++ b/asn1c_defs/X2N_Criticality.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Criticality_H_
+#define	_X2N_Criticality_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Criticality {
+	X2N_Criticality_reject	= 0,
+	X2N_Criticality_ignore	= 1,
+	X2N_Criticality_notify	= 2
+} e_X2N_Criticality;
+
+/* X2N_Criticality */
+typedef long	 X2N_Criticality_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Criticality_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Criticality;
+extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1;
+asn_struct_free_f Criticality_free;
+asn_struct_print_f Criticality_print;
+asn_constr_check_f Criticality_constraint;
+ber_type_decoder_f Criticality_decode_ber;
+der_type_encoder_f Criticality_encode_der;
+xer_type_decoder_f Criticality_decode_xer;
+xer_type_encoder_f Criticality_encode_xer;
+per_type_decoder_f Criticality_decode_uper;
+per_type_encoder_f Criticality_encode_uper;
+per_type_decoder_f Criticality_decode_aper;
+per_type_encoder_f Criticality_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Criticality_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.c b/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.c
new file mode 100644
index 0000000..0636252
--- /dev/null
+++ b/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.c
@@ -0,0 +1,124 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CriticalityDiagnostics-IE-List.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_per_constraints_t asn_PER_type_X2N_CriticalityDiagnostics_IE_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List__Member, iECriticality),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iECriticality"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List__Member, iE_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List__Member, typeOfError),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TypeOfError,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"typeOfError"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CriticalityDiagnostics_IE_List__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P127,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* typeOfError */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_CriticalityDiagnostics_IE_List__Member),
+	offsetof(struct X2N_CriticalityDiagnostics_IE_List__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	4,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_IE_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_CriticalityDiagnostics_IE_List_specs_1 = {
+	sizeof(struct X2N_CriticalityDiagnostics_IE_List),
+	offsetof(struct X2N_CriticalityDiagnostics_IE_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_IE_List = {
+	"CriticalityDiagnostics-IE-List",
+	"CriticalityDiagnostics-IE-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1,
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CriticalityDiagnostics_IE_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_CriticalityDiagnostics_IE_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_CriticalityDiagnostics_IE_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.h b/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.h
new file mode 100644
index 0000000..cd34eec
--- /dev/null
+++ b/asn1c_defs/X2N_CriticalityDiagnostics-IE-List.h
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CriticalityDiagnostics_IE_List_H_
+#define	_X2N_CriticalityDiagnostics_IE_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_Criticality.h"
+#include "X2N_ProtocolIE-ID.h"
+#include "X2N_TypeOfError.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_CriticalityDiagnostics_IE_List__Member {
+	X2N_Criticality_t	 iECriticality;
+	X2N_ProtocolIE_ID_t	 iE_ID;
+	X2N_TypeOfError_t	 typeOfError;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} CriticalityDiagnostics_IE_List__Member;
+
+/* X2N_CriticalityDiagnostics-IE-List */
+typedef struct X2N_CriticalityDiagnostics_IE_List {
+	A_SEQUENCE_OF(CriticalityDiagnostics_IE_List__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CriticalityDiagnostics_IE_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_IE_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_CriticalityDiagnostics_IE_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_IE_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_CriticalityDiagnostics_IE_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CriticalityDiagnostics_IE_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CriticalityDiagnostics.c b/asn1c_defs/X2N_CriticalityDiagnostics.c
new file mode 100644
index 0000000..4f976fc
--- /dev/null
+++ b/asn1c_defs/X2N_CriticalityDiagnostics.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CriticalityDiagnostics.h"
+
+#include "X2N_CriticalityDiagnostics-IE-List.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_1[] = {
+	{ ATF_POINTER, 5, offsetof(struct X2N_CriticalityDiagnostics, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProcedureCode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_CriticalityDiagnostics, triggeringMessage),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TriggeringMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"triggeringMessage"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_CriticalityDiagnostics, procedureCriticality),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"procedureCriticality"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_CriticalityDiagnostics, iEsCriticalityDiagnostics),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CriticalityDiagnostics_IE_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iEsCriticalityDiagnostics"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_CriticalityDiagnostics, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P126,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_CriticalityDiagnostics_oms_1[] = { 0, 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_CriticalityDiagnostics_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CriticalityDiagnostics_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggeringMessage */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* procedureCriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* iEsCriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_CriticalityDiagnostics_specs_1 = {
+	sizeof(struct X2N_CriticalityDiagnostics),
+	offsetof(struct X2N_CriticalityDiagnostics, _asn_ctx),
+	asn_MAP_X2N_CriticalityDiagnostics_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_CriticalityDiagnostics_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics = {
+	"CriticalityDiagnostics",
+	"CriticalityDiagnostics",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CriticalityDiagnostics_tags_1,
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_tags_1)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CriticalityDiagnostics_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_tags_1)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CriticalityDiagnostics_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_CriticalityDiagnostics_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CriticalityDiagnostics.h b/asn1c_defs/X2N_CriticalityDiagnostics.h
new file mode 100644
index 0000000..b0b37da
--- /dev/null
+++ b/asn1c_defs/X2N_CriticalityDiagnostics.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CriticalityDiagnostics_H_
+#define	_X2N_CriticalityDiagnostics_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProcedureCode.h"
+#include "X2N_TriggeringMessage.h"
+#include "X2N_Criticality.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_CriticalityDiagnostics_IE_List;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_CriticalityDiagnostics */
+typedef struct X2N_CriticalityDiagnostics {
+	X2N_ProcedureCode_t	*procedureCode;	/* OPTIONAL */
+	X2N_TriggeringMessage_t	*triggeringMessage;	/* OPTIONAL */
+	X2N_Criticality_t	*procedureCriticality;	/* OPTIONAL */
+	struct X2N_CriticalityDiagnostics_IE_List	*iEsCriticalityDiagnostics;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CriticalityDiagnostics_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CriticalityDiagnostics_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CyclicPrefixDL.c b/asn1c_defs/X2N_CyclicPrefixDL.c
new file mode 100644
index 0000000..5a9295d
--- /dev/null
+++ b/asn1c_defs/X2N_CyclicPrefixDL.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CyclicPrefixDL.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CyclicPrefixDL_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CyclicPrefixDL_value2enum_1[] = {
+	{ 0,	6,	"normal" },
+	{ 1,	8,	"extended" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CyclicPrefixDL_enum2value_1[] = {
+	1,	/* extended(1) */
+	0	/* normal(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CyclicPrefixDL_specs_1 = {
+	asn_MAP_X2N_CyclicPrefixDL_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CyclicPrefixDL_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CyclicPrefixDL_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CyclicPrefixDL = {
+	"CyclicPrefixDL",
+	"CyclicPrefixDL",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CyclicPrefixDL_tags_1,
+	sizeof(asn_DEF_X2N_CyclicPrefixDL_tags_1)
+		/sizeof(asn_DEF_X2N_CyclicPrefixDL_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CyclicPrefixDL_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CyclicPrefixDL_tags_1)
+		/sizeof(asn_DEF_X2N_CyclicPrefixDL_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CyclicPrefixDL_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CyclicPrefixDL_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CyclicPrefixDL.h b/asn1c_defs/X2N_CyclicPrefixDL.h
new file mode 100644
index 0000000..c9108d8
--- /dev/null
+++ b/asn1c_defs/X2N_CyclicPrefixDL.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CyclicPrefixDL_H_
+#define	_X2N_CyclicPrefixDL_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CyclicPrefixDL {
+	X2N_CyclicPrefixDL_normal	= 0,
+	X2N_CyclicPrefixDL_extended	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CyclicPrefixDL;
+
+/* X2N_CyclicPrefixDL */
+typedef long	 X2N_CyclicPrefixDL_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CyclicPrefixDL_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CyclicPrefixDL;
+extern const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixDL_specs_1;
+asn_struct_free_f CyclicPrefixDL_free;
+asn_struct_print_f CyclicPrefixDL_print;
+asn_constr_check_f CyclicPrefixDL_constraint;
+ber_type_decoder_f CyclicPrefixDL_decode_ber;
+der_type_encoder_f CyclicPrefixDL_encode_der;
+xer_type_decoder_f CyclicPrefixDL_decode_xer;
+xer_type_encoder_f CyclicPrefixDL_encode_xer;
+per_type_decoder_f CyclicPrefixDL_decode_uper;
+per_type_encoder_f CyclicPrefixDL_encode_uper;
+per_type_decoder_f CyclicPrefixDL_decode_aper;
+per_type_encoder_f CyclicPrefixDL_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CyclicPrefixDL_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_CyclicPrefixUL.c b/asn1c_defs/X2N_CyclicPrefixUL.c
new file mode 100644
index 0000000..669430c
--- /dev/null
+++ b/asn1c_defs/X2N_CyclicPrefixUL.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_CyclicPrefixUL.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_CyclicPrefixUL_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_CyclicPrefixUL_value2enum_1[] = {
+	{ 0,	6,	"normal" },
+	{ 1,	8,	"extended" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_CyclicPrefixUL_enum2value_1[] = {
+	1,	/* extended(1) */
+	0	/* normal(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_CyclicPrefixUL_specs_1 = {
+	asn_MAP_X2N_CyclicPrefixUL_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_CyclicPrefixUL_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CyclicPrefixUL_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CyclicPrefixUL = {
+	"CyclicPrefixUL",
+	"CyclicPrefixUL",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_CyclicPrefixUL_tags_1,
+	sizeof(asn_DEF_X2N_CyclicPrefixUL_tags_1)
+		/sizeof(asn_DEF_X2N_CyclicPrefixUL_tags_1[0]), /* 1 */
+	asn_DEF_X2N_CyclicPrefixUL_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_CyclicPrefixUL_tags_1)
+		/sizeof(asn_DEF_X2N_CyclicPrefixUL_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_CyclicPrefixUL_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_CyclicPrefixUL_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_CyclicPrefixUL.h b/asn1c_defs/X2N_CyclicPrefixUL.h
new file mode 100644
index 0000000..63d9409
--- /dev/null
+++ b/asn1c_defs/X2N_CyclicPrefixUL.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_CyclicPrefixUL_H_
+#define	_X2N_CyclicPrefixUL_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_CyclicPrefixUL {
+	X2N_CyclicPrefixUL_normal	= 0,
+	X2N_CyclicPrefixUL_extended	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_CyclicPrefixUL;
+
+/* X2N_CyclicPrefixUL */
+typedef long	 X2N_CyclicPrefixUL_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_CyclicPrefixUL_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CyclicPrefixUL;
+extern const asn_INTEGER_specifics_t asn_SPC_CyclicPrefixUL_specs_1;
+asn_struct_free_f CyclicPrefixUL_free;
+asn_struct_print_f CyclicPrefixUL_print;
+asn_constr_check_f CyclicPrefixUL_constraint;
+ber_type_decoder_f CyclicPrefixUL_decode_ber;
+der_type_encoder_f CyclicPrefixUL_encode_der;
+xer_type_decoder_f CyclicPrefixUL_decode_xer;
+xer_type_encoder_f CyclicPrefixUL_encode_xer;
+per_type_decoder_f CyclicPrefixUL_decode_uper;
+per_type_encoder_f CyclicPrefixUL_encode_uper;
+per_type_decoder_f CyclicPrefixUL_decode_aper;
+per_type_encoder_f CyclicPrefixUL_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_CyclicPrefixUL_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-ABS-status.c b/asn1c_defs/X2N_DL-ABS-status.c
new file mode 100644
index 0000000..f8b2500
--- /dev/null
+++ b/asn1c_defs/X2N_DL-ABS-status.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-ABS-status.h"
+
+int
+X2N_DL_ABS_status_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DL_ABS_status_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_ABS_status_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_ABS_status = {
+	"DL-ABS-status",
+	"DL-ABS-status",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DL_ABS_status_tags_1,
+	sizeof(asn_DEF_X2N_DL_ABS_status_tags_1)
+		/sizeof(asn_DEF_X2N_DL_ABS_status_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_ABS_status_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_ABS_status_tags_1)
+		/sizeof(asn_DEF_X2N_DL_ABS_status_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_ABS_status_constr_1, X2N_DL_ABS_status_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DL-ABS-status.h b/asn1c_defs/X2N_DL-ABS-status.h
new file mode 100644
index 0000000..22939be
--- /dev/null
+++ b/asn1c_defs/X2N_DL-ABS-status.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_ABS_status_H_
+#define	_X2N_DL_ABS_status_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DL-ABS-status */
+typedef long	 X2N_DL_ABS_status_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DL_ABS_status_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_ABS_status;
+asn_struct_free_f X2N_DL_ABS_status_free;
+asn_struct_print_f X2N_DL_ABS_status_print;
+asn_constr_check_f X2N_DL_ABS_status_constraint;
+ber_type_decoder_f X2N_DL_ABS_status_decode_ber;
+der_type_encoder_f X2N_DL_ABS_status_encode_der;
+xer_type_decoder_f X2N_DL_ABS_status_decode_xer;
+xer_type_encoder_f X2N_DL_ABS_status_encode_xer;
+per_type_decoder_f X2N_DL_ABS_status_decode_uper;
+per_type_encoder_f X2N_DL_ABS_status_encode_uper;
+per_type_decoder_f X2N_DL_ABS_status_decode_aper;
+per_type_encoder_f X2N_DL_ABS_status_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_ABS_status_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-Forwarding.c b/asn1c_defs/X2N_DL-Forwarding.c
new file mode 100644
index 0000000..02d368f
--- /dev/null
+++ b/asn1c_defs/X2N_DL-Forwarding.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-Forwarding.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DL_Forwarding_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_DL_Forwarding_value2enum_1[] = {
+	{ 0,	21,	"dL-forwardingProposed" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_DL_Forwarding_enum2value_1[] = {
+	0	/* dL-forwardingProposed(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_DL_Forwarding_specs_1 = {
+	asn_MAP_X2N_DL_Forwarding_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_DL_Forwarding_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_Forwarding_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_Forwarding = {
+	"DL-Forwarding",
+	"DL-Forwarding",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_DL_Forwarding_tags_1,
+	sizeof(asn_DEF_X2N_DL_Forwarding_tags_1)
+		/sizeof(asn_DEF_X2N_DL_Forwarding_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_Forwarding_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_Forwarding_tags_1)
+		/sizeof(asn_DEF_X2N_DL_Forwarding_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_Forwarding_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_DL_Forwarding_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DL-Forwarding.h b/asn1c_defs/X2N_DL-Forwarding.h
new file mode 100644
index 0000000..bbc60dd
--- /dev/null
+++ b/asn1c_defs/X2N_DL-Forwarding.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_Forwarding_H_
+#define	_X2N_DL_Forwarding_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_DL_Forwarding {
+	X2N_DL_Forwarding_dL_forwardingProposed	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_DL_Forwarding;
+
+/* X2N_DL-Forwarding */
+typedef long	 X2N_DL_Forwarding_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DL_Forwarding_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_Forwarding;
+extern const asn_INTEGER_specifics_t asn_SPC_DL_Forwarding_specs_1;
+asn_struct_free_f DL_Forwarding_free;
+asn_struct_print_f DL_Forwarding_print;
+asn_constr_check_f DL_Forwarding_constraint;
+ber_type_decoder_f DL_Forwarding_decode_ber;
+der_type_encoder_f DL_Forwarding_encode_der;
+xer_type_decoder_f DL_Forwarding_decode_xer;
+xer_type_encoder_f DL_Forwarding_encode_xer;
+per_type_decoder_f DL_Forwarding_decode_uper;
+per_type_encoder_f DL_Forwarding_encode_uper;
+per_type_decoder_f DL_Forwarding_decode_aper;
+per_type_encoder_f DL_Forwarding_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_Forwarding_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-GBR-PRB-usage.c b/asn1c_defs/X2N_DL-GBR-PRB-usage.c
new file mode 100644
index 0000000..97579e9
--- /dev/null
+++ b/asn1c_defs/X2N_DL-GBR-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-GBR-PRB-usage.h"
+
+int
+X2N_DL_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DL_GBR_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_GBR_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_GBR_PRB_usage = {
+	"DL-GBR-PRB-usage",
+	"DL-GBR-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DL_GBR_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_DL_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_GBR_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_GBR_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_GBR_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_GBR_PRB_usage_constr_1, X2N_DL_GBR_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DL-GBR-PRB-usage.h b/asn1c_defs/X2N_DL-GBR-PRB-usage.h
new file mode 100644
index 0000000..189cbfb
--- /dev/null
+++ b/asn1c_defs/X2N_DL-GBR-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_GBR_PRB_usage_H_
+#define	_X2N_DL_GBR_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DL-GBR-PRB-usage */
+typedef long	 X2N_DL_GBR_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DL_GBR_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_GBR_PRB_usage;
+asn_struct_free_f X2N_DL_GBR_PRB_usage_free;
+asn_struct_print_f X2N_DL_GBR_PRB_usage_print;
+asn_constr_check_f X2N_DL_GBR_PRB_usage_constraint;
+ber_type_decoder_f X2N_DL_GBR_PRB_usage_decode_ber;
+der_type_encoder_f X2N_DL_GBR_PRB_usage_encode_der;
+xer_type_decoder_f X2N_DL_GBR_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_DL_GBR_PRB_usage_encode_xer;
+per_type_decoder_f X2N_DL_GBR_PRB_usage_decode_uper;
+per_type_encoder_f X2N_DL_GBR_PRB_usage_encode_uper;
+per_type_decoder_f X2N_DL_GBR_PRB_usage_decode_aper;
+per_type_encoder_f X2N_DL_GBR_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_GBR_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-Total-PRB-usage.c b/asn1c_defs/X2N_DL-Total-PRB-usage.c
new file mode 100644
index 0000000..d0f8230
--- /dev/null
+++ b/asn1c_defs/X2N_DL-Total-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-Total-PRB-usage.h"
+
+int
+X2N_DL_Total_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DL_Total_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_Total_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_Total_PRB_usage = {
+	"DL-Total-PRB-usage",
+	"DL-Total-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DL_Total_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_DL_Total_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_Total_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_Total_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_Total_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_Total_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_Total_PRB_usage_constr_1, X2N_DL_Total_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DL-Total-PRB-usage.h b/asn1c_defs/X2N_DL-Total-PRB-usage.h
new file mode 100644
index 0000000..6148fec
--- /dev/null
+++ b/asn1c_defs/X2N_DL-Total-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_Total_PRB_usage_H_
+#define	_X2N_DL_Total_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DL-Total-PRB-usage */
+typedef long	 X2N_DL_Total_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DL_Total_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_Total_PRB_usage;
+asn_struct_free_f X2N_DL_Total_PRB_usage_free;
+asn_struct_print_f X2N_DL_Total_PRB_usage_print;
+asn_constr_check_f X2N_DL_Total_PRB_usage_constraint;
+ber_type_decoder_f X2N_DL_Total_PRB_usage_decode_ber;
+der_type_encoder_f X2N_DL_Total_PRB_usage_encode_der;
+xer_type_decoder_f X2N_DL_Total_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_DL_Total_PRB_usage_encode_xer;
+per_type_decoder_f X2N_DL_Total_PRB_usage_decode_uper;
+per_type_encoder_f X2N_DL_Total_PRB_usage_encode_uper;
+per_type_decoder_f X2N_DL_Total_PRB_usage_decode_aper;
+per_type_encoder_f X2N_DL_Total_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_Total_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-non-GBR-PRB-usage.c b/asn1c_defs/X2N_DL-non-GBR-PRB-usage.c
new file mode 100644
index 0000000..86c4bfa
--- /dev/null
+++ b/asn1c_defs/X2N_DL-non-GBR-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-non-GBR-PRB-usage.h"
+
+int
+X2N_DL_non_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DL_non_GBR_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_non_GBR_PRB_usage = {
+	"DL-non-GBR-PRB-usage",
+	"DL-non-GBR-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_non_GBR_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_non_GBR_PRB_usage_constr_1, X2N_DL_non_GBR_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DL-non-GBR-PRB-usage.h b/asn1c_defs/X2N_DL-non-GBR-PRB-usage.h
new file mode 100644
index 0000000..e141054
--- /dev/null
+++ b/asn1c_defs/X2N_DL-non-GBR-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_non_GBR_PRB_usage_H_
+#define	_X2N_DL_non_GBR_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DL-non-GBR-PRB-usage */
+typedef long	 X2N_DL_non_GBR_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DL_non_GBR_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_non_GBR_PRB_usage;
+asn_struct_free_f X2N_DL_non_GBR_PRB_usage_free;
+asn_struct_print_f X2N_DL_non_GBR_PRB_usage_print;
+asn_constr_check_f X2N_DL_non_GBR_PRB_usage_constraint;
+ber_type_decoder_f X2N_DL_non_GBR_PRB_usage_decode_ber;
+der_type_encoder_f X2N_DL_non_GBR_PRB_usage_encode_der;
+xer_type_decoder_f X2N_DL_non_GBR_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_DL_non_GBR_PRB_usage_encode_xer;
+per_type_decoder_f X2N_DL_non_GBR_PRB_usage_decode_uper;
+per_type_encoder_f X2N_DL_non_GBR_PRB_usage_encode_uper;
+per_type_decoder_f X2N_DL_non_GBR_PRB_usage_decode_aper;
+per_type_encoder_f X2N_DL_non_GBR_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_non_GBR_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.c b/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.c
new file mode 100644
index 0000000..6c08eac
--- /dev/null
+++ b/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DL-scheduling-PDCCH-CCE-usage.h"
+
+int
+X2N_DL_scheduling_PDCCH_CCE_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_DL_scheduling_PDCCH_CCE_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage = {
+	"DL-scheduling-PDCCH-CCE-usage",
+	"DL-scheduling-PDCCH-CCE-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1,
+	sizeof(asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1)
+		/sizeof(asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DL_scheduling_PDCCH_CCE_usage_constr_1, X2N_DL_scheduling_PDCCH_CCE_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.h b/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.h
new file mode 100644
index 0000000..813faab
--- /dev/null
+++ b/asn1c_defs/X2N_DL-scheduling-PDCCH-CCE-usage.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DL_scheduling_PDCCH_CCE_usage_H_
+#define	_X2N_DL_scheduling_PDCCH_CCE_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DL-scheduling-PDCCH-CCE-usage */
+typedef long	 X2N_DL_scheduling_PDCCH_CCE_usage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage;
+asn_struct_free_f X2N_DL_scheduling_PDCCH_CCE_usage_free;
+asn_struct_print_f X2N_DL_scheduling_PDCCH_CCE_usage_print;
+asn_constr_check_f X2N_DL_scheduling_PDCCH_CCE_usage_constraint;
+ber_type_decoder_f X2N_DL_scheduling_PDCCH_CCE_usage_decode_ber;
+der_type_encoder_f X2N_DL_scheduling_PDCCH_CCE_usage_encode_der;
+xer_type_decoder_f X2N_DL_scheduling_PDCCH_CCE_usage_decode_xer;
+xer_type_encoder_f X2N_DL_scheduling_PDCCH_CCE_usage_encode_xer;
+per_type_decoder_f X2N_DL_scheduling_PDCCH_CCE_usage_decode_uper;
+per_type_encoder_f X2N_DL_scheduling_PDCCH_CCE_usage_encode_uper;
+per_type_decoder_f X2N_DL_scheduling_PDCCH_CCE_usage_decode_aper;
+per_type_encoder_f X2N_DL_scheduling_PDCCH_CCE_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DL_scheduling_PDCCH_CCE_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.c b/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.c
new file mode 100644
index 0000000..84a6acc
--- /dev/null
+++ b/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DLResourceBitmapULandDLSharing.h"
+
+int
+X2N_DLResourceBitmapULandDLSharing_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const X2N_DataTrafficResources_t *st = (const X2N_DataTrafficResources_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 17600)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using X2N_DataTrafficResources,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DLResourceBitmapULandDLSharing_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 15,  15,  6,  17600 }	/* (SIZE(6..17600)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DLResourceBitmapULandDLSharing = {
+	"DLResourceBitmapULandDLSharing",
+	"DLResourceBitmapULandDLSharing",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1,
+	sizeof(asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_DLResourceBitmapULandDLSharing_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DLResourceBitmapULandDLSharing_constr_1, X2N_DLResourceBitmapULandDLSharing_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.h b/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.h
new file mode 100644
index 0000000..cf0e548
--- /dev/null
+++ b/asn1c_defs/X2N_DLResourceBitmapULandDLSharing.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DLResourceBitmapULandDLSharing_H_
+#define	_X2N_DLResourceBitmapULandDLSharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_DataTrafficResources.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DLResourceBitmapULandDLSharing */
+typedef X2N_DataTrafficResources_t	 X2N_DLResourceBitmapULandDLSharing_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DLResourceBitmapULandDLSharing_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DLResourceBitmapULandDLSharing;
+asn_struct_free_f X2N_DLResourceBitmapULandDLSharing_free;
+asn_struct_print_f X2N_DLResourceBitmapULandDLSharing_print;
+asn_constr_check_f X2N_DLResourceBitmapULandDLSharing_constraint;
+ber_type_decoder_f X2N_DLResourceBitmapULandDLSharing_decode_ber;
+der_type_encoder_f X2N_DLResourceBitmapULandDLSharing_encode_der;
+xer_type_decoder_f X2N_DLResourceBitmapULandDLSharing_decode_xer;
+xer_type_encoder_f X2N_DLResourceBitmapULandDLSharing_encode_xer;
+per_type_decoder_f X2N_DLResourceBitmapULandDLSharing_decode_uper;
+per_type_encoder_f X2N_DLResourceBitmapULandDLSharing_encode_uper;
+per_type_decoder_f X2N_DLResourceBitmapULandDLSharing_decode_aper;
+per_type_encoder_f X2N_DLResourceBitmapULandDLSharing_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DLResourceBitmapULandDLSharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DLResourcesULandDLSharing.c b/asn1c_defs/X2N_DLResourcesULandDLSharing.c
new file mode 100644
index 0000000..03bf4ac
--- /dev/null
+++ b/asn1c_defs/X2N_DLResourcesULandDLSharing.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DLResourcesULandDLSharing.h"
+
+asn_per_constraints_t asn_PER_type_X2N_DLResourcesULandDLSharing_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_DLResourcesULandDLSharing_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DLResourcesULandDLSharing, choice.unchanged),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"unchanged"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DLResourcesULandDLSharing, choice.changed),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DLResourceBitmapULandDLSharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"changed"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DLResourcesULandDLSharing_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unchanged */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* changed */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_DLResourcesULandDLSharing_specs_1 = {
+	sizeof(struct X2N_DLResourcesULandDLSharing),
+	offsetof(struct X2N_DLResourcesULandDLSharing, _asn_ctx),
+	offsetof(struct X2N_DLResourcesULandDLSharing, present),
+	sizeof(((struct X2N_DLResourcesULandDLSharing *)0)->present),
+	asn_MAP_X2N_DLResourcesULandDLSharing_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DLResourcesULandDLSharing = {
+	"DLResourcesULandDLSharing",
+	"DLResourcesULandDLSharing",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_DLResourcesULandDLSharing_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_DLResourcesULandDLSharing_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_DLResourcesULandDLSharing_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DLResourcesULandDLSharing.h b/asn1c_defs/X2N_DLResourcesULandDLSharing.h
new file mode 100644
index 0000000..652cc0b
--- /dev/null
+++ b/asn1c_defs/X2N_DLResourcesULandDLSharing.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DLResourcesULandDLSharing_H_
+#define	_X2N_DLResourcesULandDLSharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include "X2N_DLResourceBitmapULandDLSharing.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_DLResourcesULandDLSharing_PR {
+	X2N_DLResourcesULandDLSharing_PR_NOTHING,	/* No components present */
+	X2N_DLResourcesULandDLSharing_PR_unchanged,
+	X2N_DLResourcesULandDLSharing_PR_changed
+	/* Extensions may appear below */
+	
+} X2N_DLResourcesULandDLSharing_PR;
+
+/* X2N_DLResourcesULandDLSharing */
+typedef struct X2N_DLResourcesULandDLSharing {
+	X2N_DLResourcesULandDLSharing_PR present;
+	union X2N_DLResourcesULandDLSharing_u {
+		NULL_t	 unchanged;
+		X2N_DLResourceBitmapULandDLSharing_t	 changed;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DLResourcesULandDLSharing_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DLResourcesULandDLSharing;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_DLResourcesULandDLSharing_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_DLResourcesULandDLSharing_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_DLResourcesULandDLSharing_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DLResourcesULandDLSharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DRB-ID.c b/asn1c_defs/X2N_DRB-ID.c
new file mode 100644
index 0000000..485aa56
--- /dev/null
+++ b/asn1c_defs/X2N_DRB-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DRB-ID.h"
+
+int
+X2N_DRB_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DRB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (1..32) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DRB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DRB_ID = {
+	"DRB-ID",
+	"DRB-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_DRB_ID_tags_1,
+	sizeof(asn_DEF_X2N_DRB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_DRB_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DRB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DRB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_DRB_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DRB_ID_constr_1, X2N_DRB_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_DRB-ID.h b/asn1c_defs/X2N_DRB-ID.h
new file mode 100644
index 0000000..6f6687c
--- /dev/null
+++ b/asn1c_defs/X2N_DRB-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DRB_ID_H_
+#define	_X2N_DRB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DRB-ID */
+typedef long	 X2N_DRB_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DRB_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DRB_ID;
+asn_struct_free_f X2N_DRB_ID_free;
+asn_struct_print_f X2N_DRB_ID_print;
+asn_constr_check_f X2N_DRB_ID_constraint;
+ber_type_decoder_f X2N_DRB_ID_decode_ber;
+der_type_encoder_f X2N_DRB_ID_encode_der;
+xer_type_decoder_f X2N_DRB_ID_decode_xer;
+xer_type_encoder_f X2N_DRB_ID_encode_xer;
+per_type_decoder_f X2N_DRB_ID_decode_uper;
+per_type_encoder_f X2N_DRB_ID_encode_uper;
+per_type_decoder_f X2N_DRB_ID_decode_aper;
+per_type_encoder_f X2N_DRB_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DRB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DataForwardingAddressIndication.c b/asn1c_defs/X2N_DataForwardingAddressIndication.c
new file mode 100644
index 0000000..1c92481
--- /dev/null
+++ b/asn1c_defs/X2N_DataForwardingAddressIndication.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DataForwardingAddressIndication.h"
+
+asn_TYPE_member_t asn_MBR_X2N_DataForwardingAddressIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P104,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DataForwardingAddressIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DataForwardingAddressIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DataForwardingAddressIndication_specs_1 = {
+	sizeof(struct X2N_DataForwardingAddressIndication),
+	offsetof(struct X2N_DataForwardingAddressIndication, _asn_ctx),
+	asn_MAP_X2N_DataForwardingAddressIndication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DataForwardingAddressIndication = {
+	"DataForwardingAddressIndication",
+	"DataForwardingAddressIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DataForwardingAddressIndication_tags_1,
+	sizeof(asn_DEF_X2N_DataForwardingAddressIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DataForwardingAddressIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DataForwardingAddressIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DataForwardingAddressIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DataForwardingAddressIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DataForwardingAddressIndication_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_DataForwardingAddressIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DataForwardingAddressIndication.h b/asn1c_defs/X2N_DataForwardingAddressIndication.h
new file mode 100644
index 0000000..32edf85
--- /dev/null
+++ b/asn1c_defs/X2N_DataForwardingAddressIndication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DataForwardingAddressIndication_H_
+#define	_X2N_DataForwardingAddressIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DataForwardingAddressIndication */
+typedef struct X2N_DataForwardingAddressIndication {
+	X2N_ProtocolIE_Container_8180P104_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DataForwardingAddressIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DataForwardingAddressIndication;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DataForwardingAddressIndication_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_DataForwardingAddressIndication_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DataForwardingAddressIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DataTrafficResourceIndication.c b/asn1c_defs/X2N_DataTrafficResourceIndication.c
new file mode 100644
index 0000000..6ffdf13
--- /dev/null
+++ b/asn1c_defs/X2N_DataTrafficResourceIndication.c
@@ -0,0 +1,114 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DataTrafficResourceIndication.h"
+
+#include "X2N_ReservedSubframePattern.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_activationSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1023)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_activationSFN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  1023 }	/* (0..1023) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_DataTrafficResourceIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataTrafficResourceIndication, activationSFN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_activationSFN_constr_2,  memb_X2N_activationSFN_constraint_1 },
+		0, 0, /* No default value */
+		"activationSFN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataTrafficResourceIndication, sharedResourceType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_SharedResourceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sharedResourceType"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_DataTrafficResourceIndication, reservedSubframePattern),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReservedSubframePattern,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reservedSubframePattern"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_DataTrafficResourceIndication, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P131,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_DataTrafficResourceIndication_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_DataTrafficResourceIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DataTrafficResourceIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* activationSFN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sharedResourceType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reservedSubframePattern */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_DataTrafficResourceIndication_specs_1 = {
+	sizeof(struct X2N_DataTrafficResourceIndication),
+	offsetof(struct X2N_DataTrafficResourceIndication, _asn_ctx),
+	asn_MAP_X2N_DataTrafficResourceIndication_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_DataTrafficResourceIndication_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResourceIndication = {
+	"DataTrafficResourceIndication",
+	"DataTrafficResourceIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DataTrafficResourceIndication_tags_1,
+	sizeof(asn_DEF_X2N_DataTrafficResourceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DataTrafficResourceIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DataTrafficResourceIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DataTrafficResourceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DataTrafficResourceIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DataTrafficResourceIndication_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_DataTrafficResourceIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DataTrafficResourceIndication.h b/asn1c_defs/X2N_DataTrafficResourceIndication.h
new file mode 100644
index 0000000..bbdd392
--- /dev/null
+++ b/asn1c_defs/X2N_DataTrafficResourceIndication.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DataTrafficResourceIndication_H_
+#define	_X2N_DataTrafficResourceIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include "X2N_SharedResourceType.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ReservedSubframePattern;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_DataTrafficResourceIndication */
+typedef struct X2N_DataTrafficResourceIndication {
+	long	 activationSFN;
+	X2N_SharedResourceType_t	 sharedResourceType;
+	struct X2N_ReservedSubframePattern	*reservedSubframePattern;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DataTrafficResourceIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResourceIndication;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DataTrafficResourceIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DataTrafficResources.c b/asn1c_defs/X2N_DataTrafficResources.c
new file mode 100644
index 0000000..1f16e30
--- /dev/null
+++ b/asn1c_defs/X2N_DataTrafficResources.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DataTrafficResources.h"
+
+int
+X2N_DataTrafficResources_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 17600)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DataTrafficResources_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 15,  15,  6,  17600 }	/* (SIZE(6..17600)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DataTrafficResources_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResources = {
+	"DataTrafficResources",
+	"DataTrafficResources",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_DataTrafficResources_tags_1,
+	sizeof(asn_DEF_X2N_DataTrafficResources_tags_1)
+		/sizeof(asn_DEF_X2N_DataTrafficResources_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DataTrafficResources_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DataTrafficResources_tags_1)
+		/sizeof(asn_DEF_X2N_DataTrafficResources_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DataTrafficResources_constr_1, X2N_DataTrafficResources_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DataTrafficResources.h b/asn1c_defs/X2N_DataTrafficResources.h
new file mode 100644
index 0000000..fcc4893
--- /dev/null
+++ b/asn1c_defs/X2N_DataTrafficResources.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DataTrafficResources_H_
+#define	_X2N_DataTrafficResources_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_DataTrafficResources */
+typedef BIT_STRING_t	 X2N_DataTrafficResources_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DataTrafficResources_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResources;
+asn_struct_free_f X2N_DataTrafficResources_free;
+asn_struct_print_f X2N_DataTrafficResources_print;
+asn_constr_check_f X2N_DataTrafficResources_constraint;
+ber_type_decoder_f X2N_DataTrafficResources_decode_ber;
+der_type_encoder_f X2N_DataTrafficResources_encode_der;
+xer_type_decoder_f X2N_DataTrafficResources_decode_xer;
+xer_type_encoder_f X2N_DataTrafficResources_encode_xer;
+per_type_decoder_f X2N_DataTrafficResources_decode_uper;
+per_type_encoder_f X2N_DataTrafficResources_encode_uper;
+per_type_decoder_f X2N_DataTrafficResources_decode_aper;
+per_type_encoder_f X2N_DataTrafficResources_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DataTrafficResources_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DeactivationIndication.c b/asn1c_defs/X2N_DeactivationIndication.c
new file mode 100644
index 0000000..4c07db3
--- /dev/null
+++ b/asn1c_defs/X2N_DeactivationIndication.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DeactivationIndication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_DeactivationIndication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_DeactivationIndication_value2enum_1[] = {
+	{ 0,	11,	"deactivated" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_DeactivationIndication_enum2value_1[] = {
+	0	/* deactivated(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_DeactivationIndication_specs_1 = {
+	asn_MAP_X2N_DeactivationIndication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_DeactivationIndication_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DeactivationIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DeactivationIndication = {
+	"DeactivationIndication",
+	"DeactivationIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_DeactivationIndication_tags_1,
+	sizeof(asn_DEF_X2N_DeactivationIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DeactivationIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DeactivationIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DeactivationIndication_tags_1)
+		/sizeof(asn_DEF_X2N_DeactivationIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DeactivationIndication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_DeactivationIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DeactivationIndication.h b/asn1c_defs/X2N_DeactivationIndication.h
new file mode 100644
index 0000000..9e05a4b
--- /dev/null
+++ b/asn1c_defs/X2N_DeactivationIndication.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DeactivationIndication_H_
+#define	_X2N_DeactivationIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_DeactivationIndication {
+	X2N_DeactivationIndication_deactivated	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_DeactivationIndication;
+
+/* X2N_DeactivationIndication */
+typedef long	 X2N_DeactivationIndication_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_DeactivationIndication_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DeactivationIndication;
+extern const asn_INTEGER_specifics_t asn_SPC_DeactivationIndication_specs_1;
+asn_struct_free_f DeactivationIndication_free;
+asn_struct_print_f DeactivationIndication_print;
+asn_constr_check_f DeactivationIndication_constraint;
+ber_type_decoder_f DeactivationIndication_decode_ber;
+der_type_encoder_f DeactivationIndication_encode_der;
+xer_type_decoder_f DeactivationIndication_decode_xer;
+xer_type_encoder_f DeactivationIndication_encode_xer;
+per_type_decoder_f DeactivationIndication_decode_uper;
+per_type_encoder_f DeactivationIndication_encode_uper;
+per_type_decoder_f DeactivationIndication_decode_aper;
+per_type_encoder_f DeactivationIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DeactivationIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DeliveryStatus.c b/asn1c_defs/X2N_DeliveryStatus.c
new file mode 100644
index 0000000..a0982e3
--- /dev/null
+++ b/asn1c_defs/X2N_DeliveryStatus.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DeliveryStatus.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_highestSuccessDeliveredPDCPSN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_highestSuccessDeliveredPDCPSN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_DeliveryStatus_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DeliveryStatus, highestSuccessDeliveredPDCPSN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_highestSuccessDeliveredPDCPSN_constr_2,  memb_X2N_highestSuccessDeliveredPDCPSN_constraint_1 },
+		0, 0, /* No default value */
+		"highestSuccessDeliveredPDCPSN"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_DeliveryStatus, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P132,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_DeliveryStatus_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_DeliveryStatus_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DeliveryStatus_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* highestSuccessDeliveredPDCPSN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DeliveryStatus_specs_1 = {
+	sizeof(struct X2N_DeliveryStatus),
+	offsetof(struct X2N_DeliveryStatus, _asn_ctx),
+	asn_MAP_X2N_DeliveryStatus_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_DeliveryStatus_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DeliveryStatus = {
+	"DeliveryStatus",
+	"DeliveryStatus",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DeliveryStatus_tags_1,
+	sizeof(asn_DEF_X2N_DeliveryStatus_tags_1)
+		/sizeof(asn_DEF_X2N_DeliveryStatus_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DeliveryStatus_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DeliveryStatus_tags_1)
+		/sizeof(asn_DEF_X2N_DeliveryStatus_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DeliveryStatus_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_DeliveryStatus_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DeliveryStatus.h b/asn1c_defs/X2N_DeliveryStatus.h
new file mode 100644
index 0000000..b4e1da4
--- /dev/null
+++ b/asn1c_defs/X2N_DeliveryStatus.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DeliveryStatus_H_
+#define	_X2N_DeliveryStatus_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_DeliveryStatus */
+typedef struct X2N_DeliveryStatus {
+	long	 highestSuccessDeliveredPDCPSN;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DeliveryStatus_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DeliveryStatus;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DeliveryStatus_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_DeliveryStatus_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DeliveryStatus_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DuplicationActivation.c b/asn1c_defs/X2N_DuplicationActivation.c
new file mode 100644
index 0000000..3c490ef
--- /dev/null
+++ b/asn1c_defs/X2N_DuplicationActivation.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DuplicationActivation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_DuplicationActivation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_DuplicationActivation_value2enum_1[] = {
+	{ 0,	6,	"active" },
+	{ 1,	8,	"inactive" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_DuplicationActivation_enum2value_1[] = {
+	0,	/* active(0) */
+	1	/* inactive(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_DuplicationActivation_specs_1 = {
+	asn_MAP_X2N_DuplicationActivation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_DuplicationActivation_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DuplicationActivation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DuplicationActivation = {
+	"DuplicationActivation",
+	"DuplicationActivation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_DuplicationActivation_tags_1,
+	sizeof(asn_DEF_X2N_DuplicationActivation_tags_1)
+		/sizeof(asn_DEF_X2N_DuplicationActivation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DuplicationActivation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DuplicationActivation_tags_1)
+		/sizeof(asn_DEF_X2N_DuplicationActivation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_DuplicationActivation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_DuplicationActivation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DuplicationActivation.h b/asn1c_defs/X2N_DuplicationActivation.h
new file mode 100644
index 0000000..54d2ce8
--- /dev/null
+++ b/asn1c_defs/X2N_DuplicationActivation.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DuplicationActivation_H_
+#define	_X2N_DuplicationActivation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_DuplicationActivation {
+	X2N_DuplicationActivation_active	= 0,
+	X2N_DuplicationActivation_inactive	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_DuplicationActivation;
+
+/* X2N_DuplicationActivation */
+typedef long	 X2N_DuplicationActivation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DuplicationActivation;
+asn_struct_free_f X2N_DuplicationActivation_free;
+asn_struct_print_f X2N_DuplicationActivation_print;
+asn_constr_check_f X2N_DuplicationActivation_constraint;
+ber_type_decoder_f X2N_DuplicationActivation_decode_ber;
+der_type_encoder_f X2N_DuplicationActivation_encode_der;
+xer_type_decoder_f X2N_DuplicationActivation_decode_xer;
+xer_type_encoder_f X2N_DuplicationActivation_encode_xer;
+per_type_decoder_f X2N_DuplicationActivation_decode_uper;
+per_type_encoder_f X2N_DuplicationActivation_encode_uper;
+per_type_decoder_f X2N_DuplicationActivation_decode_aper;
+per_type_encoder_f X2N_DuplicationActivation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DuplicationActivation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DynamicDLTransmissionInformation.c b/asn1c_defs/X2N_DynamicDLTransmissionInformation.c
new file mode 100644
index 0000000..3e16767
--- /dev/null
+++ b/asn1c_defs/X2N_DynamicDLTransmissionInformation.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DynamicDLTransmissionInformation.h"
+
+#include "X2N_DynamicNAICSInformation.h"
+static asn_per_constraints_t asn_PER_type_X2N_DynamicDLTransmissionInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_DynamicDLTransmissionInformation_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_DynamicDLTransmissionInformation, choice.naics_active),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DynamicNAICSInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"naics-active"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DynamicDLTransmissionInformation, choice.naics_inactive),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"naics-inactive"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DynamicDLTransmissionInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* naics-active */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* naics-inactive */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_DynamicDLTransmissionInformation_specs_1 = {
+	sizeof(struct X2N_DynamicDLTransmissionInformation),
+	offsetof(struct X2N_DynamicDLTransmissionInformation, _asn_ctx),
+	offsetof(struct X2N_DynamicDLTransmissionInformation, present),
+	sizeof(((struct X2N_DynamicDLTransmissionInformation *)0)->present),
+	asn_MAP_X2N_DynamicDLTransmissionInformation_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DynamicDLTransmissionInformation = {
+	"DynamicDLTransmissionInformation",
+	"DynamicDLTransmissionInformation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_DynamicDLTransmissionInformation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_DynamicDLTransmissionInformation_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_DynamicDLTransmissionInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DynamicDLTransmissionInformation.h b/asn1c_defs/X2N_DynamicDLTransmissionInformation.h
new file mode 100644
index 0000000..2a29370
--- /dev/null
+++ b/asn1c_defs/X2N_DynamicDLTransmissionInformation.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DynamicDLTransmissionInformation_H_
+#define	_X2N_DynamicDLTransmissionInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_DynamicDLTransmissionInformation_PR {
+	X2N_DynamicDLTransmissionInformation_PR_NOTHING,	/* No components present */
+	X2N_DynamicDLTransmissionInformation_PR_naics_active,
+	X2N_DynamicDLTransmissionInformation_PR_naics_inactive
+	/* Extensions may appear below */
+	
+} X2N_DynamicDLTransmissionInformation_PR;
+
+/* Forward declarations */
+struct X2N_DynamicNAICSInformation;
+
+/* X2N_DynamicDLTransmissionInformation */
+typedef struct X2N_DynamicDLTransmissionInformation {
+	X2N_DynamicDLTransmissionInformation_PR present;
+	union X2N_DynamicDLTransmissionInformation_u {
+		struct X2N_DynamicNAICSInformation	*naics_active;
+		NULL_t	 naics_inactive;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DynamicDLTransmissionInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DynamicDLTransmissionInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DynamicDLTransmissionInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_DynamicNAICSInformation.c b/asn1c_defs/X2N_DynamicNAICSInformation.c
new file mode 100644
index 0000000..c09258f
--- /dev/null
+++ b/asn1c_defs/X2N_DynamicNAICSInformation.c
@@ -0,0 +1,222 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_DynamicNAICSInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_transmissionModes_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_pB_information_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_pA_list_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 3)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_pA_list_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (SIZE(0..3)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_transmissionModes_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_pB_information_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (0..3) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_pA_list_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (SIZE(0..3)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_pA_list_4[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PA_Values,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_pA_list_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_pA_list_specs_4 = {
+	sizeof(struct X2N_DynamicNAICSInformation__pA_list),
+	offsetof(struct X2N_DynamicNAICSInformation__pA_list, _asn_ctx),
+	1,	/* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_pA_list_4 = {
+	"pA-list",
+	"pA-list",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_pA_list_tags_4,
+	sizeof(asn_DEF_X2N_pA_list_tags_4)
+		/sizeof(asn_DEF_X2N_pA_list_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_pA_list_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_pA_list_tags_4)
+		/sizeof(asn_DEF_X2N_pA_list_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_pA_list_constr_4, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_pA_list_4,
+	1,	/* Single element */
+	&asn_SPC_X2N_pA_list_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_DynamicNAICSInformation_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct X2N_DynamicNAICSInformation, transmissionModes),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_transmissionModes_constr_2,  memb_X2N_transmissionModes_constraint_1 },
+		0, 0, /* No default value */
+		"transmissionModes"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_DynamicNAICSInformation, pB_information),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_pB_information_constr_3,  memb_X2N_pB_information_constraint_1 },
+		0, 0, /* No default value */
+		"pB-information"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DynamicNAICSInformation, pA_list),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		0,
+		&asn_DEF_X2N_pA_list_4,
+		0,
+		{ 0, &asn_PER_memb_X2N_pA_list_constr_4,  memb_X2N_pA_list_constraint_1 },
+		0, 0, /* No default value */
+		"pA-list"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_DynamicNAICSInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P133,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_DynamicNAICSInformation_oms_1[] = { 0, 1, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_DynamicNAICSInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DynamicNAICSInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transmissionModes */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pB-information */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pA-list */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DynamicNAICSInformation_specs_1 = {
+	sizeof(struct X2N_DynamicNAICSInformation),
+	offsetof(struct X2N_DynamicNAICSInformation, _asn_ctx),
+	asn_MAP_X2N_DynamicNAICSInformation_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_DynamicNAICSInformation_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DynamicNAICSInformation = {
+	"DynamicNAICSInformation",
+	"DynamicNAICSInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DynamicNAICSInformation_tags_1,
+	sizeof(asn_DEF_X2N_DynamicNAICSInformation_tags_1)
+		/sizeof(asn_DEF_X2N_DynamicNAICSInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_DynamicNAICSInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_DynamicNAICSInformation_tags_1)
+		/sizeof(asn_DEF_X2N_DynamicNAICSInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DynamicNAICSInformation_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_DynamicNAICSInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_DynamicNAICSInformation.h b/asn1c_defs/X2N_DynamicNAICSInformation.h
new file mode 100644
index 0000000..ecf08b1
--- /dev/null
+++ b/asn1c_defs/X2N_DynamicNAICSInformation.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_DynamicNAICSInformation_H_
+#define	_X2N_DynamicNAICSInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <NativeInteger.h>
+#include "X2N_PA-Values.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_DynamicNAICSInformation */
+typedef struct X2N_DynamicNAICSInformation {
+	BIT_STRING_t	*transmissionModes;	/* OPTIONAL */
+	long	*pB_information;	/* OPTIONAL */
+	struct X2N_DynamicNAICSInformation__pA_list {
+		A_SEQUENCE_OF(X2N_PA_Values_t) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} pA_list;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DynamicNAICSInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DynamicNAICSInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DynamicNAICSInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_DynamicNAICSInformation_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_DynamicNAICSInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RAB-ID.c b/asn1c_defs/X2N_E-RAB-ID.c
new file mode 100644
index 0000000..62797f5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RAB-ID.h"
+
+int
+X2N_E_RAB_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_E_RAB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_ID = {
+	"E-RAB-ID",
+	"E-RAB-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_E_RAB_ID_tags_1,
+	sizeof(asn_DEF_X2N_E_RAB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RAB_ID_constr_1, X2N_E_RAB_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_E-RAB-ID.h b/asn1c_defs/X2N_E-RAB-ID.h
new file mode 100644
index 0000000..c6ddfa3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RAB_ID_H_
+#define	_X2N_E_RAB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_E-RAB-ID */
+typedef long	 X2N_E_RAB_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_E_RAB_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_ID;
+asn_struct_free_f X2N_E_RAB_ID_free;
+asn_struct_print_f X2N_E_RAB_ID_print;
+asn_constr_check_f X2N_E_RAB_ID_constraint;
+ber_type_decoder_f X2N_E_RAB_ID_decode_ber;
+der_type_encoder_f X2N_E_RAB_ID_encode_der;
+xer_type_decoder_f X2N_E_RAB_ID_decode_xer;
+xer_type_encoder_f X2N_E_RAB_ID_encode_xer;
+per_type_decoder_f X2N_E_RAB_ID_decode_uper;
+per_type_encoder_f X2N_E_RAB_ID_encode_uper;
+per_type_decoder_f X2N_E_RAB_ID_decode_aper;
+per_type_encoder_f X2N_E_RAB_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RAB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RAB-Item.c b/asn1c_defs/X2N_E-RAB-Item.c
new file mode 100644
index 0000000..33184e2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RAB-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RAB_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RAB_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P140,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RAB_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RAB_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Item_specs_1 = {
+	sizeof(struct X2N_E_RAB_Item),
+	offsetof(struct X2N_E_RAB_Item, _asn_ctx),
+	asn_MAP_X2N_E_RAB_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RAB_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Item = {
+	"E-RAB-Item",
+	"E-RAB-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RAB_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RAB_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RAB-Item.h b/asn1c_defs/X2N_E-RAB-Item.h
new file mode 100644
index 0000000..ccbbd16
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RAB_Item_H_
+#define	_X2N_E_RAB_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_Cause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RAB-Item */
+typedef struct X2N_E_RAB_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_Cause_t	 cause;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RAB_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.c b/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.c
new file mode 100644
index 0000000..87f178d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+
+#include "X2N_GBR-QosInformation.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RAB_Level_QoS_Parameters_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters, qCI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_QCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"qCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters, allocationAndRetentionPriority),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_AllocationAndRetentionPriority,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"allocationAndRetentionPriority"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RAB_Level_QoS_Parameters, gbrQosInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GBR_QosInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gbrQosInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RAB_Level_QoS_Parameters, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P139,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RAB_Level_QoS_Parameters_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RAB_Level_QoS_Parameters_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* qCI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* allocationAndRetentionPriority */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gbrQosInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Level_QoS_Parameters_specs_1 = {
+	sizeof(struct X2N_E_RAB_Level_QoS_Parameters),
+	offsetof(struct X2N_E_RAB_Level_QoS_Parameters, _asn_ctx),
+	asn_MAP_X2N_E_RAB_Level_QoS_Parameters_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RAB_Level_QoS_Parameters_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters = {
+	"E-RAB-Level-QoS-Parameters",
+	"E-RAB-Level-QoS-Parameters",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1,
+	sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_Level_QoS_Parameters_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_Level_QoS_Parameters_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.h b/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.h
new file mode 100644
index 0000000..0539395
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-Level-QoS-Parameters.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RAB_Level_QoS_Parameters_H_
+#define	_X2N_E_RAB_Level_QoS_Parameters_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_QCI.h"
+#include "X2N_AllocationAndRetentionPriority.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GBR_QosInformation;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RAB-Level-QoS-Parameters */
+typedef struct X2N_E_RAB_Level_QoS_Parameters {
+	X2N_QCI_t	 qCI;
+	X2N_AllocationAndRetentionPriority_t	 allocationAndRetentionPriority;
+	struct X2N_GBR_QosInformation	*gbrQosInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_Level_QoS_Parameters_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Level_QoS_Parameters_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RAB_Level_QoS_Parameters_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RAB_Level_QoS_Parameters_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RAB-List.c b/asn1c_defs/X2N_E-RAB-List.c
new file mode 100644
index 0000000..6a48fce
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RAB-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RAB_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RAB_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P40,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RAB_List_specs_1 = {
+	sizeof(struct X2N_E_RAB_List),
+	offsetof(struct X2N_E_RAB_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_List = {
+	"E-RAB-List",
+	"E-RAB-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RAB_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RAB_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RAB_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RAB_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RAB_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RAB_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RAB-List.h b/asn1c_defs/X2N_E-RAB-List.h
new file mode 100644
index 0000000..018e6e1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RAB-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RAB_List_H_
+#define	_X2N_E_RAB_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RAB-List */
+typedef struct X2N_E_RAB_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RAB_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABUsageReport-Item.c b/asn1c_defs/X2N_E-RABUsageReport-Item.c
new file mode 100644
index 0000000..d0d7ab3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABUsageReport-Item.c
@@ -0,0 +1,227 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABUsageReport-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_startTimeStamp_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_endTimeStamp_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_usageCountUL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 18446744073709551615U)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_usageCountDL_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 0 && value <= 18446744073709551615U)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_startTimeStamp_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  4,  4 }	/* (SIZE(4..4)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_endTimeStamp_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  4,  4 }	/* (SIZE(4..4)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_usageCountUL_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 64, -1,  0,  18446744073709551615U }	/* (0..18446744073709551615U) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_usageCountDL_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 64, -1,  0,  18446744073709551615U }	/* (0..18446744073709551615U) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReport_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item, startTimeStamp),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_startTimeStamp_constr_2,  memb_X2N_startTimeStamp_constraint_1 },
+		0, 0, /* No default value */
+		"startTimeStamp"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item, endTimeStamp),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_endTimeStamp_constr_3,  memb_X2N_endTimeStamp_constraint_1 },
+		0, 0, /* No default value */
+		"endTimeStamp"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item, usageCountUL),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_INTEGER,
+		0,
+		{ 0, &asn_PER_memb_X2N_usageCountUL_constr_4,  memb_X2N_usageCountUL_constraint_1 },
+		0, 0, /* No default value */
+		"usageCountUL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item, usageCountDL),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_INTEGER,
+		0,
+		{ 0, &asn_PER_memb_X2N_usageCountDL_constr_5,  memb_X2N_usageCountDL_constraint_1 },
+		0, 0, /* No default value */
+		"usageCountDL"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABUsageReport_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P141,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABUsageReport_Item_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABUsageReport_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABUsageReport_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startTimeStamp */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* endTimeStamp */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* usageCountUL */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* usageCountDL */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABUsageReport_Item_specs_1 = {
+	sizeof(struct X2N_E_RABUsageReport_Item),
+	offsetof(struct X2N_E_RABUsageReport_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABUsageReport_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABUsageReport_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_Item = {
+	"E-RABUsageReport-Item",
+	"E-RABUsageReport-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABUsageReport_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABUsageReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABUsageReport_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABUsageReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABUsageReport_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABUsageReport_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABUsageReport-Item.h b/asn1c_defs/X2N_E-RABUsageReport-Item.h
new file mode 100644
index 0000000..f531f83
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABUsageReport-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABUsageReport_Item_H_
+#define	_X2N_E_RABUsageReport_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABUsageReport-Item */
+typedef struct X2N_E_RABUsageReport_Item {
+	OCTET_STRING_t	 startTimeStamp;
+	OCTET_STRING_t	 endTimeStamp;
+	INTEGER_t	 usageCountUL;
+	INTEGER_t	 usageCountDL;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABUsageReport_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABUsageReport_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABUsageReportList.c b/asn1c_defs/X2N_E-RABUsageReportList.c
new file mode 100644
index 0000000..aab88b8
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABUsageReportList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABUsageReportList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABUsageReportList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 1,  1,  1,  2 }	/* (SIZE(1..2)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReportList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P41,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABUsageReportList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABUsageReportList_specs_1 = {
+	sizeof(struct X2N_E_RABUsageReportList),
+	offsetof(struct X2N_E_RABUsageReportList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReportList = {
+	"E-RABUsageReportList",
+	"E-RABUsageReportList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABUsageReportList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABUsageReportList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABUsageReportList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABUsageReportList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABUsageReportList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABUsageReportList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABUsageReportList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABUsageReportList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABUsageReportList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABUsageReportList.h b/asn1c_defs/X2N_E-RABUsageReportList.h
new file mode 100644
index 0000000..9b4a026
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABUsageReportList.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABUsageReportList_H_
+#define	_X2N_E_RABUsageReportList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABUsageReportList */
+typedef struct X2N_E_RABUsageReportList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABUsageReportList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReportList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABUsageReportList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReportList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABUsageReportList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABUsageReportList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-Item.c
new file mode 100644
index 0000000..105ac2e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-Item.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-Item.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_Item, uL_GTP_TunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTP-TunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_Item, dL_GTP_TunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GTP-TunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_Item_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GTP-TunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-GTP-TunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_Item),
+	offsetof(struct X2N_E_RABs_Admitted_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_Item_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_Item = {
+	"E-RABs-Admitted-Item",
+	"E-RABs-Admitted-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-Item.h
new file mode 100644
index 0000000..9e952dc
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-Item.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_Item_H_
+#define	_X2N_E_RABs_Admitted_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-Item */
+typedef struct X2N_E_RABs_Admitted_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*uL_GTP_TunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_GTP_TunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-List.c b/asn1c_defs/X2N_E-RABs-Admitted-List.c
new file mode 100644
index 0000000..8d2f3b4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_List),
+	offsetof(struct X2N_E_RABs_Admitted_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_List = {
+	"E-RABs-Admitted-List",
+	"E-RABs-Admitted-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-List.h b/asn1c_defs/X2N_E-RABs-Admitted-List.h
new file mode 100644
index 0000000..3ea65d8
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_List_H_
+#define	_X2N_E_RABs_Admitted_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-List */
+typedef struct X2N_E_RABs_Admitted_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c
new file mode 100644
index 0000000..32cc1c6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P19,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer = {
+	"E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer",
+	"E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h
new file mode 100644
index 0000000..3136413
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_GTPtunnelEndpoint_t	 s1_DL_GTPtunnelEndpoint;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c
new file mode 100644
index 0000000..841cad6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, seNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P20,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer = {
+	"E-RABs-Admitted-ToBeAdded-Item-Split-Bearer",
+	"E-RABs-Admitted-ToBeAdded-Item-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h
new file mode 100644
index 0000000..cc456c6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_GTPtunnelEndpoint_t	 seNB_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.c
new file mode 100644
index 0000000..b3fed10
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item.h"
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_Item_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_Item *)0)->present),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item = {
+	"E-RABs-Admitted-ToBeAdded-Item",
+	"E-RABs-Admitted-ToBeAdded-Item",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_Item_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.h
new file mode 100644
index 0000000..f478bc2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-Item.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_Item_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_Item_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_Item_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_Item_PR_sCG_Bearer,
+	X2N_E_RABs_Admitted_ToBeAdded_Item_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_Item_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer;
+struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-Item */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_Item {
+	X2N_E_RABs_Admitted_ToBeAdded_Item_PR present;
+	union X2N_E_RABs_Admitted_ToBeAdded_Item_u {
+		struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.c
new file mode 100644
index 0000000..d0a8a13
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_List),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List = {
+	"E-RABs-Admitted-ToBeAdded-List",
+	"E-RABs-Admitted-ToBeAdded-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.h
new file mode 100644
index 0000000..7ddb474
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_List_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-List */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c
new file mode 100644
index 0000000..cac3947
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P30,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer",
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h
new file mode 100644
index 0000000..84355ed
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_GTPtunnelEndpoint_t	 s1_DL_GTPtunnelEndpoint;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c
new file mode 100644
index 0000000..7c5b39b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, seNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P31,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer",
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h
new file mode 100644
index 0000000..c941bfe
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_GTPtunnelEndpoint_t	 seNB_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.c
new file mode 100644
index 0000000..33d75e6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.h"
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem *)0)->present),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItem",
+	"E-RABs-Admitted-ToBeAdded-ModAckItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.h
new file mode 100644
index 0000000..9e64c08
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR_sCG_Bearer,
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer;
+struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-ModAckItem */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem {
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_PR present;
+	union X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_u {
+		struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.c
new file mode 100644
index 0000000..80f5f66
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P14,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList = {
+	"E-RABs-Admitted-ToBeAdded-ModAckList",
+	"E-RABs-Admitted-ToBeAdded-ModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.h
new file mode 100644
index 0000000..9ffbf43
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-ModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_ModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-ModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_ModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..28ef553
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P49,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..6e5f1c7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent {
+	X2N_GTPtunnelEndpoint_t	 sgNB_DL_GTP_TEIDatSCG;
+	struct X2N_GTPtunnelEndpoint	*secondary_sgNB_DL_GTP_TEIDatSCG;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..1ec32a6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.c
@@ -0,0 +1,126 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 7, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 6, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, rlc_Mode),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P48,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rlc-Mode */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1,
+	8,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..13406f3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent {
+	X2N_GTPtunnelEndpoint_t	 s1_DL_GTPtunnelEndpoint;
+	struct X2N_GTPtunnelEndpoint	*sgNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	X2N_RLCMode_t	*rlc_Mode;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_E_RAB_Level_QoS_Parameters	*mCG_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_1[8];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c
new file mode 100644
index 0000000..71fc879
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P47,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h
new file mode 100644
index 0000000..bbc8f1e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c
new file mode 100644
index 0000000..0152370
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P23,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h
new file mode 100644
index 0000000..8adf3a0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..f0a5920
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P64,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..749cbfa
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent {
+	X2N_GTPtunnelEndpoint_t	 sgNB_DL_GTP_TEIDatSCG;
+	struct X2N_GTPtunnelEndpoint	*secondary_sgNB_DL_GTP_TEIDatSCG;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..5bef038
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.c
@@ -0,0 +1,126 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 7, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 6, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, rlc_Mode),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P63,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rlc-Mode */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1,
+	8,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..b1784a0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent {
+	X2N_GTPtunnelEndpoint_t	 s1_DL_GTPtunnelEndpoint;
+	struct X2N_GTPtunnelEndpoint	*sgNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	X2N_RLCMode_t	*rlc_Mode;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_E_RAB_Level_QoS_Parameters	*mCG_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_1[8];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c
new file mode 100644
index 0000000..89eb9c0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P62,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h
new file mode 100644
index 0000000..ebf4ef6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__resource_configuration_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.c
new file mode 100644
index 0000000..9e845a6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P27,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAckList",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.h
new file mode 100644
index 0000000..da5fc56
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c
new file mode 100644
index 0000000..4edd131
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P32,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer = {
+	"E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer",
+	"E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h
new file mode 100644
index 0000000..e8e5219
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*s1_DL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c
new file mode 100644
index 0000000..bd61ceb
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, seNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P33,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer = {
+	"E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer",
+	"E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h
new file mode 100644
index 0000000..cac99a8
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*seNB_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.c
new file mode 100644
index 0000000..628a436
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem.h"
+
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem *)0)->present),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem = {
+	"E-RABs-Admitted-ToBeModified-ModAckItem",
+	"E-RABs-Admitted-ToBeModified-ModAckItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.h
new file mode 100644
index 0000000..0ef14e2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR {
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR_sCG_Bearer,
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer;
+struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer;
+
+/* X2N_E-RABs-Admitted-ToBeModified-ModAckItem */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem {
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_PR present;
+	union X2N_E_RABs_Admitted_ToBeModified_ModAckItem_u {
+		struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_ModAckItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.c
new file mode 100644
index 0000000..91b0f33
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_ModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P15,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList = {
+	"E-RABs-Admitted-ToBeModified-ModAckList",
+	"E-RABs-Admitted-ToBeModified-ModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_ModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.h
new file mode 100644
index 0000000..1f444cb
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-ModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_ModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_ModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeModified-ModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_ModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..d17ad75
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P67,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..ba7107a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent {
+	struct X2N_GTPtunnelEndpoint	*sgNB_DL_GTP_TEIDatSCG;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..56f59df
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 5, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, s1_DL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, mCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P66,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s1-DL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..29ae4c2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent {
+	struct X2N_GTPtunnelEndpoint	*s1_DL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*sgNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	struct X2N_E_RAB_Level_QoS_Parameters	*mCG_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c
new file mode 100644
index 0000000..463a60a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P65,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h
new file mode 100644
index 0000000..46ddd61
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR {
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration {
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__resource_configuration_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.c
new file mode 100644
index 0000000..2c699d5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P28,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAckList",
+	"E-RABs-Admitted-ToBeModified-SgNBModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.h
new file mode 100644
index 0000000..5649a8d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c
new file mode 100644
index 0000000..4f0d188
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P34,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer = {
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer",
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h
new file mode 100644
index 0000000..06df720
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c
new file mode 100644
index 0000000..09c5e8e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P35,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer = {
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer",
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h
new file mode 100644
index 0000000..b976843
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.c
new file mode 100644
index 0000000..53f313a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P16,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList = {
+	"E-RABs-Admitted-ToBeReleased-ModAckList",
+	"E-RABs-Admitted-ToBeReleased-ModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.h
new file mode 100644
index 0000000..17e606c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-ModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_ModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-ModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_ModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..20627dc
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P70,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..55efb58
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..3698657
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P69,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..7b09cc7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.c
new file mode 100644
index 0000000..ebad6e7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P29,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAckList",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.h
new file mode 100644
index 0000000..10f127c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c
new file mode 100644
index 0000000..8eb74de
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, rlc_Mode_transferred),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode-transferred"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P81,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-Mode-transferred */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = {
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item",
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h
new file mode 100644
index 0000000..b0c0594
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_RLCMode_t	 rlc_Mode_transferred;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c
new file mode 100644
index 0000000..34311d6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P34,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = {
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList",
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h
new file mode 100644
index 0000000..3c19d1c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_
+#define	_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList */
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.c b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.c
new file mode 100644
index 0000000..94103f5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToReleased-ModAckItem.h"
+
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_Admitted_ToReleased_ModAckItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToReleased_ModAckItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_ModAckItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_ModAckItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToReleased_ModAckItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToReleased_ModAckItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToReleased_ModAckItem),
+	offsetof(struct X2N_E_RABs_Admitted_ToReleased_ModAckItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToReleased_ModAckItem, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToReleased_ModAckItem *)0)->present),
+	asn_MAP_X2N_E_RABs_Admitted_ToReleased_ModAckItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToReleased_ModAckItem = {
+	"E-RABs-Admitted-ToReleased-ModAckItem",
+	"E-RABs-Admitted-ToReleased-ModAckItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_Admitted_ToReleased_ModAckItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToReleased_ModAckItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToReleased_ModAckItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.h b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.h
new file mode 100644
index 0000000..0273f60
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-ModAckItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToReleased_ModAckItem_H_
+#define	_X2N_E_RABs_Admitted_ToReleased_ModAckItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR {
+	X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR_sCG_Bearer,
+	X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer;
+struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer;
+
+/* X2N_E-RABs-Admitted-ToReleased-ModAckItem */
+typedef struct X2N_E_RABs_Admitted_ToReleased_ModAckItem {
+	X2N_E_RABs_Admitted_ToReleased_ModAckItem_PR present;
+	union X2N_E_RABs_Admitted_ToReleased_ModAckItem_u {
+		struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToReleased_ModAckItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToReleased_ModAckItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToReleased_ModAckItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.c b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.c
new file mode 100644
index 0000000..2e2b865
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P68,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item),
+	offsetof(struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item = {
+	"E-RABs-Admitted-ToReleased-SgNBModAck-Item",
+	"E-RABs-Admitted-ToReleased-SgNBModAck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.h b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.h
new file mode 100644
index 0000000..3ff1e82
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_
+#define	_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR {
+	X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item */
+typedef struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration {
+		X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__resource_configuration_PR present;
+		union X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..8e046ca
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P77,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..b9b8acf
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent {
+	struct X2N_GTPtunnelEndpoint	*secondary_meNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..c60ce1c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P76,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..7cb9344
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.c b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.c
new file mode 100644
index 0000000..2843309
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P75,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.h b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.h
new file mode 100644
index 0000000..428460f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_
+#define	_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR {
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item */
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__resource_configuration_PR present;
+		union X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.c b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.c
new file mode 100644
index 0000000..f40a706
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P32,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_specs_1 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConfList),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConfList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList = {
+	"E-RABs-AdmittedToBeModified-SgNBModConfList",
+	"E-RABs-AdmittedToBeModified-SgNBModConfList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.h b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.h
new file mode 100644
index 0000000..4328d75
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_H_
+#define	_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-AdmittedToBeModified-SgNBModConfList */
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConfList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.c b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.c
new file mode 100644
index 0000000..5cba22b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-DataForwardingAddress-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_Item, dl_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dl-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_DataForwardingAddress_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P103,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_DataForwardingAddress_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_DataForwardingAddress_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_Item),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_DataForwardingAddress_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_DataForwardingAddress_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_Item = {
+	"E-RABs-DataForwardingAddress-Item",
+	"E-RABs-DataForwardingAddress-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_DataForwardingAddress_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_DataForwardingAddress_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.h b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.h
new file mode 100644
index 0000000..247c111
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_DataForwardingAddress_Item_H_
+#define	_X2N_E_RABs_DataForwardingAddress_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-DataForwardingAddress-Item */
+typedef struct X2N_E_RABs_DataForwardingAddress_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_GTPtunnelEndpoint_t	 dl_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_DataForwardingAddress_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_DataForwardingAddress_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.c b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.c
new file mode 100644
index 0000000..d3a8069
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-DataForwardingAddress-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_DataForwardingAddress_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P39,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_List),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_List = {
+	"E-RABs-DataForwardingAddress-List",
+	"E-RABs-DataForwardingAddress-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_DataForwardingAddress_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_DataForwardingAddress_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_DataForwardingAddress_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.h b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.h
new file mode 100644
index 0000000..efdabe0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-DataForwardingAddress-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_DataForwardingAddress_List_H_
+#define	_X2N_E_RABs_DataForwardingAddress_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-DataForwardingAddress-List */
+typedef struct X2N_E_RABs_DataForwardingAddress_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_DataForwardingAddress_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_DataForwardingAddress_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.c b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.c
new file mode 100644
index 0000000..4c6cb82
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToCounterCheck-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_SubjectToCounterCheck_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheck_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P20,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheck_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheck_List),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheck_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List = {
+	"E-RABs-SubjectToCounterCheck-List",
+	"E-RABs-SubjectToCounterCheck-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_SubjectToCounterCheck_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToCounterCheck_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_SubjectToCounterCheck_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.h b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.h
new file mode 100644
index 0000000..9ae9230
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheck-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToCounterCheck_List_H_
+#define	_X2N_E_RABs_SubjectToCounterCheck_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-SubjectToCounterCheck-List */
+typedef struct X2N_E_RABs_SubjectToCounterCheck_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToCounterCheck_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToCounterCheck_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.c b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.c
new file mode 100644
index 0000000..69e702a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.c
@@ -0,0 +1,225 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToCounterCheckItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+X2N_uL_Count_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+X2N_dL_Count_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_uL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+static int
+memb_X2N_dL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_uL_Count_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_dL_Count_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_uL_Count_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_dL_Count_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_uL_Count_specs_3 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_uL_Count_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_uL_Count_3 = {
+	"uL-Count",
+	"uL-Count",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_uL_Count_tags_3,
+	sizeof(asn_DEF_X2N_uL_Count_tags_3)
+		/sizeof(asn_DEF_X2N_uL_Count_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_uL_Count_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_uL_Count_tags_3)
+		/sizeof(asn_DEF_X2N_uL_Count_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_uL_Count_constr_3, X2N_uL_Count_3_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_uL_Count_specs_3	/* Additional specs */
+};
+
+static const asn_INTEGER_specifics_t asn_SPC_X2N_dL_Count_specs_4 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_dL_Count_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_dL_Count_4 = {
+	"dL-Count",
+	"dL-Count",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_dL_Count_tags_4,
+	sizeof(asn_DEF_X2N_dL_Count_tags_4)
+		/sizeof(asn_DEF_X2N_dL_Count_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_dL_Count_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_dL_Count_tags_4)
+		/sizeof(asn_DEF_X2N_dL_Count_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_dL_Count_constr_4, X2N_dL_Count_4_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_dL_Count_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheckItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItem, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItem, uL_Count),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_uL_Count_3,
+		0,
+		{ 0, &asn_PER_memb_X2N_uL_Count_constr_3,  memb_X2N_uL_Count_constraint_1 },
+		0, 0, /* No default value */
+		"uL-Count"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItem, dL_Count),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_dL_Count_4,
+		0,
+		{ 0, &asn_PER_memb_X2N_dL_Count_constr_4,  memb_X2N_dL_Count_constraint_1 },
+		0, 0, /* No default value */
+		"dL-Count"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P41,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_SubjectToCounterCheckItem_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToCounterCheckItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Count */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Count */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheckItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheckItem),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItem, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToCounterCheckItem_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_SubjectToCounterCheckItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem = {
+	"E-RABs-SubjectToCounterCheckItem",
+	"E-RABs-SubjectToCounterCheckItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToCounterCheckItem_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToCounterCheckItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.h b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.h
new file mode 100644
index 0000000..19bdc85
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToCounterCheckItem.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToCounterCheckItem_H_
+#define	_X2N_E_RABs_SubjectToCounterCheckItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-SubjectToCounterCheckItem */
+typedef struct X2N_E_RABs_SubjectToCounterCheckItem {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	unsigned long	 uL_Count;
+	unsigned long	 dL_Count;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToCounterCheckItem_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_uL_Count_3;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_dL_Count_4;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToCounterCheckItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.c b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.c
new file mode 100644
index 0000000..52f628b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.c
@@ -0,0 +1,225 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToSgNBCounterCheck-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+X2N_uL_Count_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+X2N_dL_Count_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_uL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+static int
+memb_X2N_dL_Count_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_uL_Count_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_dL_Count_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_uL_Count_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_dL_Count_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_uL_Count_specs_3 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_uL_Count_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_uL_Count_3 = {
+	"uL-Count",
+	"uL-Count",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_uL_Count_tags_3,
+	sizeof(asn_DEF_X2N_uL_Count_tags_3)
+		/sizeof(asn_DEF_X2N_uL_Count_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_uL_Count_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_uL_Count_tags_3)
+		/sizeof(asn_DEF_X2N_uL_Count_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_uL_Count_constr_3, X2N_uL_Count_3_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_uL_Count_specs_3	/* Additional specs */
+};
+
+static const asn_INTEGER_specifics_t asn_SPC_X2N_dL_Count_specs_4 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_dL_Count_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_dL_Count_4 = {
+	"dL-Count",
+	"dL-Count",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_dL_Count_tags_4,
+	sizeof(asn_DEF_X2N_dL_Count_tags_4)
+		/sizeof(asn_DEF_X2N_dL_Count_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_dL_Count_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_dL_Count_tags_4)
+		/sizeof(asn_DEF_X2N_dL_Count_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_dL_Count_constr_4, X2N_dL_Count_4_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_dL_Count_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item, uL_Count),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_uL_Count_3,
+		0,
+		{ 0, &asn_PER_memb_X2N_uL_Count_constr_3,  memb_X2N_uL_Count_constraint_1 },
+		0, 0, /* No default value */
+		"uL-Count"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item, dL_Count),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_dL_Count_4,
+		0,
+		{ 0, &asn_PER_memb_X2N_dL_Count_constr_4,  memb_X2N_dL_Count_constraint_1 },
+		0, 0, /* No default value */
+		"dL-Count"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P86,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Count */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Count */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item = {
+	"E-RABs-SubjectToSgNBCounterCheck-Item",
+	"E-RABs-SubjectToSgNBCounterCheck-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.h b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.h
new file mode 100644
index 0000000..d833408
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-Item.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_H_
+#define	_X2N_E_RABs_SubjectToSgNBCounterCheck_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-SubjectToSgNBCounterCheck-Item */
+typedef struct X2N_E_RABs_SubjectToSgNBCounterCheck_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	unsigned long	 uL_Count;
+	unsigned long	 dL_Count;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToSgNBCounterCheck_Item_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_uL_Count_3;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_dL_Count_4;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToSgNBCounterCheck_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.c b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.c
new file mode 100644
index 0000000..530ccde
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToSgNBCounterCheck-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_SubjectToSgNBCounterCheck_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P37,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_List),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List = {
+	"E-RABs-SubjectToSgNBCounterCheck-List",
+	"E-RABs-SubjectToSgNBCounterCheck-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_SubjectToSgNBCounterCheck_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.h b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.h
new file mode 100644
index 0000000..ba1fcd0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToSgNBCounterCheck-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToSgNBCounterCheck_List_H_
+#define	_X2N_E_RABs_SubjectToSgNBCounterCheck_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-SubjectToSgNBCounterCheck-List */
+typedef struct X2N_E_RABs_SubjectToSgNBCounterCheck_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToSgNBCounterCheck_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToSgNBCounterCheck_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.c b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.c
new file mode 100644
index 0000000..a009ed1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToStatusTransfer-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, receiveStatusofULPDCPSDUs),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReceiveStatusofULPDCPSDUs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"receiveStatusofULPDCPSDUs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, uL_COUNTvalue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_COUNTvalue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-COUNTvalue"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, dL_COUNTvalue),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_COUNTvalue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-COUNTvalue"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_Item_oms_1[] = { 1, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* receiveStatusofULPDCPSDUs */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-COUNTvalue */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-COUNTvalue */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_Item),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item = {
+	"E-RABs-SubjectToStatusTransfer-Item",
+	"E-RABs-SubjectToStatusTransfer-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.h b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.h
new file mode 100644
index 0000000..88323a6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-Item.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToStatusTransfer_Item_H_
+#define	_X2N_E_RABs_SubjectToStatusTransfer_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_ReceiveStatusofULPDCPSDUs.h"
+#include "X2N_COUNTvalue.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-SubjectToStatusTransfer-Item */
+typedef struct X2N_E_RABs_SubjectToStatusTransfer_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_ReceiveStatusofULPDCPSDUs_t	*receiveStatusofULPDCPSDUs;	/* OPTIONAL */
+	X2N_COUNTvalue_t	 uL_COUNTvalue;
+	X2N_COUNTvalue_t	 dL_COUNTvalue;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToStatusTransfer_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToStatusTransfer_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.c b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.c
new file mode 100644
index 0000000..04134e9
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-SubjectToStatusTransfer-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_SubjectToStatusTransfer_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_List),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List = {
+	"E-RABs-SubjectToStatusTransfer-List",
+	"E-RABs-SubjectToStatusTransfer-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_SubjectToStatusTransfer_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.h b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.h
new file mode 100644
index 0000000..26c0d5e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-SubjectToStatusTransfer-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_SubjectToStatusTransfer_List_H_
+#define	_X2N_E_RABs_SubjectToStatusTransfer_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-SubjectToStatusTransfer-List */
+typedef struct X2N_E_RABs_SubjectToStatusTransfer_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToStatusTransfer_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_SubjectToStatusTransfer_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.c
new file mode 100644
index 0000000..6eca59e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, dL_Forwarding),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P17,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_oms_1[] = { 2, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer = {
+	"E-RABs-ToBeAdded-Item-SCG-Bearer",
+	"E-RABs-ToBeAdded-Item-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.h
new file mode 100644
index 0000000..5ff20c6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-Item-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_DL_Forwarding_t	*dL_Forwarding;	/* OPTIONAL */
+	X2N_GTPtunnelEndpoint_t	 s1_UL_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_Item_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.c
new file mode 100644
index 0000000..2ed63de
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-Item-Split-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer, meNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer = {
+	"E-RABs-ToBeAdded-Item-Split-Bearer",
+	"E-RABs-ToBeAdded-Item-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.h
new file mode 100644
index 0000000..f280df4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item-Split-Bearer.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-Item-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_GTPtunnelEndpoint_t	 meNB_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_Item_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_Item_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.c
new file mode 100644
index 0000000..1247edd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-Item.h"
+
+#include "X2N_E-RABs-ToBeAdded-Item-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeAdded-Item-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_Item_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_Item *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item = {
+	"E-RABs-ToBeAdded-Item",
+	"E-RABs-ToBeAdded-Item",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_Item_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.h
new file mode 100644
index 0000000..96a6a0f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-Item.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_Item_H_
+#define	_X2N_E_RABs_ToBeAdded_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeAdded_Item_PR {
+	X2N_E_RABs_ToBeAdded_Item_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_Item_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeAdded_Item_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeAdded_Item_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer;
+struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer;
+
+/* X2N_E-RABs-ToBeAdded-Item */
+typedef struct X2N_E_RABs_ToBeAdded_Item {
+	X2N_E_RABs_ToBeAdded_Item_PR present;
+	union X2N_E_RABs_ToBeAdded_Item_u {
+		struct X2N_E_RABs_ToBeAdded_Item_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeAdded_Item_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.c
new file mode 100644
index 0000000..cfd5e91
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-List-ModReq.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_List_ModReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_List_ModReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P11,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_List_ModReq_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_List_ModReq),
+	offsetof(struct X2N_E_RABs_ToBeAdded_List_ModReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq = {
+	"E-RABs-ToBeAdded-List-ModReq",
+	"E-RABs-ToBeAdded-List-ModReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_List_ModReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_List_ModReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_List_ModReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.h
new file mode 100644
index 0000000..bcf094a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-List-ModReq.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_List_ModReq_H_
+#define	_X2N_E_RABs_ToBeAdded_List_ModReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeAdded-List-ModReq */
+typedef struct X2N_E_RABs_ToBeAdded_List_ModReq {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_List_ModReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_List_ModReq_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_List_ModReq_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_List_ModReq_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_List_ModReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-List.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-List.c
new file mode 100644
index 0000000..face2b1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P9,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_List),
+	offsetof(struct X2N_E_RABs_ToBeAdded_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_List = {
+	"E-RABs-ToBeAdded-List",
+	"E-RABs-ToBeAdded-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-List.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-List.h
new file mode 100644
index 0000000..55c52b6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_List_H_
+#define	_X2N_E_RABs_ToBeAdded_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeAdded-List */
+typedef struct X2N_E_RABs_ToBeAdded_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c
new file mode 100644
index 0000000..416ced3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, dL_Forwarding),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P24,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_oms_1[] = { 2, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer = {
+	"E-RABs-ToBeAdded-ModReqItem-SCG-Bearer",
+	"E-RABs-ToBeAdded-ModReqItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h
new file mode 100644
index 0000000..848b60a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_DL_Forwarding_t	*dL_Forwarding;	/* OPTIONAL */
+	X2N_GTPtunnelEndpoint_t	 s1_UL_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c
new file mode 100644
index 0000000..4c1f78d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, meNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P25,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer = {
+	"E-RABs-ToBeAdded-ModReqItem-Split-Bearer",
+	"E-RABs-ToBeAdded-ModReqItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h
new file mode 100644
index 0000000..89daf98
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_GTPtunnelEndpoint_t	 meNB_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.c
new file mode 100644
index 0000000..4462590
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-ModReqItem.h"
+
+#include "X2N_E-RABs-ToBeAdded-ModReqItem-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeAdded-ModReqItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_ModReqItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_ModReqItem *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem = {
+	"E-RABs-ToBeAdded-ModReqItem",
+	"E-RABs-ToBeAdded-ModReqItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_ModReqItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.h
new file mode 100644
index 0000000..b6723c2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-ModReqItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_ModReqItem_H_
+#define	_X2N_E_RABs_ToBeAdded_ModReqItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeAdded_ModReqItem_PR {
+	X2N_E_RABs_ToBeAdded_ModReqItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_ModReqItem_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeAdded_ModReqItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeAdded_ModReqItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer;
+struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer;
+
+/* X2N_E-RABs-ToBeAdded-ModReqItem */
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItem {
+	X2N_E_RABs_ToBeAdded_ModReqItem_PR present;
+	union X2N_E_RABs_ToBeAdded_ModReqItem_u {
+		struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_ModReqItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..f982004
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,105 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"requested-SCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, rlc_Mode),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P46,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_oms_1[] = { 2, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rlc-Mode */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..7e77be4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent {
+	X2N_E_RAB_Level_QoS_Parameters_t	 requested_SCG_E_RAB_Level_QoS_Parameters;
+	X2N_GTPtunnelEndpoint_t	 meNB_UL_GTP_TEIDatPDCP;
+	struct X2N_GTPtunnelEndpoint	*secondary_meNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	X2N_RLCMode_t	 rlc_Mode;
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..deb9fbd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.c
@@ -0,0 +1,105 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GBR-QosInformation.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"full-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, max_MCG_admit_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GBR_QosInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"max-MCG-admit-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, dL_Forwarding),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-DL-GTP-TEIDatMCG"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P45,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MCG-admit-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..e1f1cde
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GBR_QosInformation;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent {
+	X2N_E_RAB_Level_QoS_Parameters_t	 full_E_RAB_Level_QoS_Parameters;
+	struct X2N_GBR_QosInformation	*max_MCG_admit_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	X2N_DL_Forwarding_t	*dL_Forwarding;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*meNB_DL_GTP_TEIDatMCG;	/* OPTIONAL */
+	X2N_GTPtunnelEndpoint_t	 s1_UL_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.c
new file mode 100644
index 0000000..e13da32
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.c
@@ -0,0 +1,149 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_5[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_5 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_5,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_5 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_5, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_5,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, drb_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DRB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"drb-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P44,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item = {
+	"E-RABs-ToBeAdded-SgNBAddReq-Item",
+	"E-RABs-ToBeAdded-SgNBAddReq-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.h
new file mode 100644
index 0000000..1bec9be
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.h
@@ -0,0 +1,76 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_DRB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeAdded-SgNBAddReq-Item */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_DRB_ID_t	 drb_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReq_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.c
new file mode 100644
index 0000000..8fe7dc1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReqList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_SgNBAddReqList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReqList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P22,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReqList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqList),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList = {
+	"E-RABs-ToBeAdded-SgNBAddReqList",
+	"E-RABs-ToBeAdded-SgNBAddReqList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_SgNBAddReqList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReqList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReqList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.h
new file mode 100644
index 0000000..52fb938
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBAddReqList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBAddReqList_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBAddReqList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeAdded-SgNBAddReqList */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReqList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReqList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBAddReqList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..fcd42bb
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,105 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"requested-SCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, secondary_meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, rlc_Mode),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P55,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 2, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* secondary-meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rlc-Mode */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..152efb2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent {
+	X2N_E_RAB_Level_QoS_Parameters_t	 requested_SCG_E_RAB_Level_QoS_Parameters;
+	X2N_GTPtunnelEndpoint_t	 meNB_UL_GTP_TEIDatPDCP;
+	struct X2N_GTPtunnelEndpoint	*secondary_meNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	X2N_RLCMode_t	 rlc_Mode;
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..fc2916a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.c
@@ -0,0 +1,105 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GBR-QosInformation.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"full-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, max_MN_admit_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GBR_QosInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"max-MN-admit-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, dL_Forwarding),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-DL-GTP-TEIDatMCG"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P54,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 1, 2, 3, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MN-admit-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..901501a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GBR_QosInformation;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent {
+	X2N_E_RAB_Level_QoS_Parameters_t	 full_E_RAB_Level_QoS_Parameters;
+	struct X2N_GBR_QosInformation	*max_MN_admit_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	X2N_DL_Forwarding_t	*dL_Forwarding;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*meNB_DL_GTP_TEIDatMCG;	/* OPTIONAL */
+	X2N_GTPtunnelEndpoint_t	 s1_UL_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.c
new file mode 100644
index 0000000..672dc12
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.c
@@ -0,0 +1,149 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_5[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_5 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_5,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_5 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_5, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_5,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, drb_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DRB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"drb-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P53,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item = {
+	"E-RABs-ToBeAdded-SgNBModReq-Item",
+	"E-RABs-ToBeAdded-SgNBModReq-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.h
new file mode 100644
index 0000000..58e8623
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-Item.h
@@ -0,0 +1,76 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_DRB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeAdded-SgNBModReq-Item */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_DRB_ID_t	 drb_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModReq_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBModReq_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.c b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.c
new file mode 100644
index 0000000..9560b84
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_SgNBModReq_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P24,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_List),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List = {
+	"E-RABs-ToBeAdded-SgNBModReq-List",
+	"E-RABs-ToBeAdded-SgNBModReq-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeAdded_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.h b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.h
new file mode 100644
index 0000000..7f6117c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeAdded-SgNBModReq-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeAdded_SgNBModReq_List_H_
+#define	_X2N_E_RABs_ToBeAdded_SgNBModReq_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeAdded-SgNBModReq-List */
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeAdded_SgNBModReq_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeAdded_SgNBModReq_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.c b/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.c
new file mode 100644
index 0000000..7c127ad
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-List-ModReq.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_List_ModReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_List_ModReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P12,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_List_ModReq_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_List_ModReq),
+	offsetof(struct X2N_E_RABs_ToBeModified_List_ModReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq = {
+	"E-RABs-ToBeModified-List-ModReq",
+	"E-RABs-ToBeModified-List-ModReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeModified_List_ModReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_List_ModReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeModified_List_ModReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.h b/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.h
new file mode 100644
index 0000000..a7f4db8
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-List-ModReq.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_List_ModReq_H_
+#define	_X2N_E_RABs_ToBeModified_List_ModReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeModified-List-ModReq */
+typedef struct X2N_E_RABs_ToBeModified_List_ModReq {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_List_ModReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_List_ModReq_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_List_ModReq_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_List_ModReq_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_List_ModReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c
new file mode 100644
index 0000000..ff1083b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.c
@@ -0,0 +1,85 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h"
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P26,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer = {
+	"E-RABs-ToBeModified-ModReqItem-SCG-Bearer",
+	"E-RABs-ToBeModified-ModReqItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h
new file mode 100644
index 0000000..20dbd63
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_E_RAB_Level_QoS_Parameters	*e_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*s1_UL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.c
new file mode 100644
index 0000000..035e512
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.c
@@ -0,0 +1,85 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.h"
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer, meNB_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P27,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer = {
+	"E-RABs-ToBeModified-ModReqItem-Split-Bearer",
+	"E-RABs-ToBeModified-ModReqItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.h
new file mode 100644
index 0000000..437747f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_E_RAB_Level_QoS_Parameters	*e_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*meNB_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.c b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.c
new file mode 100644
index 0000000..0e01104
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-ModReqItem.h"
+
+#include "X2N_E-RABs-ToBeModified-ModReqItem-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeModified-ModReqItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_ModReqItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_ModReqItem *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem = {
+	"E-RABs-ToBeModified-ModReqItem",
+	"E-RABs-ToBeModified-ModReqItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeModified_ModReqItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.h b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.h
new file mode 100644
index 0000000..b1b7ba6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-ModReqItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_ModReqItem_H_
+#define	_X2N_E_RABs_ToBeModified_ModReqItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeModified_ModReqItem_PR {
+	X2N_E_RABs_ToBeModified_ModReqItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_ModReqItem_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeModified_ModReqItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeModified_ModReqItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer;
+struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer;
+
+/* X2N_E-RABs-ToBeModified-ModReqItem */
+typedef struct X2N_E_RABs_ToBeModified_ModReqItem {
+	X2N_E_RABs_ToBeModified_ModReqItem_PR present;
+	union X2N_E_RABs_ToBeModified_ModReqItem_u {
+		struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeModified_ModReqItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_ModReqItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..516fe6f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,86 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, requested_SCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"requested-SCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, meNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P58,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-SCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..50db53b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ULConfiguration;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent {
+	struct X2N_E_RAB_Level_QoS_Parameters	*requested_SCG_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*meNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..1c63318
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h"
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_GBR-QosInformation.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 5, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, full_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"full-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, max_MN_admit_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GBR_QosInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"max-MN-admit-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, meNB_DL_GTP_TEIDatMCG),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-DL-GTP-TEIDatMCG"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, s1_UL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-UL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P57,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* full-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* max-MN-admit-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* meNB-DL-GTP-TEIDatMCG */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-UL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..5e6c278
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_GBR_QosInformation;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent {
+	struct X2N_E_RAB_Level_QoS_Parameters	*full_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_GBR_QosInformation	*max_MN_admit_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*meNB_DL_GTP_TEIDatMCG;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*s1_UL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.c
new file mode 100644
index 0000000..b57720f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P56,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item = {
+	"E-RABs-ToBeModified-SgNBModReq-Item",
+	"E-RABs-ToBeModified-SgNBModReq-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.h
new file mode 100644
index 0000000..99147c4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReq_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReq-Item */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration {
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReq_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReq_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.c
new file mode 100644
index 0000000..6f27ed0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_SgNBModReq_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P25,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_List),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List = {
+	"E-RABs-ToBeModified-SgNBModReq-List",
+	"E-RABs-ToBeModified-SgNBModReq-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeModified_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.h
new file mode 100644
index 0000000..d67d027
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReq-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReq_List_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReq_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReq-List */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_SgNBModReq_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReq_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..22bb2a0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, secondary_sgNB_DL_GTP_TEIDatSCG),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondary-sgNB-DL-GTP-TEIDatSCG"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P74,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondary-sgNB-DL-GTP-TEIDatSCG */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..4cdb840
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent {
+	struct X2N_GTPtunnelEndpoint	*sgNB_DL_GTP_TEIDatSCG;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*secondary_sgNB_DL_GTP_TEIDatSCG;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..5541ebd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h"
+
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_ULConfiguration.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 5, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, requested_MCG_E_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"requested-MCG-E-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, uL_Configuration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Configuration"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, sgNB_UL_GTP_TEIDatPDCP),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-UL-GTP-TEIDatPDCP"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, s1_DL_GTP_TEIDatSgNB),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"s1-DL-GTP-TEIDatSgNB"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P73,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* requested-MCG-E-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNB-UL-GTP-TEIDatPDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* s1-DL-GTP-TEIDatSgNB */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..546b919
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_E_RAB_Level_QoS_Parameters;
+struct X2N_ULConfiguration;
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent {
+	struct X2N_E_RAB_Level_QoS_Parameters	*requested_MCG_E_RAB_Level_QoS_Parameters;	/* OPTIONAL */
+	struct X2N_ULConfiguration	*uL_Configuration;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*sgNB_UL_GTP_TEIDatPDCP;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*s1_DL_GTP_TEIDatSgNB;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.c
new file mode 100644
index 0000000..dbf0b81
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P72,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item = {
+	"E-RABs-ToBeModified-SgNBModReqd-Item",
+	"E-RABs-ToBeModified-SgNBModReqd-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.h
new file mode 100644
index 0000000..dadb3ff
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqd-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReqd-Item */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReqd_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReqd_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.c b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.c
new file mode 100644
index 0000000..ae65183
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeModified-SgNBModReqdList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeModified_SgNBModReqdList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqdList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P31,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqdList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqdList),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqdList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList = {
+	"E-RABs-ToBeModified-SgNBModReqdList",
+	"E-RABs-ToBeModified-SgNBModReqdList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeModified_SgNBModReqdList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqdList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqdList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.h b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.h
new file mode 100644
index 0000000..064c8ae
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeModified-SgNBModReqdList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeModified_SgNBModReqdList_H_
+#define	_X2N_E_RABs_ToBeModified_SgNBModReqdList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeModified-SgNBModReqdList */
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqdList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqdList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeModified_SgNBModReqdList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.c
new file mode 100644
index 0000000..008caad
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-List-ModReq.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_List_ModReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_List_ModReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P13,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_List_ModReq_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_List_ModReq),
+	offsetof(struct X2N_E_RABs_ToBeReleased_List_ModReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq = {
+	"E-RABs-ToBeReleased-List-ModReq",
+	"E-RABs-ToBeReleased-List-ModReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_List_ModReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_List_ModReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_List_ModReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.h
new file mode 100644
index 0000000..da485e3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-ModReq.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_List_ModReq_H_
+#define	_X2N_E_RABs_ToBeReleased_List_ModReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-List-ModReq */
+typedef struct X2N_E_RABs_ToBeReleased_List_ModReq {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_List_ModReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_List_ModReq_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_List_ModReq_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_List_ModReq_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_List_ModReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.c
new file mode 100644
index 0000000..8c384c7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-List-RelConf.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_List_RelConf_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_List_RelConf_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P19,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_List_RelConf_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_List_RelConf),
+	offsetof(struct X2N_E_RABs_ToBeReleased_List_RelConf, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf = {
+	"E-RABs-ToBeReleased-List-RelConf",
+	"E-RABs-ToBeReleased-List-RelConf",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_List_RelConf_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_List_RelConf_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_List_RelConf_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.h
new file mode 100644
index 0000000..84e6829
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelConf.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_List_RelConf_H_
+#define	_X2N_E_RABs_ToBeReleased_List_RelConf_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-List-RelConf */
+typedef struct X2N_E_RABs_ToBeReleased_List_RelConf {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_List_RelConf_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_List_RelConf_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.c
new file mode 100644
index 0000000..9f4cb78
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-List-RelReq.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_List_RelReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_List_RelReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_List_RelReq_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_List_RelReq),
+	offsetof(struct X2N_E_RABs_ToBeReleased_List_RelReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq = {
+	"E-RABs-ToBeReleased-List-RelReq",
+	"E-RABs-ToBeReleased-List-RelReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_List_RelReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_List_RelReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_List_RelReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.h
new file mode 100644
index 0000000..87dc2bc
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-List-RelReq.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_List_RelReq_H_
+#define	_X2N_E_RABs_ToBeReleased_List_RelReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-List-RelReq */
+typedef struct X2N_E_RABs_ToBeReleased_List_RelReq {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_List_RelReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_List_RelReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c
new file mode 100644
index 0000000..a49b1de
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P28,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer = {
+	"E-RABs-ToBeReleased-ModReqItem-SCG-Bearer",
+	"E-RABs-ToBeReleased-ModReqItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h
new file mode 100644
index 0000000..9770889
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c
new file mode 100644
index 0000000..864b8d4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P29,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer = {
+	"E-RABs-ToBeReleased-ModReqItem-Split-Bearer",
+	"E-RABs-ToBeReleased-ModReqItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h
new file mode 100644
index 0000000..c55b6ee
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.c
new file mode 100644
index 0000000..6d575e2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-ModReqItem.h"
+
+#include "X2N_E-RABs-ToBeReleased-ModReqItem-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeReleased-ModReqItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_ModReqItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqItem *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem = {
+	"E-RABs-ToBeReleased-ModReqItem",
+	"E-RABs-ToBeReleased-ModReqItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_ModReqItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.h
new file mode 100644
index 0000000..73dfbc7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_ModReqItem_H_
+#define	_X2N_E_RABs_ToBeReleased_ModReqItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_ModReqItem_PR {
+	X2N_E_RABs_ToBeReleased_ModReqItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_ModReqItem_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeReleased_ModReqItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_ModReqItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer;
+struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer;
+
+/* X2N_E-RABs-ToBeReleased-ModReqItem */
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItem {
+	X2N_E_RABs_ToBeReleased_ModReqItem_PR present;
+	union X2N_E_RABs_ToBeReleased_ModReqItem_u {
+		struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_ModReqItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.c
new file mode 100644
index 0000000..44398cc
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-ModReqd.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_ModReqd_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqd_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P17,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqd_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqd),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqd, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd = {
+	"E-RABs-ToBeReleased-ModReqd",
+	"E-RABs-ToBeReleased-ModReqd",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_ModReqd_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqd_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqd_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.h
new file mode 100644
index 0000000..af76744
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqd.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_ModReqd_H_
+#define	_X2N_E_RABs_ToBeReleased_ModReqd_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-ModReqd */
+typedef struct X2N_E_RABs_ToBeReleased_ModReqd {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqd_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_ModReqd_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.c
new file mode 100644
index 0000000..be068ff
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-ModReqdItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItem, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P36,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqdItem),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItem, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem = {
+	"E-RABs-ToBeReleased-ModReqdItem",
+	"E-RABs-ToBeReleased-ModReqdItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.h
new file mode 100644
index 0000000..90b3617
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-ModReqdItem.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_ModReqdItem_H_
+#define	_X2N_E_RABs_ToBeReleased_ModReqdItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_Cause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-ModReqdItem */
+typedef struct X2N_E_RABs_ToBeReleased_ModReqdItem {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_Cause_t	 cause;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqdItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_ModReqdItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c
new file mode 100644
index 0000000..a8c6417
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P39,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer = {
+	"E-RABs-ToBeReleased-RelConfItem-SCG-Bearer",
+	"E-RABs-ToBeReleased-RelConfItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h
new file mode 100644
index 0000000..14374ef
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c
new file mode 100644
index 0000000..b61b328
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P40,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer = {
+	"E-RABs-ToBeReleased-RelConfItem-Split-Bearer",
+	"E-RABs-ToBeReleased-RelConfItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h
new file mode 100644
index 0000000..1253e7f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.c
new file mode 100644
index 0000000..54f16be
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelConfItem.h"
+
+#include "X2N_E-RABs-ToBeReleased-RelConfItem-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeReleased-RelConfItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_RelConfItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelConfItem *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem = {
+	"E-RABs-ToBeReleased-RelConfItem",
+	"E-RABs-ToBeReleased-RelConfItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_RelConfItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.h
new file mode 100644
index 0000000..389b79e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelConfItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelConfItem_H_
+#define	_X2N_E_RABs_ToBeReleased_RelConfItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_RelConfItem_PR {
+	X2N_E_RABs_ToBeReleased_RelConfItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_RelConfItem_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeReleased_RelConfItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_RelConfItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer;
+struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer;
+
+/* X2N_E-RABs-ToBeReleased-RelConfItem */
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItem {
+	X2N_E_RABs_ToBeReleased_RelConfItem_PR present;
+	union X2N_E_RABs_ToBeReleased_RelConfItem_u {
+		struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelConfItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c
new file mode 100644
index 0000000..7655dc2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, uL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P37,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer = {
+	"E-RABs-ToBeReleased-RelReqItem-SCG-Bearer",
+	"E-RABs-ToBeReleased-RelReqItem-SCG-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h
new file mode 100644
index 0000000..acef9fd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*uL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c
new file mode 100644
index 0000000..f43f6c1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer, dL_Forwarding_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P38,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-Forwarding-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer = {
+	"E-RABs-ToBeReleased-RelReqItem-Split-Bearer",
+	"E-RABs-ToBeReleased-RelReqItem-Split-Bearer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h
new file mode 100644
index 0000000..1cf9c98
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_
+#define	_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer */
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	struct X2N_GTPtunnelEndpoint	*dL_Forwarding_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.c
new file mode 100644
index 0000000..6ae64f4
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-RelReqItem.h"
+
+#include "X2N_E-RABs-ToBeReleased-RelReqItem-SCG-Bearer.h"
+#include "X2N_E-RABs-ToBeReleased-RelReqItem-Split-Bearer.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_RelReqItem_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem, choice.sCG_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCG-Bearer"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem, choice.split_Bearer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"split-Bearer"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelReqItem *)0)->present),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem = {
+	"E-RABs-ToBeReleased-RelReqItem",
+	"E-RABs-ToBeReleased-RelReqItem",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_RelReqItem_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.h
new file mode 100644
index 0000000..043060e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-RelReqItem.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_RelReqItem_H_
+#define	_X2N_E_RABs_ToBeReleased_RelReqItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_RelReqItem_PR {
+	X2N_E_RABs_ToBeReleased_RelReqItem_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_RelReqItem_PR_sCG_Bearer,
+	X2N_E_RABs_ToBeReleased_RelReqItem_PR_split_Bearer
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_RelReqItem_PR;
+
+/* Forward declarations */
+struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer;
+struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer;
+
+/* X2N_E-RABs-ToBeReleased-RelReqItem */
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItem {
+	X2N_E_RABs_ToBeReleased_RelReqItem_PR present;
+	union X2N_E_RABs_ToBeReleased_RelReqItem_u {
+		struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_Bearer	*sCG_Bearer;
+		struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_Bearer	*split_Bearer;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_RelReqItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..a972a36
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P89,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..a840478
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..ce8981c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P88,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..be64c2d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent {
+	struct X2N_GTPtunnelEndpoint	*uL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.c
new file mode 100644
index 0000000..b1dd0c5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P87,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item = {
+	"E-RABs-ToBeReleased-SgNBChaConf-Item",
+	"E-RABs-ToBeReleased-SgNBChaConf-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.h
new file mode 100644
index 0000000..0a9161e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeReleased-SgNBChaConf-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration {
+		X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBChaConf_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.c
new file mode 100644
index 0000000..552d707
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConfList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBChaConfList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConfList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P38,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConfList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConfList),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConfList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList = {
+	"E-RABs-ToBeReleased-SgNBChaConfList",
+	"E-RABs-ToBeReleased-SgNBChaConfList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBChaConfList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConfList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConfList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.h
new file mode 100644
index 0000000..de33ef7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBChaConfList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBChaConfList_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBChaConfList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBChaConfList */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConfList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConfList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBChaConfList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..5b63886
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P61,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..09dfc20
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..29ef9e0
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P60,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..36aef0d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent {
+	struct X2N_GTPtunnelEndpoint	*dL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*uL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.c
new file mode 100644
index 0000000..9813594
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P59,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item = {
+	"E-RABs-ToBeReleased-SgNBModReq-Item",
+	"E-RABs-ToBeReleased-SgNBModReq-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.h
new file mode 100644
index 0000000..972ecae
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReq-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration {
+		X2N_E_RABs_ToBeReleased_SgNBModReq_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReq_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReq_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.c
new file mode 100644
index 0000000..ba6fc70
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBModReq_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P26,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_List),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List = {
+	"E-RABs-ToBeReleased-SgNBModReq-List",
+	"E-RABs-ToBeReleased-SgNBModReq-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBModReq_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.h
new file mode 100644
index 0000000..ecdc8f2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReq-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReq_List_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReq_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReq-List */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBModReq_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReq_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.c
new file mode 100644
index 0000000..f54faf5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P71,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item = {
+	"E-RABs-ToBeReleased-SgNBModReqd-Item",
+	"E-RABs-ToBeReleased-SgNBModReqd-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.h
new file mode 100644
index 0000000..315c16a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_Cause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReqd-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReqd_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_Cause_t	 cause;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.c
new file mode 100644
index 0000000..c9f72a3
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBModReqdList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBModReqdList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqdList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P30,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqdList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqdList),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqdList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList = {
+	"E-RABs-ToBeReleased-SgNBModReqdList",
+	"E-RABs-ToBeReleased-SgNBModReqdList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBModReqdList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqdList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqdList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.h
new file mode 100644
index 0000000..c42c49c
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBModReqdList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBModReqdList_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBModReqdList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBModReqdList */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReqdList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReqdList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBModReqdList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..664ea6b
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P85,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..506d701
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..9c2f086
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P84,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..3d7fc49
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent {
+	struct X2N_GTPtunnelEndpoint	*uL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.c
new file mode 100644
index 0000000..762fc8a
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P83,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item = {
+	"E-RABs-ToBeReleased-SgNBRelConf-Item",
+	"E-RABs-ToBeReleased-SgNBRelConf-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.h
new file mode 100644
index 0000000..b30154f
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelConf-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration {
+		X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelConf_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.c
new file mode 100644
index 0000000..f5ae459
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConfList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelConfList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConfList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P36,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConfList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConfList),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConfList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList = {
+	"E-RABs-ToBeReleased-SgNBRelConfList",
+	"E-RABs-ToBeReleased-SgNBRelConfList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelConfList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConfList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConfList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.h
new file mode 100644
index 0000000..1eed694
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelConfList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelConfList_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelConfList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelConfList */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConfList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConfList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelConfList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c
new file mode 100644
index 0000000..3853e11
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P80,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tag2el_1,
+	1,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent = {
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent",
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h
new file mode 100644
index 0000000..330bb82
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent {
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c
new file mode 100644
index 0000000..122f03d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h"
+
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, uL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, dL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P79,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent = {
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent",
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h
new file mode 100644
index 0000000..6c279a7
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GTPtunnelEndpoint;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent {
+	struct X2N_GTPtunnelEndpoint	*uL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_GTPtunnelEndpoint	*dL_GTPtunnelEndpoint;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.c
new file mode 100644
index 0000000..3917acd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent.h"
+static asn_per_constraints_t asn_PER_type_X2N_resource_configuration_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_resource_configuration_4[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, choice.sgNBPDCPpresent),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPpresent"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, choice.sgNBPDCPnotpresent),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBPDCPnotpresent"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_resource_configuration_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sgNBPDCPpresent */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgNBPDCPnotpresent */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_resource_configuration_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration *)0)->present),
+	asn_MAP_X2N_resource_configuration_tag2el_4,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_resource_configuration_4 = {
+	"resource-configuration",
+	"resource-configuration",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_resource_configuration_constr_4, CHOICE_constraint },
+	asn_MBR_X2N_resource_configuration_4,
+	2,	/* Elements count */
+	&asn_SPC_X2N_resource_configuration_specs_4	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item, en_DC_ResourceConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EN_DC_ResourceConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"en-DC-ResourceConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item, resource_configuration),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_resource_configuration_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resource-configuration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P78,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* en-DC-ResourceConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* resource-configuration */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item = {
+	"E-RABs-ToBeReleased-SgNBRelReq-Item",
+	"E-RABs-ToBeReleased-SgNBRelReq-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.h
new file mode 100644
index 0000000..d33af18
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.h
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_EN-DC-ResourceConfiguration.h"
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_sgNBPDCPpresent,
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
+	/* Extensions may appear below */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReq-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration {
+		X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__resource_configuration_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReq_Item__X2N_resource_configuration_u {
+			struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
+			struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} resource_configuration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.c
new file mode 100644
index 0000000..7190f41
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelReqList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P33,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqList),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList = {
+	"E-RABs-ToBeReleased-SgNBRelReqList",
+	"E-RABs-ToBeReleased-SgNBRelReqList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelReqList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.h
new file mode 100644
index 0000000..e486686
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReqList_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReqList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReqList */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReqList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReqList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReqList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.c
new file mode 100644
index 0000000..6798986
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item, rlc_Mode_transferred),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rlc-Mode-transferred"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P82,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-Mode-transferred */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item = {
+	"E-RABs-ToBeReleased-SgNBRelReqd-Item",
+	"E-RABs-ToBeReleased-SgNBRelReqd-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.h
new file mode 100644
index 0000000..53948e2
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_RLCMode.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_RLCMode_t	 rlc_Mode_transferred;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.c b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.c
new file mode 100644
index 0000000..5f6bbf6
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqdList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P35,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqdList),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqdList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList = {
+	"E-RABs-ToBeReleased-SgNBRelReqdList",
+	"E-RABs-ToBeReleased-SgNBRelReqdList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.h b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.h
new file mode 100644
index 0000000..9cd8057
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeReleased-SgNBRelReqdList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_H_
+#define	_X2N_E_RABs_ToBeReleased_SgNBRelReqdList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeReleased-SgNBRelReqdList */
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReqdList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReqdList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeReleased_SgNBRelReqdList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.c b/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.c
new file mode 100644
index 0000000..6774a12
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeSetup-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_Item, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeSetup_Item, dL_Forwarding),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Forwarding"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_Item, uL_GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GTPtunnelEndpoint"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeSetup_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeSetup_Item_oms_1[] = { 2, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetup_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-Forwarding */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_Item),
+	offsetof(struct X2N_E_RABs_ToBeSetup_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetup_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeSetup_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_Item = {
+	"E-RABs-ToBeSetup-Item",
+	"E-RABs-ToBeSetup-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.h b/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.h
new file mode 100644
index 0000000..210543d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeSetup_Item_H_
+#define	_X2N_E_RABs_ToBeSetup_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeSetup-Item */
+typedef struct X2N_E_RABs_ToBeSetup_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_DL_Forwarding_t	*dL_Forwarding;	/* OPTIONAL */
+	X2N_GTPtunnelEndpoint_t	 uL_GTPtunnelEndpoint;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetup_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeSetup_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-List.c b/asn1c_defs/X2N_E-RABs-ToBeSetup-List.c
new file mode 100644
index 0000000..7a8f6bd
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeSetup-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeSetup_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_List_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_List),
+	offsetof(struct X2N_E_RABs_ToBeSetup_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_List = {
+	"E-RABs-ToBeSetup-List",
+	"E-RABs-ToBeSetup-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeSetup_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-List.h b/asn1c_defs/X2N_E-RABs-ToBeSetup-List.h
new file mode 100644
index 0000000..d61494d
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeSetup_List_H_
+#define	_X2N_E_RABs_ToBeSetup_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeSetup-List */
+typedef struct X2N_E_RABs_ToBeSetup_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetup_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeSetup_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeSetup_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.c b/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.c
new file mode 100644
index 0000000..09b4d2e
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeSetup-ListRetrieve.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeSetup_ListRetrieve_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ListRetrieve_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P21,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ListRetrieve_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_ListRetrieve),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ListRetrieve, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve = {
+	"E-RABs-ToBeSetup-ListRetrieve",
+	"E-RABs-ToBeSetup-ListRetrieve",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_E_RABs_ToBeSetup_ListRetrieve_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_ListRetrieve_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_ListRetrieve_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.h b/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.h
new file mode 100644
index 0000000..63f92d5
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetup-ListRetrieve.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeSetup_ListRetrieve_H_
+#define	_X2N_E_RABs_ToBeSetup_ListRetrieve_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_E-RABs-ToBeSetup-ListRetrieve */
+typedef struct X2N_E_RABs_ToBeSetup_ListRetrieve {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetup_ListRetrieve_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ListRetrieve_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ListRetrieve_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_E_RABs_ToBeSetup_ListRetrieve_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeSetup_ListRetrieve_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.c b/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.c
new file mode 100644
index 0000000..02f9c85
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_E-RABs-ToBeSetupRetrieve-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_Item, e_RAB_Level_QoS_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-Level-QoS-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_Item, bearerType),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BearerType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"bearerType"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P43,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-Level-QoS-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bearerType */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_Item_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeSetupRetrieve_Item),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_Item, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item = {
+	"E-RABs-ToBeSetupRetrieve-Item",
+	"E-RABs-ToBeSetupRetrieve-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.h b/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.h
new file mode 100644
index 0000000..840d3a1
--- /dev/null
+++ b/asn1c_defs/X2N_E-RABs-ToBeSetupRetrieve-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_E_RABs_ToBeSetupRetrieve_Item_H_
+#define	_X2N_E_RABs_ToBeSetupRetrieve_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_E-RAB-Level-QoS-Parameters.h"
+#include "X2N_BearerType.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_E-RABs-ToBeSetupRetrieve-Item */
+typedef struct X2N_E_RABs_ToBeSetupRetrieve_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
+	X2N_BearerType_t	*bearerType;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetupRetrieve_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_E_RABs_ToBeSetupRetrieve_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EARFCN.c b/asn1c_defs/X2N_EARFCN.c
new file mode 100644
index 0000000..409d28a
--- /dev/null
+++ b/asn1c_defs/X2N_EARFCN.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EARFCN.h"
+
+int
+X2N_EARFCN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_EARFCN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EARFCN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EARFCN = {
+	"EARFCN",
+	"EARFCN",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_EARFCN_tags_1,
+	sizeof(asn_DEF_X2N_EARFCN_tags_1)
+		/sizeof(asn_DEF_X2N_EARFCN_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EARFCN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EARFCN_tags_1)
+		/sizeof(asn_DEF_X2N_EARFCN_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EARFCN_constr_1, X2N_EARFCN_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_EARFCN.h b/asn1c_defs/X2N_EARFCN.h
new file mode 100644
index 0000000..e9f56ad
--- /dev/null
+++ b/asn1c_defs/X2N_EARFCN.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EARFCN_H_
+#define	_X2N_EARFCN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EARFCN */
+typedef long	 X2N_EARFCN_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_EARFCN_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EARFCN;
+asn_struct_free_f X2N_EARFCN_free;
+asn_struct_print_f X2N_EARFCN_print;
+asn_constr_check_f X2N_EARFCN_constraint;
+ber_type_decoder_f X2N_EARFCN_decode_ber;
+der_type_encoder_f X2N_EARFCN_encode_der;
+xer_type_decoder_f X2N_EARFCN_decode_xer;
+xer_type_encoder_f X2N_EARFCN_encode_xer;
+per_type_decoder_f X2N_EARFCN_decode_uper;
+per_type_encoder_f X2N_EARFCN_encode_uper;
+per_type_decoder_f X2N_EARFCN_decode_aper;
+per_type_encoder_f X2N_EARFCN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EARFCN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EARFCNExtension.c b/asn1c_defs/X2N_EARFCNExtension.c
new file mode 100644
index 0000000..ef4f30a
--- /dev/null
+++ b/asn1c_defs/X2N_EARFCNExtension.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EARFCNExtension.h"
+
+int
+X2N_EARFCNExtension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 65536 && value <= 262143)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_EARFCNExtension_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  18, -1,  65536,  262143 }	/* (65536..262143,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EARFCNExtension_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EARFCNExtension = {
+	"EARFCNExtension",
+	"EARFCNExtension",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_EARFCNExtension_tags_1,
+	sizeof(asn_DEF_X2N_EARFCNExtension_tags_1)
+		/sizeof(asn_DEF_X2N_EARFCNExtension_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EARFCNExtension_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EARFCNExtension_tags_1)
+		/sizeof(asn_DEF_X2N_EARFCNExtension_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EARFCNExtension_constr_1, X2N_EARFCNExtension_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_EARFCNExtension.h b/asn1c_defs/X2N_EARFCNExtension.h
new file mode 100644
index 0000000..372ea75
--- /dev/null
+++ b/asn1c_defs/X2N_EARFCNExtension.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EARFCNExtension_H_
+#define	_X2N_EARFCNExtension_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EARFCNExtension */
+typedef long	 X2N_EARFCNExtension_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EARFCNExtension;
+asn_struct_free_f X2N_EARFCNExtension_free;
+asn_struct_print_f X2N_EARFCNExtension_print;
+asn_constr_check_f X2N_EARFCNExtension_constraint;
+ber_type_decoder_f X2N_EARFCNExtension_decode_ber;
+der_type_encoder_f X2N_EARFCNExtension_encode_der;
+xer_type_decoder_f X2N_EARFCNExtension_decode_xer;
+xer_type_encoder_f X2N_EARFCNExtension_encode_xer;
+per_type_decoder_f X2N_EARFCNExtension_decode_uper;
+per_type_encoder_f X2N_EARFCNExtension_encode_uper;
+per_type_decoder_f X2N_EARFCNExtension_decode_aper;
+per_type_encoder_f X2N_EARFCNExtension_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EARFCNExtension_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ECGI.c b/asn1c_defs/X2N_ECGI.c
new file mode 100644
index 0000000..c56056c
--- /dev/null
+++ b/asn1c_defs/X2N_ECGI.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ECGI.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ECGI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ECGI, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ECGI, eUTRANcellIdentifier),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EUTRANCellIdentifier,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRANcellIdentifier"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ECGI, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P134,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ECGI_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ECGI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ECGI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eUTRANcellIdentifier */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ECGI_specs_1 = {
+	sizeof(struct X2N_ECGI),
+	offsetof(struct X2N_ECGI, _asn_ctx),
+	asn_MAP_X2N_ECGI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ECGI_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ECGI = {
+	"ECGI",
+	"ECGI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ECGI_tags_1,
+	sizeof(asn_DEF_X2N_ECGI_tags_1)
+		/sizeof(asn_DEF_X2N_ECGI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ECGI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ECGI_tags_1)
+		/sizeof(asn_DEF_X2N_ECGI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ECGI_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ECGI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ECGI.h b/asn1c_defs/X2N_ECGI.h
new file mode 100644
index 0000000..7e121e4
--- /dev/null
+++ b/asn1c_defs/X2N_ECGI.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ECGI_H_
+#define	_X2N_ECGI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_EUTRANCellIdentifier.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ECGI */
+typedef struct X2N_ECGI {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_EUTRANCellIdentifier_t	 eUTRANcellIdentifier;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ECGI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ECGI;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ECGI_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ECGI_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ECGI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EN-DC-ResourceConfiguration.c b/asn1c_defs/X2N_EN-DC-ResourceConfiguration.c
new file mode 100644
index 0000000..3f9842e
--- /dev/null
+++ b/asn1c_defs/X2N_EN-DC-ResourceConfiguration.c
@@ -0,0 +1,227 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EN-DC-ResourceConfiguration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_pDCPatSgNB_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_mCGresources_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_sCGresources_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_pDCPatSgNB_value2enum_2[] = {
+	{ 0,	7,	"present" },
+	{ 1,	11,	"not-present" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_pDCPatSgNB_enum2value_2[] = {
+	1,	/* not-present(1) */
+	0	/* present(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_pDCPatSgNB_specs_2 = {
+	asn_MAP_X2N_pDCPatSgNB_value2enum_2,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_pDCPatSgNB_enum2value_2,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_pDCPatSgNB_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_pDCPatSgNB_2 = {
+	"pDCPatSgNB",
+	"pDCPatSgNB",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_pDCPatSgNB_tags_2,
+	sizeof(asn_DEF_X2N_pDCPatSgNB_tags_2)
+		/sizeof(asn_DEF_X2N_pDCPatSgNB_tags_2[0]) - 1, /* 1 */
+	asn_DEF_X2N_pDCPatSgNB_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_pDCPatSgNB_tags_2)
+		/sizeof(asn_DEF_X2N_pDCPatSgNB_tags_2[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_pDCPatSgNB_constr_2, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_pDCPatSgNB_specs_2	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_mCGresources_value2enum_6[] = {
+	{ 0,	7,	"present" },
+	{ 1,	11,	"not-present" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_mCGresources_enum2value_6[] = {
+	1,	/* not-present(1) */
+	0	/* present(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_mCGresources_specs_6 = {
+	asn_MAP_X2N_mCGresources_value2enum_6,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_mCGresources_enum2value_6,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_mCGresources_tags_6[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_mCGresources_6 = {
+	"mCGresources",
+	"mCGresources",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_mCGresources_tags_6,
+	sizeof(asn_DEF_X2N_mCGresources_tags_6)
+		/sizeof(asn_DEF_X2N_mCGresources_tags_6[0]) - 1, /* 1 */
+	asn_DEF_X2N_mCGresources_tags_6,	/* Same as above */
+	sizeof(asn_DEF_X2N_mCGresources_tags_6)
+		/sizeof(asn_DEF_X2N_mCGresources_tags_6[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_mCGresources_constr_6, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_mCGresources_specs_6	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_sCGresources_value2enum_10[] = {
+	{ 0,	7,	"present" },
+	{ 1,	11,	"not-present" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_sCGresources_enum2value_10[] = {
+	1,	/* not-present(1) */
+	0	/* present(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_sCGresources_specs_10 = {
+	asn_MAP_X2N_sCGresources_value2enum_10,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_sCGresources_enum2value_10,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_sCGresources_tags_10[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_sCGresources_10 = {
+	"sCGresources",
+	"sCGresources",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_sCGresources_tags_10,
+	sizeof(asn_DEF_X2N_sCGresources_tags_10)
+		/sizeof(asn_DEF_X2N_sCGresources_tags_10[0]) - 1, /* 1 */
+	asn_DEF_X2N_sCGresources_tags_10,	/* Same as above */
+	sizeof(asn_DEF_X2N_sCGresources_tags_10)
+		/sizeof(asn_DEF_X2N_sCGresources_tags_10[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_sCGresources_constr_10, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_sCGresources_specs_10	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EN_DC_ResourceConfiguration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfiguration, pDCPatSgNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_pDCPatSgNB_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pDCPatSgNB"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfiguration, mCGresources),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_mCGresources_6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mCGresources"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfiguration, sCGresources),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_sCGresources_10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sCGresources"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_EN_DC_ResourceConfiguration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P137,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_EN_DC_ResourceConfiguration_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EN_DC_ResourceConfiguration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDCPatSgNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mCGresources */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sCGresources */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EN_DC_ResourceConfiguration_specs_1 = {
+	sizeof(struct X2N_EN_DC_ResourceConfiguration),
+	offsetof(struct X2N_EN_DC_ResourceConfiguration, _asn_ctx),
+	asn_MAP_X2N_EN_DC_ResourceConfiguration_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_EN_DC_ResourceConfiguration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EN_DC_ResourceConfiguration = {
+	"EN-DC-ResourceConfiguration",
+	"EN-DC-ResourceConfiguration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1,
+	sizeof(asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_EN_DC_ResourceConfiguration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EN_DC_ResourceConfiguration_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_EN_DC_ResourceConfiguration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EN-DC-ResourceConfiguration.h b/asn1c_defs/X2N_EN-DC-ResourceConfiguration.h
new file mode 100644
index 0000000..d5fd791
--- /dev/null
+++ b/asn1c_defs/X2N_EN-DC-ResourceConfiguration.h
@@ -0,0 +1,76 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EN_DC_ResourceConfiguration_H_
+#define	_X2N_EN_DC_ResourceConfiguration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_EN_DC_ResourceConfiguration__pDCPatSgNB {
+	X2N_EN_DC_ResourceConfiguration__pDCPatSgNB_present	= 0,
+	X2N_EN_DC_ResourceConfiguration__pDCPatSgNB_not_present	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_EN_DC_ResourceConfiguration__pDCPatSgNB;
+typedef enum X2N_EN_DC_ResourceConfiguration__mCGresources {
+	X2N_EN_DC_ResourceConfiguration__mCGresources_present	= 0,
+	X2N_EN_DC_ResourceConfiguration__mCGresources_not_present	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_EN_DC_ResourceConfiguration__mCGresources;
+typedef enum X2N_EN_DC_ResourceConfiguration__sCGresources {
+	X2N_EN_DC_ResourceConfiguration__sCGresources_present	= 0,
+	X2N_EN_DC_ResourceConfiguration__sCGresources_not_present	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_EN_DC_ResourceConfiguration__sCGresources;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_EN-DC-ResourceConfiguration */
+typedef struct X2N_EN_DC_ResourceConfiguration {
+	long	 pDCPatSgNB;
+	long	 mCGresources;
+	long	 sCGresources;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EN_DC_ResourceConfiguration_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_pDCPatSgNB_2;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_mCGresources_6;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_sCGresources_10;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EN_DC_ResourceConfiguration;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EN_DC_ResourceConfiguration_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EN_DC_ResourceConfiguration_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EN_DC_ResourceConfiguration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENB-ID.c b/asn1c_defs/X2N_ENB-ID.c
new file mode 100644
index 0000000..d3f8ee8
--- /dev/null
+++ b/asn1c_defs/X2N_ENB-ID.c
@@ -0,0 +1,226 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENB-ID.h"
+
+static int
+memb_X2N_macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_home_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 28)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_short_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 18)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 21)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_macro_eNB_ID_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  20,  20 }	/* (SIZE(20..20)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_home_eNB_ID_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  28,  28 }	/* (SIZE(28..28)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_short_Macro_eNB_ID_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  18,  18 }	/* (SIZE(18..18)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_long_Macro_eNB_ID_constr_6 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  21,  21 }	/* (SIZE(21..21)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ENB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ID, choice.macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_macro_eNB_ID_constr_2,  memb_X2N_macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"macro-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ID, choice.home_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_home_eNB_ID_constr_3,  memb_X2N_home_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"home-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ID, choice.short_Macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_short_Macro_eNB_ID_constr_5,  memb_X2N_short_Macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"short-Macro-eNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ID, choice.long_Macro_eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_long_Macro_eNB_ID_constr_6,  memb_X2N_long_Macro_eNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"long-Macro-eNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macro-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* home-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* short-Macro-eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* long-Macro-eNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_ENB_ID_specs_1 = {
+	sizeof(struct X2N_ENB_ID),
+	offsetof(struct X2N_ENB_ID, _asn_ctx),
+	offsetof(struct X2N_ENB_ID, present),
+	sizeof(((struct X2N_ENB_ID *)0)->present),
+	asn_MAP_X2N_ENB_ID_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ID = {
+	"ENB-ID",
+	"ENB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ENB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ENB_ID_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENB-ID.h b/asn1c_defs/X2N_ENB-ID.h
new file mode 100644
index 0000000..ab4c661
--- /dev/null
+++ b/asn1c_defs/X2N_ENB-ID.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENB_ID_H_
+#define	_X2N_ENB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ENB_ID_PR {
+	X2N_ENB_ID_PR_NOTHING,	/* No components present */
+	X2N_ENB_ID_PR_macro_eNB_ID,
+	X2N_ENB_ID_PR_home_eNB_ID,
+	/* Extensions may appear below */
+	X2N_ENB_ID_PR_short_Macro_eNB_ID,
+	X2N_ENB_ID_PR_long_Macro_eNB_ID
+} X2N_ENB_ID_PR;
+
+/* X2N_ENB-ID */
+typedef struct X2N_ENB_ID {
+	X2N_ENB_ID_PR present;
+	union X2N_ENB_ID_u {
+		BIT_STRING_t	 macro_eNB_ID;
+		BIT_STRING_t	 home_eNB_ID;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		BIT_STRING_t	 short_Macro_eNB_ID;
+		BIT_STRING_t	 long_Macro_eNB_ID;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ID;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_ENB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ID_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_ENB_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdate.c b/asn1c_defs/X2N_ENBConfigurationUpdate.c
new file mode 100644
index 0000000..ff8a755
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENBConfigurationUpdate.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P14,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdate_specs_1 = {
+	sizeof(struct X2N_ENBConfigurationUpdate),
+	offsetof(struct X2N_ENBConfigurationUpdate, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdate_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdate = {
+	"ENBConfigurationUpdate",
+	"ENBConfigurationUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdate_tags_1,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdate.h b/asn1c_defs/X2N_ENBConfigurationUpdate.h
new file mode 100644
index 0000000..656d02c
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENBConfigurationUpdate_H_
+#define	_X2N_ENBConfigurationUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENBConfigurationUpdate */
+typedef struct X2N_ENBConfigurationUpdate {
+	X2N_ProtocolIE_Container_8180P14_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENBConfigurationUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.c b/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.c
new file mode 100644
index 0000000..4c2241e
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENBConfigurationUpdateAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P15,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdateAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_specs_1 = {
+	sizeof(struct X2N_ENBConfigurationUpdateAcknowledge),
+	offsetof(struct X2N_ENBConfigurationUpdateAcknowledge, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdateAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge = {
+	"ENBConfigurationUpdateAcknowledge",
+	"ENBConfigurationUpdateAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.h b/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.h
new file mode 100644
index 0000000..6c31d99
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdateAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENBConfigurationUpdateAcknowledge_H_
+#define	_X2N_ENBConfigurationUpdateAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENBConfigurationUpdateAcknowledge */
+typedef struct X2N_ENBConfigurationUpdateAcknowledge {
+	X2N_ProtocolIE_Container_8180P15_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdateAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENBConfigurationUpdateAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdateFailure.c b/asn1c_defs/X2N_ENBConfigurationUpdateFailure.c
new file mode 100644
index 0000000..30ecc7d
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENBConfigurationUpdateFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P16,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdateFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateFailure_specs_1 = {
+	sizeof(struct X2N_ENBConfigurationUpdateFailure),
+	offsetof(struct X2N_ENBConfigurationUpdateFailure, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdateFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateFailure = {
+	"ENBConfigurationUpdateFailure",
+	"ENBConfigurationUpdateFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdateFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdateFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENBConfigurationUpdateFailure.h b/asn1c_defs/X2N_ENBConfigurationUpdateFailure.h
new file mode 100644
index 0000000..18a38ee
--- /dev/null
+++ b/asn1c_defs/X2N_ENBConfigurationUpdateFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENBConfigurationUpdateFailure_H_
+#define	_X2N_ENBConfigurationUpdateFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENBConfigurationUpdateFailure */
+typedef struct X2N_ENBConfigurationUpdateFailure {
+	X2N_ProtocolIE_Container_8180P16_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdateFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENBConfigurationUpdateFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCCellActivationFailure.c b/asn1c_defs/X2N_ENDCCellActivationFailure.c
new file mode 100644
index 0000000..68ce68b
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCCellActivationFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P86,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationFailure_specs_1 = {
+	sizeof(struct X2N_ENDCCellActivationFailure),
+	offsetof(struct X2N_ENDCCellActivationFailure, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationFailure = {
+	"ENDCCellActivationFailure",
+	"ENDCCellActivationFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationFailure_tags_1,
+	sizeof(asn_DEF_X2N_ENDCCellActivationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCCellActivationFailure.h b/asn1c_defs/X2N_ENDCCellActivationFailure.h
new file mode 100644
index 0000000..b80e80e
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCCellActivationFailure_H_
+#define	_X2N_ENDCCellActivationFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCCellActivationFailure */
+typedef struct X2N_ENDCCellActivationFailure {
+	X2N_ProtocolIE_Container_8180P86_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCCellActivationFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCCellActivationRequest.c b/asn1c_defs/X2N_ENDCCellActivationRequest.c
new file mode 100644
index 0000000..395676c
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCCellActivationRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P84,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationRequest_specs_1 = {
+	sizeof(struct X2N_ENDCCellActivationRequest),
+	offsetof(struct X2N_ENDCCellActivationRequest, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationRequest = {
+	"ENDCCellActivationRequest",
+	"ENDCCellActivationRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationRequest_tags_1,
+	sizeof(asn_DEF_X2N_ENDCCellActivationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCCellActivationRequest.h b/asn1c_defs/X2N_ENDCCellActivationRequest.h
new file mode 100644
index 0000000..cf30882
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCCellActivationRequest_H_
+#define	_X2N_ENDCCellActivationRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCCellActivationRequest */
+typedef struct X2N_ENDCCellActivationRequest {
+	X2N_ProtocolIE_Container_8180P84_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCCellActivationRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCCellActivationResponse.c b/asn1c_defs/X2N_ENDCCellActivationResponse.c
new file mode 100644
index 0000000..3a231e1
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCCellActivationResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P85,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationResponse_specs_1 = {
+	sizeof(struct X2N_ENDCCellActivationResponse),
+	offsetof(struct X2N_ENDCCellActivationResponse, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationResponse = {
+	"ENDCCellActivationResponse",
+	"ENDCCellActivationResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationResponse_tags_1,
+	sizeof(asn_DEF_X2N_ENDCCellActivationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCCellActivationResponse.h b/asn1c_defs/X2N_ENDCCellActivationResponse.h
new file mode 100644
index 0000000..0a543ce
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCCellActivationResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCCellActivationResponse_H_
+#define	_X2N_ENDCCellActivationResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCCellActivationResponse */
+typedef struct X2N_ENDCCellActivationResponse {
+	X2N_ProtocolIE_Container_8180P85_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCCellActivationResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdate.c b/asn1c_defs/X2N_ENDCConfigurationUpdate.c
new file mode 100644
index 0000000..9a755aa
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCConfigurationUpdate.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P77,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdate_specs_1 = {
+	sizeof(struct X2N_ENDCConfigurationUpdate),
+	offsetof(struct X2N_ENDCConfigurationUpdate, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdate_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdate = {
+	"ENDCConfigurationUpdate",
+	"ENDCConfigurationUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdate_tags_1,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdate.h b/asn1c_defs/X2N_ENDCConfigurationUpdate.h
new file mode 100644
index 0000000..12d5f9e
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCConfigurationUpdate_H_
+#define	_X2N_ENDCConfigurationUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCConfigurationUpdate */
+typedef struct X2N_ENDCConfigurationUpdate {
+	X2N_ProtocolIE_Container_8180P77_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCConfigurationUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.c b/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.c
new file mode 100644
index 0000000..46db13f
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCConfigurationUpdateAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P80,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdateAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_specs_1 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateAcknowledge),
+	offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdateAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge = {
+	"ENDCConfigurationUpdateAcknowledge",
+	"ENDCConfigurationUpdateAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.h b/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.h
new file mode 100644
index 0000000..6c18ed6
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdateAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCConfigurationUpdateAcknowledge_H_
+#define	_X2N_ENDCConfigurationUpdateAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCConfigurationUpdateAcknowledge */
+typedef struct X2N_ENDCConfigurationUpdateAcknowledge {
+	X2N_ProtocolIE_Container_8180P80_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdateAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCConfigurationUpdateAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.c b/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.c
new file mode 100644
index 0000000..4a372cf
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCConfigurationUpdateFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P83,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdateFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateFailure_specs_1 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateFailure),
+	offsetof(struct X2N_ENDCConfigurationUpdateFailure, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdateFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateFailure = {
+	"ENDCConfigurationUpdateFailure",
+	"ENDCConfigurationUpdateFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdateFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdateFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.h b/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.h
new file mode 100644
index 0000000..20dace3
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCConfigurationUpdateFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCConfigurationUpdateFailure_H_
+#define	_X2N_ENDCConfigurationUpdateFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCConfigurationUpdateFailure */
+typedef struct X2N_ENDCConfigurationUpdateFailure {
+	X2N_ProtocolIE_Container_8180P83_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdateFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCConfigurationUpdateFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCPartialResetConfirm.c b/asn1c_defs/X2N_ENDCPartialResetConfirm.c
new file mode 100644
index 0000000..2ba910e
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCPartialResetConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCPartialResetConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P90,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCPartialResetConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCPartialResetConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetConfirm_specs_1 = {
+	sizeof(struct X2N_ENDCPartialResetConfirm),
+	offsetof(struct X2N_ENDCPartialResetConfirm, _asn_ctx),
+	asn_MAP_X2N_ENDCPartialResetConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetConfirm = {
+	"ENDCPartialResetConfirm",
+	"ENDCPartialResetConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCPartialResetConfirm_tags_1,
+	sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCPartialResetConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCPartialResetConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCPartialResetConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCPartialResetConfirm.h b/asn1c_defs/X2N_ENDCPartialResetConfirm.h
new file mode 100644
index 0000000..acc62c9
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCPartialResetConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCPartialResetConfirm_H_
+#define	_X2N_ENDCPartialResetConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCPartialResetConfirm */
+typedef struct X2N_ENDCPartialResetConfirm {
+	X2N_ProtocolIE_Container_8180P90_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCPartialResetConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCPartialResetConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCPartialResetRequired.c b/asn1c_defs/X2N_ENDCPartialResetRequired.c
new file mode 100644
index 0000000..74305c9
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCPartialResetRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCPartialResetRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P89,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCPartialResetRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCPartialResetRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetRequired_specs_1 = {
+	sizeof(struct X2N_ENDCPartialResetRequired),
+	offsetof(struct X2N_ENDCPartialResetRequired, _asn_ctx),
+	asn_MAP_X2N_ENDCPartialResetRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetRequired = {
+	"ENDCPartialResetRequired",
+	"ENDCPartialResetRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCPartialResetRequired_tags_1,
+	sizeof(asn_DEF_X2N_ENDCPartialResetRequired_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCPartialResetRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCPartialResetRequired_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCPartialResetRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCPartialResetRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCPartialResetRequired.h b/asn1c_defs/X2N_ENDCPartialResetRequired.h
new file mode 100644
index 0000000..01882da
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCPartialResetRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCPartialResetRequired_H_
+#define	_X2N_ENDCPartialResetRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCPartialResetRequired */
+typedef struct X2N_ENDCPartialResetRequired {
+	X2N_ProtocolIE_Container_8180P89_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCPartialResetRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCPartialResetRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2RemovalFailure.c b/asn1c_defs/X2N_ENDCX2RemovalFailure.c
new file mode 100644
index 0000000..b6d0262
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2RemovalFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P103,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalFailure_specs_1 = {
+	sizeof(struct X2N_ENDCX2RemovalFailure),
+	offsetof(struct X2N_ENDCX2RemovalFailure, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalFailure = {
+	"ENDCX2RemovalFailure",
+	"ENDCX2RemovalFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalFailure_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2RemovalFailure.h b/asn1c_defs/X2N_ENDCX2RemovalFailure.h
new file mode 100644
index 0000000..16d1967
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2RemovalFailure_H_
+#define	_X2N_ENDCX2RemovalFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2RemovalFailure */
+typedef struct X2N_ENDCX2RemovalFailure {
+	X2N_ProtocolIE_Container_8180P103_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2RemovalFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2RemovalRequest.c b/asn1c_defs/X2N_ENDCX2RemovalRequest.c
new file mode 100644
index 0000000..8bb64ee
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2RemovalRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P97,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalRequest_specs_1 = {
+	sizeof(struct X2N_ENDCX2RemovalRequest),
+	offsetof(struct X2N_ENDCX2RemovalRequest, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalRequest = {
+	"ENDCX2RemovalRequest",
+	"ENDCX2RemovalRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalRequest_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2RemovalRequest.h b/asn1c_defs/X2N_ENDCX2RemovalRequest.h
new file mode 100644
index 0000000..15979b2
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2RemovalRequest_H_
+#define	_X2N_ENDCX2RemovalRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2RemovalRequest */
+typedef struct X2N_ENDCX2RemovalRequest {
+	X2N_ProtocolIE_Container_8180P97_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2RemovalRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2RemovalResponse.c b/asn1c_defs/X2N_ENDCX2RemovalResponse.c
new file mode 100644
index 0000000..8dd44d8
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2RemovalResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P100,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalResponse_specs_1 = {
+	sizeof(struct X2N_ENDCX2RemovalResponse),
+	offsetof(struct X2N_ENDCX2RemovalResponse, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalResponse = {
+	"ENDCX2RemovalResponse",
+	"ENDCX2RemovalResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalResponse_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2RemovalResponse.h b/asn1c_defs/X2N_ENDCX2RemovalResponse.h
new file mode 100644
index 0000000..b062381
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2RemovalResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2RemovalResponse_H_
+#define	_X2N_ENDCX2RemovalResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2RemovalResponse */
+typedef struct X2N_ENDCX2RemovalResponse {
+	X2N_ProtocolIE_Container_8180P100_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2RemovalResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2SetupFailure.c b/asn1c_defs/X2N_ENDCX2SetupFailure.c
new file mode 100644
index 0000000..c9a629e
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2SetupFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P76,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupFailure_specs_1 = {
+	sizeof(struct X2N_ENDCX2SetupFailure),
+	offsetof(struct X2N_ENDCX2SetupFailure, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupFailure = {
+	"ENDCX2SetupFailure",
+	"ENDCX2SetupFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupFailure_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2SetupFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2SetupFailure.h b/asn1c_defs/X2N_ENDCX2SetupFailure.h
new file mode 100644
index 0000000..7bd6496
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2SetupFailure_H_
+#define	_X2N_ENDCX2SetupFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2SetupFailure */
+typedef struct X2N_ENDCX2SetupFailure {
+	X2N_ProtocolIE_Container_8180P76_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2SetupFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2SetupRequest.c b/asn1c_defs/X2N_ENDCX2SetupRequest.c
new file mode 100644
index 0000000..77b3e3f
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2SetupRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P70,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupRequest_specs_1 = {
+	sizeof(struct X2N_ENDCX2SetupRequest),
+	offsetof(struct X2N_ENDCX2SetupRequest, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupRequest = {
+	"ENDCX2SetupRequest",
+	"ENDCX2SetupRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupRequest_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2SetupRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2SetupRequest.h b/asn1c_defs/X2N_ENDCX2SetupRequest.h
new file mode 100644
index 0000000..ea8fc51
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2SetupRequest_H_
+#define	_X2N_ENDCX2SetupRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2SetupRequest */
+typedef struct X2N_ENDCX2SetupRequest {
+	X2N_ProtocolIE_Container_8180P70_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2SetupRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ENDCX2SetupResponse.c b/asn1c_defs/X2N_ENDCX2SetupResponse.c
new file mode 100644
index 0000000..315a9cc
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ENDCX2SetupResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P73,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupResponse_specs_1 = {
+	sizeof(struct X2N_ENDCX2SetupResponse),
+	offsetof(struct X2N_ENDCX2SetupResponse, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupResponse = {
+	"ENDCX2SetupResponse",
+	"ENDCX2SetupResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupResponse_tags_1,
+	sizeof(asn_DEF_X2N_ENDCX2SetupResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ENDCX2SetupResponse.h b/asn1c_defs/X2N_ENDCX2SetupResponse.h
new file mode 100644
index 0000000..81fa7b3
--- /dev/null
+++ b/asn1c_defs/X2N_ENDCX2SetupResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ENDCX2SetupResponse_H_
+#define	_X2N_ENDCX2SetupResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ENDCX2SetupResponse */
+typedef struct X2N_ENDCX2SetupResponse {
+	X2N_ProtocolIE_Container_8180P73_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ENDCX2SetupResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EPLMNs.c b/asn1c_defs/X2N_EPLMNs.c
new file mode 100644
index 0000000..ceb2b2c
--- /dev/null
+++ b/asn1c_defs/X2N_EPLMNs.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EPLMNs.h"
+
+asn_per_constraints_t asn_PER_type_X2N_EPLMNs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  15 }	/* (SIZE(1..15)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_EPLMNs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EPLMNs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_EPLMNs_specs_1 = {
+	sizeof(struct X2N_EPLMNs),
+	offsetof(struct X2N_EPLMNs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EPLMNs = {
+	"EPLMNs",
+	"EPLMNs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_EPLMNs_tags_1,
+	sizeof(asn_DEF_X2N_EPLMNs_tags_1)
+		/sizeof(asn_DEF_X2N_EPLMNs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EPLMNs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EPLMNs_tags_1)
+		/sizeof(asn_DEF_X2N_EPLMNs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EPLMNs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_EPLMNs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_EPLMNs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EPLMNs.h b/asn1c_defs/X2N_EPLMNs.h
new file mode 100644
index 0000000..2bca2d6
--- /dev/null
+++ b/asn1c_defs/X2N_EPLMNs.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EPLMNs_H_
+#define	_X2N_EPLMNs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EPLMNs */
+typedef struct X2N_EPLMNs {
+	A_SEQUENCE_OF(X2N_PLMN_Identity_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EPLMNs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EPLMNs;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_EPLMNs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EPLMNs_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_EPLMNs_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EPLMNs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ERABActivityNotifyItem.c b/asn1c_defs/X2N_ERABActivityNotifyItem.c
new file mode 100644
index 0000000..cc6c3b4
--- /dev/null
+++ b/asn1c_defs/X2N_ERABActivityNotifyItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ERABActivityNotifyItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ERABActivityNotifyItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ERABActivityNotifyItem, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ERABActivityNotifyItem, activityReport),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UserPlaneTrafficActivityReport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"activityReport"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ERABActivityNotifyItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P138,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ERABActivityNotifyItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ERABActivityNotifyItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ERABActivityNotifyItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* activityReport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ERABActivityNotifyItem_specs_1 = {
+	sizeof(struct X2N_ERABActivityNotifyItem),
+	offsetof(struct X2N_ERABActivityNotifyItem, _asn_ctx),
+	asn_MAP_X2N_ERABActivityNotifyItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ERABActivityNotifyItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItem = {
+	"ERABActivityNotifyItem",
+	"ERABActivityNotifyItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ERABActivityNotifyItem_tags_1,
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItem_tags_1)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ERABActivityNotifyItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItem_tags_1)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ERABActivityNotifyItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ERABActivityNotifyItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ERABActivityNotifyItem.h b/asn1c_defs/X2N_ERABActivityNotifyItem.h
new file mode 100644
index 0000000..35130c5
--- /dev/null
+++ b/asn1c_defs/X2N_ERABActivityNotifyItem.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ERABActivityNotifyItem_H_
+#define	_X2N_ERABActivityNotifyItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include "X2N_UserPlaneTrafficActivityReport.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ERABActivityNotifyItem */
+typedef struct X2N_ERABActivityNotifyItem {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	X2N_UserPlaneTrafficActivityReport_t	 activityReport;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ERABActivityNotifyItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ERABActivityNotifyItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ERABActivityNotifyItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ERABActivityNotifyItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ERABActivityNotifyItemList.c b/asn1c_defs/X2N_ERABActivityNotifyItemList.c
new file mode 100644
index 0000000..5472f0d
--- /dev/null
+++ b/asn1c_defs/X2N_ERABActivityNotifyItemList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ERABActivityNotifyItemList.h"
+
+#include "X2N_ERABActivityNotifyItem.h"
+static asn_per_constraints_t asn_PER_type_X2N_ERABActivityNotifyItemList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ERABActivityNotifyItemList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ERABActivityNotifyItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ERABActivityNotifyItemList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ERABActivityNotifyItemList_specs_1 = {
+	sizeof(struct X2N_ERABActivityNotifyItemList),
+	offsetof(struct X2N_ERABActivityNotifyItemList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItemList = {
+	"ERABActivityNotifyItemList",
+	"ERABActivityNotifyItemList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ERABActivityNotifyItemList_tags_1,
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItemList_tags_1)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItemList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ERABActivityNotifyItemList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItemList_tags_1)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItemList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ERABActivityNotifyItemList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ERABActivityNotifyItemList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ERABActivityNotifyItemList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ERABActivityNotifyItemList.h b/asn1c_defs/X2N_ERABActivityNotifyItemList.h
new file mode 100644
index 0000000..8b2dd99
--- /dev/null
+++ b/asn1c_defs/X2N_ERABActivityNotifyItemList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ERABActivityNotifyItemList_H_
+#define	_X2N_ERABActivityNotifyItemList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ERABActivityNotifyItem;
+
+/* X2N_ERABActivityNotifyItemList */
+typedef struct X2N_ERABActivityNotifyItemList {
+	A_SEQUENCE_OF(struct X2N_ERABActivityNotifyItem) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ERABActivityNotifyItemList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItemList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ERABActivityNotifyItemList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EUTRA-Mode-Info.c b/asn1c_defs/X2N_EUTRA-Mode-Info.c
new file mode 100644
index 0000000..84a52d9
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRA-Mode-Info.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EUTRA-Mode-Info.h"
+
+#include "X2N_FDD-Info.h"
+#include "X2N_TDD-Info.h"
+asn_per_constraints_t asn_PER_type_X2N_EUTRA_Mode_Info_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_EUTRA_Mode_Info_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_EUTRA_Mode_Info, choice.fDD),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FDD_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fDD"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_EUTRA_Mode_Info, choice.tDD),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TDD_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tDD"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EUTRA_Mode_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fDD */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tDD */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_EUTRA_Mode_Info_specs_1 = {
+	sizeof(struct X2N_EUTRA_Mode_Info),
+	offsetof(struct X2N_EUTRA_Mode_Info, _asn_ctx),
+	offsetof(struct X2N_EUTRA_Mode_Info, present),
+	sizeof(((struct X2N_EUTRA_Mode_Info *)0)->present),
+	asn_MAP_X2N_EUTRA_Mode_Info_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRA_Mode_Info = {
+	"EUTRA-Mode-Info",
+	"EUTRA-Mode-Info",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_EUTRA_Mode_Info_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_EUTRA_Mode_Info_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_EUTRA_Mode_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EUTRA-Mode-Info.h b/asn1c_defs/X2N_EUTRA-Mode-Info.h
new file mode 100644
index 0000000..544a325
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRA-Mode-Info.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EUTRA_Mode_Info_H_
+#define	_X2N_EUTRA_Mode_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_EUTRA_Mode_Info_PR {
+	X2N_EUTRA_Mode_Info_PR_NOTHING,	/* No components present */
+	X2N_EUTRA_Mode_Info_PR_fDD,
+	X2N_EUTRA_Mode_Info_PR_tDD
+	/* Extensions may appear below */
+	
+} X2N_EUTRA_Mode_Info_PR;
+
+/* Forward declarations */
+struct X2N_FDD_Info;
+struct X2N_TDD_Info;
+
+/* X2N_EUTRA-Mode-Info */
+typedef struct X2N_EUTRA_Mode_Info {
+	X2N_EUTRA_Mode_Info_PR present;
+	union X2N_EUTRA_Mode_Info_u {
+		struct X2N_FDD_Info	*fDD;
+		struct X2N_TDD_Info	*tDD;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EUTRA_Mode_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRA_Mode_Info;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_EUTRA_Mode_Info_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EUTRA_Mode_Info_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_EUTRA_Mode_Info_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EUTRA_Mode_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EUTRANCellIdentifier.c b/asn1c_defs/X2N_EUTRANCellIdentifier.c
new file mode 100644
index 0000000..0a8bb12
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANCellIdentifier.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EUTRANCellIdentifier.h"
+
+int
+X2N_EUTRANCellIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 28)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_EUTRANCellIdentifier_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  28,  28 }	/* (SIZE(28..28)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANCellIdentifier_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANCellIdentifier = {
+	"EUTRANCellIdentifier",
+	"EUTRANCellIdentifier",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_EUTRANCellIdentifier_tags_1,
+	sizeof(asn_DEF_X2N_EUTRANCellIdentifier_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANCellIdentifier_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EUTRANCellIdentifier_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANCellIdentifier_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANCellIdentifier_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EUTRANCellIdentifier_constr_1, X2N_EUTRANCellIdentifier_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EUTRANCellIdentifier.h b/asn1c_defs/X2N_EUTRANCellIdentifier.h
new file mode 100644
index 0000000..ad6dab0
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANCellIdentifier.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EUTRANCellIdentifier_H_
+#define	_X2N_EUTRANCellIdentifier_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EUTRANCellIdentifier */
+typedef BIT_STRING_t	 X2N_EUTRANCellIdentifier_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_EUTRANCellIdentifier_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANCellIdentifier;
+asn_struct_free_f X2N_EUTRANCellIdentifier_free;
+asn_struct_print_f X2N_EUTRANCellIdentifier_print;
+asn_constr_check_f X2N_EUTRANCellIdentifier_constraint;
+ber_type_decoder_f X2N_EUTRANCellIdentifier_decode_ber;
+der_type_encoder_f X2N_EUTRANCellIdentifier_encode_der;
+xer_type_decoder_f X2N_EUTRANCellIdentifier_decode_xer;
+xer_type_encoder_f X2N_EUTRANCellIdentifier_encode_xer;
+per_type_decoder_f X2N_EUTRANCellIdentifier_decode_uper;
+per_type_encoder_f X2N_EUTRANCellIdentifier_encode_uper;
+per_type_decoder_f X2N_EUTRANCellIdentifier_decode_aper;
+per_type_encoder_f X2N_EUTRANCellIdentifier_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EUTRANCellIdentifier_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.c b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.c
new file mode 100644
index 0000000..1b6743d
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EUTRANRCellResourceCoordinationRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P91,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EUTRANRCellResourceCoordinationRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_specs_1 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationRequest),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest, _asn_ctx),
+	asn_MAP_X2N_EUTRANRCellResourceCoordinationRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest = {
+	"EUTRANRCellResourceCoordinationRequest",
+	"EUTRANRCellResourceCoordinationRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1,
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.h b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.h
new file mode 100644
index 0000000..9fc0626
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EUTRANRCellResourceCoordinationRequest_H_
+#define	_X2N_EUTRANRCellResourceCoordinationRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EUTRANRCellResourceCoordinationRequest */
+typedef struct X2N_EUTRANRCellResourceCoordinationRequest {
+	X2N_ProtocolIE_Container_8180P91_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EUTRANRCellResourceCoordinationRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EUTRANRCellResourceCoordinationRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.c b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.c
new file mode 100644
index 0000000..a8d2a37
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EUTRANRCellResourceCoordinationResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P94,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EUTRANRCellResourceCoordinationResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_specs_1 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationResponse),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse, _asn_ctx),
+	asn_MAP_X2N_EUTRANRCellResourceCoordinationResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse = {
+	"EUTRANRCellResourceCoordinationResponse",
+	"EUTRANRCellResourceCoordinationResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1,
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.h b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.h
new file mode 100644
index 0000000..78d16b6
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANRCellResourceCoordinationResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EUTRANRCellResourceCoordinationResponse_H_
+#define	_X2N_EUTRANRCellResourceCoordinationResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EUTRANRCellResourceCoordinationResponse */
+typedef struct X2N_EUTRANRCellResourceCoordinationResponse {
+	X2N_ProtocolIE_Container_8180P94_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EUTRANRCellResourceCoordinationResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EUTRANRCellResourceCoordinationResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EUTRANTraceID.c b/asn1c_defs/X2N_EUTRANTraceID.c
new file mode 100644
index 0000000..8d3f3bf
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANTraceID.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EUTRANTraceID.h"
+
+int
+X2N_EUTRANTraceID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_EUTRANTraceID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANTraceID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANTraceID = {
+	"EUTRANTraceID",
+	"EUTRANTraceID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_EUTRANTraceID_tags_1,
+	sizeof(asn_DEF_X2N_EUTRANTraceID_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANTraceID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EUTRANTraceID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANTraceID_tags_1)
+		/sizeof(asn_DEF_X2N_EUTRANTraceID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EUTRANTraceID_constr_1, X2N_EUTRANTraceID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EUTRANTraceID.h b/asn1c_defs/X2N_EUTRANTraceID.h
new file mode 100644
index 0000000..88a6c48
--- /dev/null
+++ b/asn1c_defs/X2N_EUTRANTraceID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EUTRANTraceID_H_
+#define	_X2N_EUTRANTraceID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EUTRANTraceID */
+typedef OCTET_STRING_t	 X2N_EUTRANTraceID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_EUTRANTraceID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANTraceID;
+asn_struct_free_f X2N_EUTRANTraceID_free;
+asn_struct_print_f X2N_EUTRANTraceID_print;
+asn_constr_check_f X2N_EUTRANTraceID_constraint;
+ber_type_decoder_f X2N_EUTRANTraceID_decode_ber;
+der_type_encoder_f X2N_EUTRANTraceID_encode_der;
+xer_type_decoder_f X2N_EUTRANTraceID_decode_xer;
+xer_type_encoder_f X2N_EUTRANTraceID_encode_xer;
+per_type_decoder_f X2N_EUTRANTraceID_decode_uper;
+per_type_encoder_f X2N_EUTRANTraceID_encode_uper;
+per_type_decoder_f X2N_EUTRANTraceID_decode_aper;
+per_type_encoder_f X2N_EUTRANTraceID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EUTRANTraceID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EncryptionAlgorithms.c b/asn1c_defs/X2N_EncryptionAlgorithms.c
new file mode 100644
index 0000000..a6294b6
--- /dev/null
+++ b/asn1c_defs/X2N_EncryptionAlgorithms.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EncryptionAlgorithms.h"
+
+int
+X2N_EncryptionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_EncryptionAlgorithms_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  16,  16 }	/* (SIZE(16..16,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EncryptionAlgorithms_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EncryptionAlgorithms = {
+	"EncryptionAlgorithms",
+	"EncryptionAlgorithms",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_EncryptionAlgorithms_tags_1,
+	sizeof(asn_DEF_X2N_EncryptionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_EncryptionAlgorithms_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EncryptionAlgorithms_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EncryptionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_EncryptionAlgorithms_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EncryptionAlgorithms_constr_1, X2N_EncryptionAlgorithms_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EncryptionAlgorithms.h b/asn1c_defs/X2N_EncryptionAlgorithms.h
new file mode 100644
index 0000000..244f3a2
--- /dev/null
+++ b/asn1c_defs/X2N_EncryptionAlgorithms.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EncryptionAlgorithms_H_
+#define	_X2N_EncryptionAlgorithms_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_EncryptionAlgorithms */
+typedef BIT_STRING_t	 X2N_EncryptionAlgorithms_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_EncryptionAlgorithms_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EncryptionAlgorithms;
+asn_struct_free_f X2N_EncryptionAlgorithms_free;
+asn_struct_print_f X2N_EncryptionAlgorithms_print;
+asn_constr_check_f X2N_EncryptionAlgorithms_constraint;
+ber_type_decoder_f X2N_EncryptionAlgorithms_decode_ber;
+der_type_encoder_f X2N_EncryptionAlgorithms_encode_der;
+xer_type_decoder_f X2N_EncryptionAlgorithms_decode_xer;
+xer_type_encoder_f X2N_EncryptionAlgorithms_encode_xer;
+per_type_decoder_f X2N_EncryptionAlgorithms_decode_uper;
+per_type_encoder_f X2N_EncryptionAlgorithms_encode_uper;
+per_type_decoder_f X2N_EncryptionAlgorithms_decode_aper;
+per_type_encoder_f X2N_EncryptionAlgorithms_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EncryptionAlgorithms_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EnhancedRNTP.c b/asn1c_defs/X2N_EnhancedRNTP.c
new file mode 100644
index 0000000..8cc1704
--- /dev/null
+++ b/asn1c_defs/X2N_EnhancedRNTP.c
@@ -0,0 +1,120 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EnhancedRNTP.h"
+
+#include "X2N_EnhancedRNTPStartTime.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_enhancedRNTPBitmap_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 12 && size <= 8800)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_enhancedRNTPBitmap_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  14,  14,  12,  8800 }	/* (SIZE(12..8800,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTP_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTP, enhancedRNTPBitmap),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_enhancedRNTPBitmap_constr_2,  memb_X2N_enhancedRNTPBitmap_constraint_1 },
+		0, 0, /* No default value */
+		"enhancedRNTPBitmap"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTP, rNTP_High_Power_Threshold),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RNTP_Threshold,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rNTP-High-Power-Threshold"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_EnhancedRNTP, enhancedRNTPStartTime),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EnhancedRNTPStartTime,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"enhancedRNTPStartTime"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_EnhancedRNTP, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P135,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_EnhancedRNTP_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_EnhancedRNTP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EnhancedRNTP_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enhancedRNTPBitmap */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rNTP-High-Power-Threshold */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* enhancedRNTPStartTime */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTP_specs_1 = {
+	sizeof(struct X2N_EnhancedRNTP),
+	offsetof(struct X2N_EnhancedRNTP, _asn_ctx),
+	asn_MAP_X2N_EnhancedRNTP_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_EnhancedRNTP_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTP = {
+	"EnhancedRNTP",
+	"EnhancedRNTP",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EnhancedRNTP_tags_1,
+	sizeof(asn_DEF_X2N_EnhancedRNTP_tags_1)
+		/sizeof(asn_DEF_X2N_EnhancedRNTP_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EnhancedRNTP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EnhancedRNTP_tags_1)
+		/sizeof(asn_DEF_X2N_EnhancedRNTP_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EnhancedRNTP_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_EnhancedRNTP_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EnhancedRNTP.h b/asn1c_defs/X2N_EnhancedRNTP.h
new file mode 100644
index 0000000..b92b0b2
--- /dev/null
+++ b/asn1c_defs/X2N_EnhancedRNTP.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EnhancedRNTP_H_
+#define	_X2N_EnhancedRNTP_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include "X2N_RNTP-Threshold.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_EnhancedRNTPStartTime;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_EnhancedRNTP */
+typedef struct X2N_EnhancedRNTP {
+	BIT_STRING_t	 enhancedRNTPBitmap;
+	X2N_RNTP_Threshold_t	 rNTP_High_Power_Threshold;
+	struct X2N_EnhancedRNTPStartTime	*enhancedRNTPStartTime;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EnhancedRNTP_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTP;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EnhancedRNTP_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EnhancedRNTPStartTime.c b/asn1c_defs/X2N_EnhancedRNTPStartTime.c
new file mode 100644
index 0000000..558af87
--- /dev/null
+++ b/asn1c_defs/X2N_EnhancedRNTPStartTime.c
@@ -0,0 +1,133 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EnhancedRNTPStartTime.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_startSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1023)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_startSubframeNumber_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 9)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_startSFN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  0,  1023 }	/* (0..1023,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_startSubframeNumber_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  9 }	/* (0..9,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTPStartTime_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTPStartTime, startSFN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_startSFN_constr_2,  memb_X2N_startSFN_constraint_1 },
+		0, 0, /* No default value */
+		"startSFN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTPStartTime, startSubframeNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_startSubframeNumber_constr_3,  memb_X2N_startSubframeNumber_constraint_1 },
+		0, 0, /* No default value */
+		"startSubframeNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_EnhancedRNTPStartTime, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P136,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_EnhancedRNTPStartTime_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_EnhancedRNTPStartTime_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EnhancedRNTPStartTime_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startSFN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* startSubframeNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTPStartTime_specs_1 = {
+	sizeof(struct X2N_EnhancedRNTPStartTime),
+	offsetof(struct X2N_EnhancedRNTPStartTime, _asn_ctx),
+	asn_MAP_X2N_EnhancedRNTPStartTime_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_EnhancedRNTPStartTime_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTPStartTime = {
+	"EnhancedRNTPStartTime",
+	"EnhancedRNTPStartTime",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EnhancedRNTPStartTime_tags_1,
+	sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_tags_1)
+		/sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EnhancedRNTPStartTime_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_tags_1)
+		/sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EnhancedRNTPStartTime_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EnhancedRNTPStartTime_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EnhancedRNTPStartTime.h b/asn1c_defs/X2N_EnhancedRNTPStartTime.h
new file mode 100644
index 0000000..13c01a5
--- /dev/null
+++ b/asn1c_defs/X2N_EnhancedRNTPStartTime.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EnhancedRNTPStartTime_H_
+#define	_X2N_EnhancedRNTPStartTime_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_EnhancedRNTPStartTime */
+typedef struct X2N_EnhancedRNTPStartTime {
+	long	 startSFN;
+	long	 startSubframeNumber;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EnhancedRNTPStartTime_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTPStartTime;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTPStartTime_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTPStartTime_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EnhancedRNTPStartTime_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ErrorIndication.c b/asn1c_defs/X2N_ErrorIndication.c
new file mode 100644
index 0000000..4a5d15c
--- /dev/null
+++ b/asn1c_defs/X2N_ErrorIndication.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ErrorIndication.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ErrorIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ErrorIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ErrorIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ErrorIndication_specs_1 = {
+	sizeof(struct X2N_ErrorIndication),
+	offsetof(struct X2N_ErrorIndication, _asn_ctx),
+	asn_MAP_X2N_ErrorIndication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ErrorIndication = {
+	"ErrorIndication",
+	"ErrorIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ErrorIndication_tags_1,
+	sizeof(asn_DEF_X2N_ErrorIndication_tags_1)
+		/sizeof(asn_DEF_X2N_ErrorIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ErrorIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ErrorIndication_tags_1)
+		/sizeof(asn_DEF_X2N_ErrorIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ErrorIndication_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ErrorIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ErrorIndication.h b/asn1c_defs/X2N_ErrorIndication.h
new file mode 100644
index 0000000..70bdc02
--- /dev/null
+++ b/asn1c_defs/X2N_ErrorIndication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ErrorIndication_H_
+#define	_X2N_ErrorIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ErrorIndication */
+typedef struct X2N_ErrorIndication {
+	X2N_ProtocolIE_Container_8180P7_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ErrorIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ErrorIndication;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ErrorIndication_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ErrorIndication_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ErrorIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_EventType.c b/asn1c_defs/X2N_EventType.c
new file mode 100644
index 0000000..24672de
--- /dev/null
+++ b/asn1c_defs/X2N_EventType.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_EventType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_EventType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_EventType_value2enum_1[] = {
+	{ 0,	22,	"change-of-serving-cell" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_EventType_enum2value_1[] = {
+	0	/* change-of-serving-cell(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_EventType_specs_1 = {
+	asn_MAP_X2N_EventType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_EventType_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EventType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EventType = {
+	"EventType",
+	"EventType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_EventType_tags_1,
+	sizeof(asn_DEF_X2N_EventType_tags_1)
+		/sizeof(asn_DEF_X2N_EventType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_EventType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_EventType_tags_1)
+		/sizeof(asn_DEF_X2N_EventType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_EventType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_EventType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_EventType.h b/asn1c_defs/X2N_EventType.h
new file mode 100644
index 0000000..3261281
--- /dev/null
+++ b/asn1c_defs/X2N_EventType.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_EventType_H_
+#define	_X2N_EventType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_EventType {
+	X2N_EventType_change_of_serving_cell	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_EventType;
+
+/* X2N_EventType */
+typedef long	 X2N_EventType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_EventType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EventType;
+extern const asn_INTEGER_specifics_t asn_SPC_EventType_specs_1;
+asn_struct_free_f EventType_free;
+asn_struct_print_f EventType_print;
+asn_constr_check_f EventType_constraint;
+ber_type_decoder_f EventType_decode_ber;
+der_type_encoder_f EventType_encode_der;
+xer_type_decoder_f EventType_decode_xer;
+xer_type_encoder_f EventType_encode_xer;
+per_type_decoder_f EventType_decode_uper;
+per_type_encoder_f EventType_encode_uper;
+per_type_decoder_f EventType_decode_aper;
+per_type_encoder_f EventType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_EventType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExpectedActivityPeriod.c b/asn1c_defs/X2N_ExpectedActivityPeriod.c
new file mode 100644
index 0000000..0df6009
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedActivityPeriod.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExpectedActivityPeriod.h"
+
+int
+X2N_ExpectedActivityPeriod_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if(((value >= 1 && value <= 30) || (value == 40) || (value == 50) || (value == 60) || (value == 80) || (value == 100) || (value == 120) || (value == 150) || (value >= 180 && value <= 181))) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ExpectedActivityPeriod_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  181 }	/* (1..181,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedActivityPeriod_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedActivityPeriod = {
+	"ExpectedActivityPeriod",
+	"ExpectedActivityPeriod",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_ExpectedActivityPeriod_tags_1,
+	sizeof(asn_DEF_X2N_ExpectedActivityPeriod_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedActivityPeriod_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExpectedActivityPeriod_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedActivityPeriod_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedActivityPeriod_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ExpectedActivityPeriod_constr_1, X2N_ExpectedActivityPeriod_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ExpectedActivityPeriod.h b/asn1c_defs/X2N_ExpectedActivityPeriod.h
new file mode 100644
index 0000000..61163d4
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedActivityPeriod.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExpectedActivityPeriod_H_
+#define	_X2N_ExpectedActivityPeriod_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ExpectedActivityPeriod */
+typedef long	 X2N_ExpectedActivityPeriod_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ExpectedActivityPeriod_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedActivityPeriod;
+asn_struct_free_f X2N_ExpectedActivityPeriod_free;
+asn_struct_print_f X2N_ExpectedActivityPeriod_print;
+asn_constr_check_f X2N_ExpectedActivityPeriod_constraint;
+ber_type_decoder_f X2N_ExpectedActivityPeriod_decode_ber;
+der_type_encoder_f X2N_ExpectedActivityPeriod_encode_der;
+xer_type_decoder_f X2N_ExpectedActivityPeriod_decode_xer;
+xer_type_encoder_f X2N_ExpectedActivityPeriod_encode_xer;
+per_type_decoder_f X2N_ExpectedActivityPeriod_decode_uper;
+per_type_encoder_f X2N_ExpectedActivityPeriod_encode_uper;
+per_type_decoder_f X2N_ExpectedActivityPeriod_decode_aper;
+per_type_encoder_f X2N_ExpectedActivityPeriod_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExpectedActivityPeriod_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExpectedHOInterval.c b/asn1c_defs/X2N_ExpectedHOInterval.c
new file mode 100644
index 0000000..637f479
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedHOInterval.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExpectedHOInterval.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ExpectedHOInterval_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ExpectedHOInterval_value2enum_1[] = {
+	{ 0,	5,	"sec15" },
+	{ 1,	5,	"sec30" },
+	{ 2,	5,	"sec60" },
+	{ 3,	5,	"sec90" },
+	{ 4,	6,	"sec120" },
+	{ 5,	6,	"sec180" },
+	{ 6,	9,	"long-time" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ExpectedHOInterval_enum2value_1[] = {
+	6,	/* long-time(6) */
+	4,	/* sec120(4) */
+	0,	/* sec15(0) */
+	5,	/* sec180(5) */
+	1,	/* sec30(1) */
+	2,	/* sec60(2) */
+	3	/* sec90(3) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ExpectedHOInterval_specs_1 = {
+	asn_MAP_X2N_ExpectedHOInterval_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ExpectedHOInterval_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedHOInterval_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedHOInterval = {
+	"ExpectedHOInterval",
+	"ExpectedHOInterval",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ExpectedHOInterval_tags_1,
+	sizeof(asn_DEF_X2N_ExpectedHOInterval_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedHOInterval_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExpectedHOInterval_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedHOInterval_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedHOInterval_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ExpectedHOInterval_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ExpectedHOInterval_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ExpectedHOInterval.h b/asn1c_defs/X2N_ExpectedHOInterval.h
new file mode 100644
index 0000000..88dc7a0
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedHOInterval.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExpectedHOInterval_H_
+#define	_X2N_ExpectedHOInterval_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ExpectedHOInterval {
+	X2N_ExpectedHOInterval_sec15	= 0,
+	X2N_ExpectedHOInterval_sec30	= 1,
+	X2N_ExpectedHOInterval_sec60	= 2,
+	X2N_ExpectedHOInterval_sec90	= 3,
+	X2N_ExpectedHOInterval_sec120	= 4,
+	X2N_ExpectedHOInterval_sec180	= 5,
+	X2N_ExpectedHOInterval_long_time	= 6
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ExpectedHOInterval;
+
+/* X2N_ExpectedHOInterval */
+typedef long	 X2N_ExpectedHOInterval_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ExpectedHOInterval_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedHOInterval;
+extern const asn_INTEGER_specifics_t asn_SPC_ExpectedHOInterval_specs_1;
+asn_struct_free_f ExpectedHOInterval_free;
+asn_struct_print_f ExpectedHOInterval_print;
+asn_constr_check_f ExpectedHOInterval_constraint;
+ber_type_decoder_f ExpectedHOInterval_decode_ber;
+der_type_encoder_f ExpectedHOInterval_encode_der;
+xer_type_decoder_f ExpectedHOInterval_decode_xer;
+xer_type_encoder_f ExpectedHOInterval_encode_xer;
+per_type_decoder_f ExpectedHOInterval_decode_uper;
+per_type_encoder_f ExpectedHOInterval_encode_uper;
+per_type_decoder_f ExpectedHOInterval_decode_aper;
+per_type_encoder_f ExpectedHOInterval_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExpectedHOInterval_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExpectedIdlePeriod.c b/asn1c_defs/X2N_ExpectedIdlePeriod.c
new file mode 100644
index 0000000..4ebc135
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedIdlePeriod.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExpectedIdlePeriod.h"
+
+int
+X2N_ExpectedIdlePeriod_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if(((value >= 1 && value <= 30) || (value == 40) || (value == 50) || (value == 60) || (value == 80) || (value == 100) || (value == 120) || (value == 150) || (value >= 180 && value <= 181))) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ExpectedIdlePeriod_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  181 }	/* (1..181,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedIdlePeriod_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedIdlePeriod = {
+	"ExpectedIdlePeriod",
+	"ExpectedIdlePeriod",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_ExpectedIdlePeriod_tags_1,
+	sizeof(asn_DEF_X2N_ExpectedIdlePeriod_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedIdlePeriod_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExpectedIdlePeriod_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedIdlePeriod_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedIdlePeriod_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ExpectedIdlePeriod_constr_1, X2N_ExpectedIdlePeriod_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ExpectedIdlePeriod.h b/asn1c_defs/X2N_ExpectedIdlePeriod.h
new file mode 100644
index 0000000..95e214c
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedIdlePeriod.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExpectedIdlePeriod_H_
+#define	_X2N_ExpectedIdlePeriod_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ExpectedIdlePeriod */
+typedef long	 X2N_ExpectedIdlePeriod_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ExpectedIdlePeriod_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedIdlePeriod;
+asn_struct_free_f X2N_ExpectedIdlePeriod_free;
+asn_struct_print_f X2N_ExpectedIdlePeriod_print;
+asn_constr_check_f X2N_ExpectedIdlePeriod_constraint;
+ber_type_decoder_f X2N_ExpectedIdlePeriod_decode_ber;
+der_type_encoder_f X2N_ExpectedIdlePeriod_encode_der;
+xer_type_decoder_f X2N_ExpectedIdlePeriod_decode_xer;
+xer_type_encoder_f X2N_ExpectedIdlePeriod_encode_xer;
+per_type_decoder_f X2N_ExpectedIdlePeriod_decode_uper;
+per_type_encoder_f X2N_ExpectedIdlePeriod_encode_uper;
+per_type_decoder_f X2N_ExpectedIdlePeriod_decode_aper;
+per_type_encoder_f X2N_ExpectedIdlePeriod_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExpectedIdlePeriod_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExpectedUEActivityBehaviour.c b/asn1c_defs/X2N_ExpectedUEActivityBehaviour.c
new file mode 100644
index 0000000..1e27328
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedUEActivityBehaviour.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExpectedUEActivityBehaviour.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ExpectedUEActivityBehaviour_1[] = {
+	{ ATF_POINTER, 4, offsetof(struct X2N_ExpectedUEActivityBehaviour, expectedActivityPeriod),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ExpectedActivityPeriod,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"expectedActivityPeriod"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_ExpectedUEActivityBehaviour, expectedIdlePeriod),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ExpectedIdlePeriod,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"expectedIdlePeriod"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ExpectedUEActivityBehaviour, sourceofUEActivityBehaviourInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SourceOfUEActivityBehaviourInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sourceofUEActivityBehaviourInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ExpectedUEActivityBehaviour, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P143,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ExpectedUEActivityBehaviour_oms_1[] = { 0, 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExpectedUEActivityBehaviour_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedActivityPeriod */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* expectedIdlePeriod */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sourceofUEActivityBehaviourInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEActivityBehaviour_specs_1 = {
+	sizeof(struct X2N_ExpectedUEActivityBehaviour),
+	offsetof(struct X2N_ExpectedUEActivityBehaviour, _asn_ctx),
+	asn_MAP_X2N_ExpectedUEActivityBehaviour_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ExpectedUEActivityBehaviour_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEActivityBehaviour = {
+	"ExpectedUEActivityBehaviour",
+	"ExpectedUEActivityBehaviour",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1,
+	sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExpectedUEActivityBehaviour_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ExpectedUEActivityBehaviour_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ExpectedUEActivityBehaviour.h b/asn1c_defs/X2N_ExpectedUEActivityBehaviour.h
new file mode 100644
index 0000000..4ae5135
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedUEActivityBehaviour.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExpectedUEActivityBehaviour_H_
+#define	_X2N_ExpectedUEActivityBehaviour_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ExpectedActivityPeriod.h"
+#include "X2N_ExpectedIdlePeriod.h"
+#include "X2N_SourceOfUEActivityBehaviourInformation.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ExpectedUEActivityBehaviour */
+typedef struct X2N_ExpectedUEActivityBehaviour {
+	X2N_ExpectedActivityPeriod_t	*expectedActivityPeriod;	/* OPTIONAL */
+	X2N_ExpectedIdlePeriod_t	*expectedIdlePeriod;	/* OPTIONAL */
+	X2N_SourceOfUEActivityBehaviourInformation_t	*sourceofUEActivityBehaviourInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExpectedUEActivityBehaviour_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEActivityBehaviour;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEActivityBehaviour_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ExpectedUEActivityBehaviour_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExpectedUEActivityBehaviour_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExpectedUEBehaviour.c b/asn1c_defs/X2N_ExpectedUEBehaviour.c
new file mode 100644
index 0000000..48934ec
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedUEBehaviour.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExpectedUEBehaviour.h"
+
+#include "X2N_ExpectedUEActivityBehaviour.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_ExpectedUEBehaviour_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_ExpectedUEBehaviour, expectedActivity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ExpectedUEActivityBehaviour,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"expectedActivity"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ExpectedUEBehaviour, expectedHOInterval),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ExpectedHOInterval,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"expectedHOInterval"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ExpectedUEBehaviour, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P142,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ExpectedUEBehaviour_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedUEBehaviour_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExpectedUEBehaviour_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedActivity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* expectedHOInterval */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEBehaviour_specs_1 = {
+	sizeof(struct X2N_ExpectedUEBehaviour),
+	offsetof(struct X2N_ExpectedUEBehaviour, _asn_ctx),
+	asn_MAP_X2N_ExpectedUEBehaviour_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ExpectedUEBehaviour_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEBehaviour = {
+	"ExpectedUEBehaviour",
+	"ExpectedUEBehaviour",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExpectedUEBehaviour_tags_1,
+	sizeof(asn_DEF_X2N_ExpectedUEBehaviour_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedUEBehaviour_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExpectedUEBehaviour_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedUEBehaviour_tags_1)
+		/sizeof(asn_DEF_X2N_ExpectedUEBehaviour_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExpectedUEBehaviour_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ExpectedUEBehaviour_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ExpectedUEBehaviour.h b/asn1c_defs/X2N_ExpectedUEBehaviour.h
new file mode 100644
index 0000000..be752e9
--- /dev/null
+++ b/asn1c_defs/X2N_ExpectedUEBehaviour.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExpectedUEBehaviour_H_
+#define	_X2N_ExpectedUEBehaviour_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ExpectedHOInterval.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ExpectedUEActivityBehaviour;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ExpectedUEBehaviour */
+typedef struct X2N_ExpectedUEBehaviour {
+	struct X2N_ExpectedUEActivityBehaviour	*expectedActivity;	/* OPTIONAL */
+	X2N_ExpectedHOInterval_t	*expectedHOInterval;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExpectedUEBehaviour_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEBehaviour;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExpectedUEBehaviour_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExtendedBitRate.c b/asn1c_defs/X2N_ExtendedBitRate.c
new file mode 100644
index 0000000..6dd4e29
--- /dev/null
+++ b/asn1c_defs/X2N_ExtendedBitRate.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExtendedBitRate.h"
+
+int
+X2N_ExtendedBitRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const INTEGER_t *st = (const INTEGER_t *)sptr;
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(asn_INTEGER2long(st, &value)) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value too large (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if((value >= 10000000001 && value <= 4000000000000)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ExtendedBitRate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  42, -1,  10000000001,  4000000000000 }	/* (10000000001..4000000000000,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExtendedBitRate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedBitRate = {
+	"ExtendedBitRate",
+	"ExtendedBitRate",
+	&asn_OP_INTEGER,
+	asn_DEF_X2N_ExtendedBitRate_tags_1,
+	sizeof(asn_DEF_X2N_ExtendedBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_ExtendedBitRate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExtendedBitRate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExtendedBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_ExtendedBitRate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ExtendedBitRate_constr_1, X2N_ExtendedBitRate_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ExtendedBitRate.h b/asn1c_defs/X2N_ExtendedBitRate.h
new file mode 100644
index 0000000..2e4e057
--- /dev/null
+++ b/asn1c_defs/X2N_ExtendedBitRate.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExtendedBitRate_H_
+#define	_X2N_ExtendedBitRate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <INTEGER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ExtendedBitRate */
+typedef INTEGER_t	 X2N_ExtendedBitRate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedBitRate;
+asn_struct_free_f X2N_ExtendedBitRate_free;
+asn_struct_print_f X2N_ExtendedBitRate_print;
+asn_constr_check_f X2N_ExtendedBitRate_constraint;
+ber_type_decoder_f X2N_ExtendedBitRate_decode_ber;
+der_type_encoder_f X2N_ExtendedBitRate_encode_der;
+xer_type_decoder_f X2N_ExtendedBitRate_decode_xer;
+xer_type_encoder_f X2N_ExtendedBitRate_encode_xer;
+per_type_decoder_f X2N_ExtendedBitRate_decode_uper;
+per_type_encoder_f X2N_ExtendedBitRate_encode_uper;
+per_type_decoder_f X2N_ExtendedBitRate_decode_aper;
+per_type_encoder_f X2N_ExtendedBitRate_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExtendedBitRate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.c b/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.c
new file mode 100644
index 0000000..ae4e2da
--- /dev/null
+++ b/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ExtendedULInterferenceOverloadInfo.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_associatedSubframes_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 5)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_associatedSubframes_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  5,  5 }	/* (SIZE(5..5)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ExtendedULInterferenceOverloadInfo_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo, associatedSubframes),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_associatedSubframes_constr_2,  memb_X2N_associatedSubframes_constraint_1 },
+		0, 0, /* No default value */
+		"associatedSubframes"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo, extended_ul_InterferenceOverloadIndication),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_InterferenceOverloadIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"extended-ul-InterferenceOverloadIndication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P144,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* associatedSubframes */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* extended-ul-InterferenceOverloadIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_ExtendedULInterferenceOverloadInfo_specs_1 = {
+	sizeof(struct X2N_ExtendedULInterferenceOverloadInfo),
+	offsetof(struct X2N_ExtendedULInterferenceOverloadInfo, _asn_ctx),
+	asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo = {
+	"ExtendedULInterferenceOverloadInfo",
+	"ExtendedULInterferenceOverloadInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1,
+	sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1)
+		/sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1)
+		/sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExtendedULInterferenceOverloadInfo_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ExtendedULInterferenceOverloadInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.h b/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.h
new file mode 100644
index 0000000..58fa143
--- /dev/null
+++ b/asn1c_defs/X2N_ExtendedULInterferenceOverloadInfo.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ExtendedULInterferenceOverloadInfo_H_
+#define	_X2N_ExtendedULInterferenceOverloadInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include "X2N_UL-InterferenceOverloadIndication.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ExtendedULInterferenceOverloadInfo */
+typedef struct X2N_ExtendedULInterferenceOverloadInfo {
+	BIT_STRING_t	 associatedSubframes;
+	X2N_UL_InterferenceOverloadIndication_t	 extended_ul_InterferenceOverloadIndication;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExtendedULInterferenceOverloadInfo_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ExtendedULInterferenceOverloadInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FDD-Info.c b/asn1c_defs/X2N_FDD-Info.c
new file mode 100644
index 0000000..f01e887
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-Info.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FDD-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_FDD_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info, uL_EARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-EARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info, dL_EARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-EARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info, uL_Transmission_Bandwidth),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Transmission_Bandwidth,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Transmission-Bandwidth"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info, dL_Transmission_Bandwidth),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Transmission_Bandwidth,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Transmission-Bandwidth"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_FDD_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P145,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_FDD_Info_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-EARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-EARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-Transmission-Bandwidth */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dL-Transmission-Bandwidth */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_Info_specs_1 = {
+	sizeof(struct X2N_FDD_Info),
+	offsetof(struct X2N_FDD_Info, _asn_ctx),
+	asn_MAP_X2N_FDD_Info_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_FDD_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_Info = {
+	"FDD-Info",
+	"FDD-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_Info_tags_1,
+	sizeof(asn_DEF_X2N_FDD_Info_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FDD_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_Info_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_Info_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_FDD_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FDD-Info.h b/asn1c_defs/X2N_FDD-Info.h
new file mode 100644
index 0000000..2bab2e5
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-Info.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FDD_Info_H_
+#define	_X2N_FDD_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_EARFCN.h"
+#include "X2N_Transmission-Bandwidth.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_FDD-Info */
+typedef struct X2N_FDD_Info {
+	X2N_EARFCN_t	 uL_EARFCN;
+	X2N_EARFCN_t	 dL_EARFCN;
+	X2N_Transmission_Bandwidth_t	 uL_Transmission_Bandwidth;
+	X2N_Transmission_Bandwidth_t	 dL_Transmission_Bandwidth;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_Info;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_Info_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_Info_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FDD_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.c b/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.c
new file mode 100644
index 0000000..763aa0e
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FDD-InfoNeighbourServedNRCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information, ul_NRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-NRFreqInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information, dl_NRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dl-NRFreqInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P94,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-NRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-NRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_specs_1 = {
+	sizeof(struct X2N_FDD_InfoNeighbourServedNRCell_Information),
+	offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information, _asn_ctx),
+	asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information = {
+	"FDD-InfoNeighbourServedNRCell-Information",
+	"FDD-InfoNeighbourServedNRCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.h b/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.h
new file mode 100644
index 0000000..32bfdf7
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-InfoNeighbourServedNRCell-Information.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FDD_InfoNeighbourServedNRCell_Information_H_
+#define	_X2N_FDD_InfoNeighbourServedNRCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRFreqInfo.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_FDD-InfoNeighbourServedNRCell-Information */
+typedef struct X2N_FDD_InfoNeighbourServedNRCell_Information {
+	X2N_NRFreqInfo_t	 ul_NRFreqInfo;
+	X2N_NRFreqInfo_t	 dl_NRFreqInfo;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_InfoNeighbourServedNRCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FDD_InfoNeighbourServedNRCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.c b/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.c
new file mode 100644
index 0000000..d4daa98
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FDD-InfoServedNRCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_FDD_InfoServedNRCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information, ul_NRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-NRFreqInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information, dl_NRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dl-NRFreqInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information, ul_NR_TxBW),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NR_TxBW,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-NR-TxBW"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information, dl_NR_TxBW),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NR_TxBW,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dl-NR-TxBW"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_FDD_InfoServedNRCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P93,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_FDD_InfoServedNRCell_Information_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_InfoServedNRCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-NRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-NRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-NR-TxBW */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dl-NR-TxBW */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoServedNRCell_Information_specs_1 = {
+	sizeof(struct X2N_FDD_InfoServedNRCell_Information),
+	offsetof(struct X2N_FDD_InfoServedNRCell_Information, _asn_ctx),
+	asn_MAP_X2N_FDD_InfoServedNRCell_Information_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_FDD_InfoServedNRCell_Information_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoServedNRCell_Information = {
+	"FDD-InfoServedNRCell-Information",
+	"FDD-InfoServedNRCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_InfoServedNRCell_Information_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_FDD_InfoServedNRCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.h b/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.h
new file mode 100644
index 0000000..cd7ec77
--- /dev/null
+++ b/asn1c_defs/X2N_FDD-InfoServedNRCell-Information.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FDD_InfoServedNRCell_Information_H_
+#define	_X2N_FDD_InfoServedNRCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRFreqInfo.h"
+#include "X2N_NR-TxBW.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_FDD-InfoServedNRCell-Information */
+typedef struct X2N_FDD_InfoServedNRCell_Information {
+	X2N_NRFreqInfo_t	 ul_NRFreqInfo;
+	X2N_NRFreqInfo_t	 dl_NRFreqInfo;
+	X2N_NR_TxBW_t	 ul_NR_TxBW;
+	X2N_NR_TxBW_t	 dl_NR_TxBW;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_InfoServedNRCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoServedNRCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoServedNRCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_InfoServedNRCell_Information_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FDD_InfoServedNRCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FiveGS-TAC.c b/asn1c_defs/X2N_FiveGS-TAC.c
new file mode 100644
index 0000000..b9ac918
--- /dev/null
+++ b/asn1c_defs/X2N_FiveGS-TAC.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FiveGS-TAC.h"
+
+int
+X2N_FiveGS_TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_FiveGS_TAC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FiveGS_TAC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FiveGS_TAC = {
+	"FiveGS-TAC",
+	"FiveGS-TAC",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_FiveGS_TAC_tags_1,
+	sizeof(asn_DEF_X2N_FiveGS_TAC_tags_1)
+		/sizeof(asn_DEF_X2N_FiveGS_TAC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FiveGS_TAC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FiveGS_TAC_tags_1)
+		/sizeof(asn_DEF_X2N_FiveGS_TAC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_FiveGS_TAC_constr_1, X2N_FiveGS_TAC_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FiveGS-TAC.h b/asn1c_defs/X2N_FiveGS-TAC.h
new file mode 100644
index 0000000..962f060
--- /dev/null
+++ b/asn1c_defs/X2N_FiveGS-TAC.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FiveGS_TAC_H_
+#define	_X2N_FiveGS_TAC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_FiveGS-TAC */
+typedef OCTET_STRING_t	 X2N_FiveGS_TAC_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_FiveGS_TAC_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FiveGS_TAC;
+asn_struct_free_f X2N_FiveGS_TAC_free;
+asn_struct_print_f X2N_FiveGS_TAC_print;
+asn_constr_check_f X2N_FiveGS_TAC_constraint;
+ber_type_decoder_f X2N_FiveGS_TAC_decode_ber;
+der_type_encoder_f X2N_FiveGS_TAC_encode_der;
+xer_type_decoder_f X2N_FiveGS_TAC_decode_xer;
+xer_type_encoder_f X2N_FiveGS_TAC_encode_xer;
+per_type_decoder_f X2N_FiveGS_TAC_decode_uper;
+per_type_encoder_f X2N_FiveGS_TAC_encode_uper;
+per_type_decoder_f X2N_FiveGS_TAC_decode_aper;
+per_type_encoder_f X2N_FiveGS_TAC_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FiveGS_TAC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenInterRATs.c b/asn1c_defs/X2N_ForbiddenInterRATs.c
new file mode 100644
index 0000000..409fe9d
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenInterRATs.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenInterRATs.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ForbiddenInterRATs_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ForbiddenInterRATs_value2enum_1[] = {
+	{ 0,	3,	"all" },
+	{ 1,	5,	"geran" },
+	{ 2,	5,	"utran" },
+	{ 3,	8,	"cdma2000" },
+	{ 4,	13,	"geranandutran" },
+	{ 5,	16,	"cdma2000andutran" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ForbiddenInterRATs_enum2value_1[] = {
+	0,	/* all(0) */
+	3,	/* cdma2000(3) */
+	5,	/* cdma2000andutran(5) */
+	1,	/* geran(1) */
+	4,	/* geranandutran(4) */
+	2	/* utran(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ForbiddenInterRATs_specs_1 = {
+	asn_MAP_X2N_ForbiddenInterRATs_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ForbiddenInterRATs_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenInterRATs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenInterRATs = {
+	"ForbiddenInterRATs",
+	"ForbiddenInterRATs",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ForbiddenInterRATs_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenInterRATs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenInterRATs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenInterRATs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenInterRATs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenInterRATs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ForbiddenInterRATs_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ForbiddenInterRATs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenInterRATs.h b/asn1c_defs/X2N_ForbiddenInterRATs.h
new file mode 100644
index 0000000..3d929b8
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenInterRATs.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenInterRATs_H_
+#define	_X2N_ForbiddenInterRATs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ForbiddenInterRATs {
+	X2N_ForbiddenInterRATs_all	= 0,
+	X2N_ForbiddenInterRATs_geran	= 1,
+	X2N_ForbiddenInterRATs_utran	= 2,
+	X2N_ForbiddenInterRATs_cdma2000	= 3,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_ForbiddenInterRATs_geranandutran	= 4,
+	X2N_ForbiddenInterRATs_cdma2000andutran	= 5
+} e_X2N_ForbiddenInterRATs;
+
+/* X2N_ForbiddenInterRATs */
+typedef long	 X2N_ForbiddenInterRATs_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ForbiddenInterRATs_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenInterRATs;
+extern const asn_INTEGER_specifics_t asn_SPC_ForbiddenInterRATs_specs_1;
+asn_struct_free_f ForbiddenInterRATs_free;
+asn_struct_print_f ForbiddenInterRATs_print;
+asn_constr_check_f ForbiddenInterRATs_constraint;
+ber_type_decoder_f ForbiddenInterRATs_decode_ber;
+der_type_encoder_f ForbiddenInterRATs_encode_der;
+xer_type_decoder_f ForbiddenInterRATs_decode_xer;
+xer_type_encoder_f ForbiddenInterRATs_encode_xer;
+per_type_decoder_f ForbiddenInterRATs_decode_uper;
+per_type_encoder_f ForbiddenInterRATs_encode_uper;
+per_type_decoder_f ForbiddenInterRATs_decode_aper;
+per_type_encoder_f ForbiddenInterRATs_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenInterRATs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenLACs.c b/asn1c_defs/X2N_ForbiddenLACs.c
new file mode 100644
index 0000000..c98d3d6
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLACs.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenLACs.h"
+
+asn_per_constraints_t asn_PER_type_X2N_ForbiddenLACs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 12,  12,  1,  4096 }	/* (SIZE(1..4096)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenLACs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_LAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenLACs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenLACs_specs_1 = {
+	sizeof(struct X2N_ForbiddenLACs),
+	offsetof(struct X2N_ForbiddenLACs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLACs = {
+	"ForbiddenLACs",
+	"ForbiddenLACs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ForbiddenLACs_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenLACs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLACs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenLACs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenLACs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLACs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ForbiddenLACs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ForbiddenLACs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ForbiddenLACs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenLACs.h b/asn1c_defs/X2N_ForbiddenLACs.h
new file mode 100644
index 0000000..5a00b2a
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLACs.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenLACs_H_
+#define	_X2N_ForbiddenLACs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_LAC.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ForbiddenLACs */
+typedef struct X2N_ForbiddenLACs {
+	A_SEQUENCE_OF(X2N_LAC_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenLACs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLACs;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenLACs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenLACs_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ForbiddenLACs_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenLACs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenLAs-Item.c b/asn1c_defs/X2N_ForbiddenLAs-Item.c
new file mode 100644
index 0000000..68e0e19
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLAs-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenLAs-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenLAs_Item, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenLAs_Item, forbiddenLACs),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ForbiddenLACs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"forbiddenLACs"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ForbiddenLAs_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P147,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ForbiddenLAs_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenLAs_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ForbiddenLAs_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* forbiddenLACs */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenLAs_Item_specs_1 = {
+	sizeof(struct X2N_ForbiddenLAs_Item),
+	offsetof(struct X2N_ForbiddenLAs_Item, _asn_ctx),
+	asn_MAP_X2N_ForbiddenLAs_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ForbiddenLAs_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs_Item = {
+	"ForbiddenLAs-Item",
+	"ForbiddenLAs-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ForbiddenLAs_Item_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenLAs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenLAs_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenLAs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ForbiddenLAs_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ForbiddenLAs_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenLAs-Item.h b/asn1c_defs/X2N_ForbiddenLAs-Item.h
new file mode 100644
index 0000000..409283b
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLAs-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenLAs_Item_H_
+#define	_X2N_ForbiddenLAs_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_ForbiddenLACs.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ForbiddenLAs-Item */
+typedef struct X2N_ForbiddenLAs_Item {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_ForbiddenLACs_t	 forbiddenLACs;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenLAs_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenLAs_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenLAs_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenLAs.c b/asn1c_defs/X2N_ForbiddenLAs.c
new file mode 100644
index 0000000..3c9359b
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLAs.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenLAs.h"
+
+#include "X2N_ForbiddenLAs-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_ForbiddenLAs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ForbiddenLAs_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenLAs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenLAs_specs_1 = {
+	sizeof(struct X2N_ForbiddenLAs),
+	offsetof(struct X2N_ForbiddenLAs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs = {
+	"ForbiddenLAs",
+	"ForbiddenLAs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ForbiddenLAs_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenLAs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenLAs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenLAs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ForbiddenLAs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ForbiddenLAs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ForbiddenLAs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenLAs.h b/asn1c_defs/X2N_ForbiddenLAs.h
new file mode 100644
index 0000000..12d4c6a
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenLAs.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenLAs_H_
+#define	_X2N_ForbiddenLAs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ForbiddenLAs_Item;
+
+/* X2N_ForbiddenLAs */
+typedef struct X2N_ForbiddenLAs {
+	A_SEQUENCE_OF(struct X2N_ForbiddenLAs_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenLAs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenLAs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ForbiddenLAs_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenLAs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenTACs.c b/asn1c_defs/X2N_ForbiddenTACs.c
new file mode 100644
index 0000000..60baa2f
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTACs.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenTACs.h"
+
+asn_per_constraints_t asn_PER_type_X2N_ForbiddenTACs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 12,  12,  1,  4096 }	/* (SIZE(1..4096)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenTACs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenTACs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenTACs_specs_1 = {
+	sizeof(struct X2N_ForbiddenTACs),
+	offsetof(struct X2N_ForbiddenTACs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTACs = {
+	"ForbiddenTACs",
+	"ForbiddenTACs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ForbiddenTACs_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenTACs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTACs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenTACs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenTACs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTACs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ForbiddenTACs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ForbiddenTACs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ForbiddenTACs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenTACs.h b/asn1c_defs/X2N_ForbiddenTACs.h
new file mode 100644
index 0000000..a2a041c
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTACs.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenTACs_H_
+#define	_X2N_ForbiddenTACs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAC.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ForbiddenTACs */
+typedef struct X2N_ForbiddenTACs {
+	A_SEQUENCE_OF(X2N_TAC_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenTACs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTACs;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenTACs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenTACs_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ForbiddenTACs_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenTACs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenTAs-Item.c b/asn1c_defs/X2N_ForbiddenTAs-Item.c
new file mode 100644
index 0000000..e4419b9
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTAs-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenTAs-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenTAs_Item, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenTAs_Item, forbiddenTACs),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ForbiddenTACs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"forbiddenTACs"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ForbiddenTAs_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P146,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ForbiddenTAs_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenTAs_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ForbiddenTAs_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* forbiddenTACs */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenTAs_Item_specs_1 = {
+	sizeof(struct X2N_ForbiddenTAs_Item),
+	offsetof(struct X2N_ForbiddenTAs_Item, _asn_ctx),
+	asn_MAP_X2N_ForbiddenTAs_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ForbiddenTAs_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs_Item = {
+	"ForbiddenTAs-Item",
+	"ForbiddenTAs-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ForbiddenTAs_Item_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenTAs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenTAs_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenTAs_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ForbiddenTAs_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ForbiddenTAs_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenTAs-Item.h b/asn1c_defs/X2N_ForbiddenTAs-Item.h
new file mode 100644
index 0000000..5b5f53a
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTAs-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenTAs_Item_H_
+#define	_X2N_ForbiddenTAs_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_ForbiddenTACs.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ForbiddenTAs-Item */
+typedef struct X2N_ForbiddenTAs_Item {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_ForbiddenTACs_t	 forbiddenTACs;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenTAs_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenTAs_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenTAs_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ForbiddenTAs.c b/asn1c_defs/X2N_ForbiddenTAs.c
new file mode 100644
index 0000000..efc4e24
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTAs.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ForbiddenTAs.h"
+
+#include "X2N_ForbiddenTAs-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_ForbiddenTAs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ForbiddenTAs_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenTAs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenTAs_specs_1 = {
+	sizeof(struct X2N_ForbiddenTAs),
+	offsetof(struct X2N_ForbiddenTAs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs = {
+	"ForbiddenTAs",
+	"ForbiddenTAs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ForbiddenTAs_tags_1,
+	sizeof(asn_DEF_X2N_ForbiddenTAs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenTAs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenTAs_tags_1)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ForbiddenTAs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ForbiddenTAs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ForbiddenTAs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ForbiddenTAs.h b/asn1c_defs/X2N_ForbiddenTAs.h
new file mode 100644
index 0000000..5d47167
--- /dev/null
+++ b/asn1c_defs/X2N_ForbiddenTAs.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ForbiddenTAs_H_
+#define	_X2N_ForbiddenTAs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ForbiddenTAs_Item;
+
+/* X2N_ForbiddenTAs */
+typedef struct X2N_ForbiddenTAs {
+	A_SEQUENCE_OF(struct X2N_ForbiddenTAs_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenTAs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ForbiddenTAs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ForbiddenTAs_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ForbiddenTAs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Fourframes.c b/asn1c_defs/X2N_Fourframes.c
new file mode 100644
index 0000000..4ad9d53
--- /dev/null
+++ b/asn1c_defs/X2N_Fourframes.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Fourframes.h"
+
+int
+X2N_Fourframes_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 24)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Fourframes_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  24,  24 }	/* (SIZE(24..24)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Fourframes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Fourframes = {
+	"Fourframes",
+	"Fourframes",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_Fourframes_tags_1,
+	sizeof(asn_DEF_X2N_Fourframes_tags_1)
+		/sizeof(asn_DEF_X2N_Fourframes_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Fourframes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Fourframes_tags_1)
+		/sizeof(asn_DEF_X2N_Fourframes_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Fourframes_constr_1, X2N_Fourframes_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Fourframes.h b/asn1c_defs/X2N_Fourframes.h
new file mode 100644
index 0000000..d53484b
--- /dev/null
+++ b/asn1c_defs/X2N_Fourframes.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Fourframes_H_
+#define	_X2N_Fourframes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Fourframes */
+typedef BIT_STRING_t	 X2N_Fourframes_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Fourframes_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Fourframes;
+asn_struct_free_f X2N_Fourframes_free;
+asn_struct_print_f X2N_Fourframes_print;
+asn_constr_check_f X2N_Fourframes_constraint;
+ber_type_decoder_f X2N_Fourframes_decode_ber;
+der_type_encoder_f X2N_Fourframes_encode_der;
+xer_type_decoder_f X2N_Fourframes_decode_xer;
+xer_type_encoder_f X2N_Fourframes_encode_xer;
+per_type_decoder_f X2N_Fourframes_decode_uper;
+per_type_encoder_f X2N_Fourframes_encode_uper;
+per_type_decoder_f X2N_Fourframes_decode_aper;
+per_type_encoder_f X2N_Fourframes_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Fourframes_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FreqBandIndicator.c b/asn1c_defs/X2N_FreqBandIndicator.c
new file mode 100644
index 0000000..0d5563a
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandIndicator.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FreqBandIndicator.h"
+
+int
+X2N_FreqBandIndicator_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_FreqBandIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  255 }	/* (1..255,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FreqBandIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandIndicator = {
+	"FreqBandIndicator",
+	"FreqBandIndicator",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_FreqBandIndicator_tags_1,
+	sizeof(asn_DEF_X2N_FreqBandIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FreqBandIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FreqBandIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_FreqBandIndicator_constr_1, X2N_FreqBandIndicator_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_FreqBandIndicator.h b/asn1c_defs/X2N_FreqBandIndicator.h
new file mode 100644
index 0000000..dd0284c
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandIndicator.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FreqBandIndicator_H_
+#define	_X2N_FreqBandIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_FreqBandIndicator */
+typedef long	 X2N_FreqBandIndicator_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_FreqBandIndicator_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandIndicator;
+asn_struct_free_f X2N_FreqBandIndicator_free;
+asn_struct_print_f X2N_FreqBandIndicator_print;
+asn_constr_check_f X2N_FreqBandIndicator_constraint;
+ber_type_decoder_f X2N_FreqBandIndicator_decode_ber;
+der_type_encoder_f X2N_FreqBandIndicator_encode_der;
+xer_type_decoder_f X2N_FreqBandIndicator_decode_xer;
+xer_type_encoder_f X2N_FreqBandIndicator_encode_xer;
+per_type_decoder_f X2N_FreqBandIndicator_decode_uper;
+per_type_encoder_f X2N_FreqBandIndicator_encode_uper;
+per_type_decoder_f X2N_FreqBandIndicator_decode_aper;
+per_type_encoder_f X2N_FreqBandIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FreqBandIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FreqBandIndicatorPriority.c b/asn1c_defs/X2N_FreqBandIndicatorPriority.c
new file mode 100644
index 0000000..1b60e10
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandIndicatorPriority.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FreqBandIndicatorPriority.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_FreqBandIndicatorPriority_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_FreqBandIndicatorPriority_value2enum_1[] = {
+	{ 0,	15,	"not-broadcasted" },
+	{ 1,	11,	"broadcasted" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_FreqBandIndicatorPriority_enum2value_1[] = {
+	1,	/* broadcasted(1) */
+	0	/* not-broadcasted(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_FreqBandIndicatorPriority_specs_1 = {
+	asn_MAP_X2N_FreqBandIndicatorPriority_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_FreqBandIndicatorPriority_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FreqBandIndicatorPriority_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandIndicatorPriority = {
+	"FreqBandIndicatorPriority",
+	"FreqBandIndicatorPriority",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_FreqBandIndicatorPriority_tags_1,
+	sizeof(asn_DEF_X2N_FreqBandIndicatorPriority_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandIndicatorPriority_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FreqBandIndicatorPriority_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FreqBandIndicatorPriority_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandIndicatorPriority_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_FreqBandIndicatorPriority_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_FreqBandIndicatorPriority_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FreqBandIndicatorPriority.h b/asn1c_defs/X2N_FreqBandIndicatorPriority.h
new file mode 100644
index 0000000..1b4ebdb
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandIndicatorPriority.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FreqBandIndicatorPriority_H_
+#define	_X2N_FreqBandIndicatorPriority_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_FreqBandIndicatorPriority {
+	X2N_FreqBandIndicatorPriority_not_broadcasted	= 0,
+	X2N_FreqBandIndicatorPriority_broadcasted	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_FreqBandIndicatorPriority;
+
+/* X2N_FreqBandIndicatorPriority */
+typedef long	 X2N_FreqBandIndicatorPriority_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandIndicatorPriority;
+asn_struct_free_f X2N_FreqBandIndicatorPriority_free;
+asn_struct_print_f X2N_FreqBandIndicatorPriority_print;
+asn_constr_check_f X2N_FreqBandIndicatorPriority_constraint;
+ber_type_decoder_f X2N_FreqBandIndicatorPriority_decode_ber;
+der_type_encoder_f X2N_FreqBandIndicatorPriority_encode_der;
+xer_type_decoder_f X2N_FreqBandIndicatorPriority_decode_xer;
+xer_type_encoder_f X2N_FreqBandIndicatorPriority_encode_xer;
+per_type_decoder_f X2N_FreqBandIndicatorPriority_decode_uper;
+per_type_encoder_f X2N_FreqBandIndicatorPriority_encode_uper;
+per_type_decoder_f X2N_FreqBandIndicatorPriority_decode_aper;
+per_type_encoder_f X2N_FreqBandIndicatorPriority_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FreqBandIndicatorPriority_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_FreqBandNrItem.c b/asn1c_defs/X2N_FreqBandNrItem.c
new file mode 100644
index 0000000..0d73720
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandNrItem.c
@@ -0,0 +1,177 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_FreqBandNrItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_SupportedSULFreqBandItem.h"
+static int
+memb_X2N_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 1024)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_supportedSULBandList_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 32)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_supportedSULBandList_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  0,  32 }	/* (SIZE(0..32)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1024 }	/* (1..1024,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_supportedSULBandList_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 6,  6,  0,  32 }	/* (SIZE(0..32)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_supportedSULBandList_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SupportedSULFreqBandItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_supportedSULBandList_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_supportedSULBandList_specs_3 = {
+	sizeof(struct X2N_FreqBandNrItem__supportedSULBandList),
+	offsetof(struct X2N_FreqBandNrItem__supportedSULBandList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_supportedSULBandList_3 = {
+	"supportedSULBandList",
+	"supportedSULBandList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_supportedSULBandList_tags_3,
+	sizeof(asn_DEF_X2N_supportedSULBandList_tags_3)
+		/sizeof(asn_DEF_X2N_supportedSULBandList_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_supportedSULBandList_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_supportedSULBandList_tags_3)
+		/sizeof(asn_DEF_X2N_supportedSULBandList_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_supportedSULBandList_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_supportedSULBandList_3,
+	1,	/* Single element */
+	&asn_SPC_X2N_supportedSULBandList_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_FreqBandNrItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FreqBandNrItem, freqBandIndicatorNr),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_freqBandIndicatorNr_constr_2,  memb_X2N_freqBandIndicatorNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandIndicatorNr"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FreqBandNrItem, supportedSULBandList),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_X2N_supportedSULBandList_3,
+		0,
+		{ 0, &asn_PER_memb_X2N_supportedSULBandList_constr_3,  memb_X2N_supportedSULBandList_constraint_1 },
+		0, 0, /* No default value */
+		"supportedSULBandList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_FreqBandNrItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P148,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_FreqBandNrItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_FreqBandNrItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FreqBandNrItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* supportedSULBandList */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FreqBandNrItem_specs_1 = {
+	sizeof(struct X2N_FreqBandNrItem),
+	offsetof(struct X2N_FreqBandNrItem, _asn_ctx),
+	asn_MAP_X2N_FreqBandNrItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_FreqBandNrItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandNrItem = {
+	"FreqBandNrItem",
+	"FreqBandNrItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FreqBandNrItem_tags_1,
+	sizeof(asn_DEF_X2N_FreqBandNrItem_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandNrItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_FreqBandNrItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_FreqBandNrItem_tags_1)
+		/sizeof(asn_DEF_X2N_FreqBandNrItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FreqBandNrItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FreqBandNrItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_FreqBandNrItem.h b/asn1c_defs/X2N_FreqBandNrItem.h
new file mode 100644
index 0000000..41e7537
--- /dev/null
+++ b/asn1c_defs/X2N_FreqBandNrItem.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_FreqBandNrItem_H_
+#define	_X2N_FreqBandNrItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_SupportedSULFreqBandItem;
+
+/* X2N_FreqBandNrItem */
+typedef struct X2N_FreqBandNrItem {
+	long	 freqBandIndicatorNr;
+	struct X2N_FreqBandNrItem__supportedSULBandList {
+		A_SEQUENCE_OF(struct X2N_SupportedSULFreqBandItem) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} supportedSULBandList;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FreqBandNrItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandNrItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FreqBandNrItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_FreqBandNrItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_FreqBandNrItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GBR-QosInformation.c b/asn1c_defs/X2N_GBR-QosInformation.c
new file mode 100644
index 0000000..e225221
--- /dev/null
+++ b/asn1c_defs/X2N_GBR-QosInformation.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GBR-QosInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_GBR_QosInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation, e_RAB_MaximumBitrateDL),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-MaximumBitrateDL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation, e_RAB_MaximumBitrateUL),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-MaximumBitrateUL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation, e_RAB_GuaranteedBitrateDL),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-GuaranteedBitrateDL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation, e_RAB_GuaranteedBitrateUL),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-GuaranteedBitrateUL"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GBR_QosInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P149,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GBR_QosInformation_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_GBR_QosInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GBR_QosInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-MaximumBitrateDL */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* e-RAB-MaximumBitrateUL */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e-RAB-GuaranteedBitrateDL */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RAB-GuaranteedBitrateUL */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GBR_QosInformation_specs_1 = {
+	sizeof(struct X2N_GBR_QosInformation),
+	offsetof(struct X2N_GBR_QosInformation, _asn_ctx),
+	asn_MAP_X2N_GBR_QosInformation_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_GBR_QosInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GBR_QosInformation = {
+	"GBR-QosInformation",
+	"GBR-QosInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GBR_QosInformation_tags_1,
+	sizeof(asn_DEF_X2N_GBR_QosInformation_tags_1)
+		/sizeof(asn_DEF_X2N_GBR_QosInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GBR_QosInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GBR_QosInformation_tags_1)
+		/sizeof(asn_DEF_X2N_GBR_QosInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GBR_QosInformation_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_GBR_QosInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GBR-QosInformation.h b/asn1c_defs/X2N_GBR-QosInformation.h
new file mode 100644
index 0000000..b9dd9ae
--- /dev/null
+++ b/asn1c_defs/X2N_GBR-QosInformation.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GBR_QosInformation_H_
+#define	_X2N_GBR_QosInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_BitRate.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GBR-QosInformation */
+typedef struct X2N_GBR_QosInformation {
+	X2N_BitRate_t	 e_RAB_MaximumBitrateDL;
+	X2N_BitRate_t	 e_RAB_MaximumBitrateUL;
+	X2N_BitRate_t	 e_RAB_GuaranteedBitrateDL;
+	X2N_BitRate_t	 e_RAB_GuaranteedBitrateUL;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GBR_QosInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GBR_QosInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GBR_QosInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GBR_QosInformation_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GBR_QosInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GNB-ID.c b/asn1c_defs/X2N_GNB-ID.c
new file mode 100644
index 0000000..c85d62b
--- /dev/null
+++ b/asn1c_defs/X2N_GNB-ID.c
@@ -0,0 +1,88 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GNB-ID.h"
+
+static int
+memb_X2N_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 22 && size <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_gNB_ID_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  22,  32 }	/* (SIZE(22..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_GNB_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_GNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GNB_ID, choice.gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_gNB_ID_constr_2,  memb_X2N_gNB_ID_constraint_1 },
+		0, 0, /* No default value */
+		"gNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_GNB_ID_specs_1 = {
+	sizeof(struct X2N_GNB_ID),
+	offsetof(struct X2N_GNB_ID, _asn_ctx),
+	offsetof(struct X2N_GNB_ID, present),
+	sizeof(((struct X2N_GNB_ID *)0)->present),
+	asn_MAP_X2N_GNB_ID_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0,
+	1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GNB_ID = {
+	"GNB-ID",
+	"GNB-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_GNB_ID_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_GNB_ID_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_GNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GNB-ID.h b/asn1c_defs/X2N_GNB-ID.h
new file mode 100644
index 0000000..af6d81c
--- /dev/null
+++ b/asn1c_defs/X2N_GNB-ID.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GNB_ID_H_
+#define	_X2N_GNB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_GNB_ID_PR {
+	X2N_GNB_ID_PR_NOTHING,	/* No components present */
+	X2N_GNB_ID_PR_gNB_ID
+	/* Extensions may appear below */
+	
+} X2N_GNB_ID_PR;
+
+/* X2N_GNB-ID */
+typedef struct X2N_GNB_ID {
+	X2N_GNB_ID_PR present;
+	union X2N_GNB_ID_u {
+		BIT_STRING_t	 gNB_ID;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GNB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GNB_ID;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_GNB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GNB_ID_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_GNB_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GNB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GNBOverloadInformation.c b/asn1c_defs/X2N_GNBOverloadInformation.c
new file mode 100644
index 0000000..179299c
--- /dev/null
+++ b/asn1c_defs/X2N_GNBOverloadInformation.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GNBOverloadInformation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_GNBOverloadInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_GNBOverloadInformation_value2enum_1[] = {
+	{ 0,	10,	"overloaded" },
+	{ 1,	14,	"not-overloaded" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_GNBOverloadInformation_enum2value_1[] = {
+	1,	/* not-overloaded(1) */
+	0	/* overloaded(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_GNBOverloadInformation_specs_1 = {
+	asn_MAP_X2N_GNBOverloadInformation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_GNBOverloadInformation_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GNBOverloadInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GNBOverloadInformation = {
+	"GNBOverloadInformation",
+	"GNBOverloadInformation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_GNBOverloadInformation_tags_1,
+	sizeof(asn_DEF_X2N_GNBOverloadInformation_tags_1)
+		/sizeof(asn_DEF_X2N_GNBOverloadInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GNBOverloadInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GNBOverloadInformation_tags_1)
+		/sizeof(asn_DEF_X2N_GNBOverloadInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_GNBOverloadInformation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_GNBOverloadInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GNBOverloadInformation.h b/asn1c_defs/X2N_GNBOverloadInformation.h
new file mode 100644
index 0000000..c54677f
--- /dev/null
+++ b/asn1c_defs/X2N_GNBOverloadInformation.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GNBOverloadInformation_H_
+#define	_X2N_GNBOverloadInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_GNBOverloadInformation {
+	X2N_GNBOverloadInformation_overloaded	= 0,
+	X2N_GNBOverloadInformation_not_overloaded	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_GNBOverloadInformation;
+
+/* X2N_GNBOverloadInformation */
+typedef long	 X2N_GNBOverloadInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GNBOverloadInformation;
+asn_struct_free_f X2N_GNBOverloadInformation_free;
+asn_struct_print_f X2N_GNBOverloadInformation_print;
+asn_constr_check_f X2N_GNBOverloadInformation_constraint;
+ber_type_decoder_f X2N_GNBOverloadInformation_decode_ber;
+der_type_encoder_f X2N_GNBOverloadInformation_encode_der;
+xer_type_decoder_f X2N_GNBOverloadInformation_decode_xer;
+xer_type_encoder_f X2N_GNBOverloadInformation_encode_xer;
+per_type_decoder_f X2N_GNBOverloadInformation_decode_uper;
+per_type_encoder_f X2N_GNBOverloadInformation_encode_uper;
+per_type_decoder_f X2N_GNBOverloadInformation_decode_aper;
+per_type_encoder_f X2N_GNBOverloadInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GNBOverloadInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GNBStatusIndication.c b/asn1c_defs/X2N_GNBStatusIndication.c
new file mode 100644
index 0000000..7304120
--- /dev/null
+++ b/asn1c_defs/X2N_GNBStatusIndication.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GNBStatusIndication.h"
+
+asn_TYPE_member_t asn_MBR_X2N_GNBStatusIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GNBStatusIndication, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P105,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GNBStatusIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GNBStatusIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GNBStatusIndication_specs_1 = {
+	sizeof(struct X2N_GNBStatusIndication),
+	offsetof(struct X2N_GNBStatusIndication, _asn_ctx),
+	asn_MAP_X2N_GNBStatusIndication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GNBStatusIndication = {
+	"GNBStatusIndication",
+	"GNBStatusIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GNBStatusIndication_tags_1,
+	sizeof(asn_DEF_X2N_GNBStatusIndication_tags_1)
+		/sizeof(asn_DEF_X2N_GNBStatusIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GNBStatusIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GNBStatusIndication_tags_1)
+		/sizeof(asn_DEF_X2N_GNBStatusIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GNBStatusIndication_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_GNBStatusIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GNBStatusIndication.h b/asn1c_defs/X2N_GNBStatusIndication.h
new file mode 100644
index 0000000..b7b40e9
--- /dev/null
+++ b/asn1c_defs/X2N_GNBStatusIndication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GNBStatusIndication_H_
+#define	_X2N_GNBStatusIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_GNBStatusIndication */
+typedef struct X2N_GNBStatusIndication {
+	X2N_ProtocolIE_Container_8180P105_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GNBStatusIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GNBStatusIndication;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GNBStatusIndication_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GNBStatusIndication_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GNBStatusIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GTP-TEI.c b/asn1c_defs/X2N_GTP-TEI.c
new file mode 100644
index 0000000..9855d5e
--- /dev/null
+++ b/asn1c_defs/X2N_GTP-TEI.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GTP-TEI.h"
+
+int
+X2N_GTP_TEI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_GTP_TEI_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  4,  4 }	/* (SIZE(4..4)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GTP_TEI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GTP_TEI = {
+	"GTP-TEI",
+	"GTP-TEI",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_GTP_TEI_tags_1,
+	sizeof(asn_DEF_X2N_GTP_TEI_tags_1)
+		/sizeof(asn_DEF_X2N_GTP_TEI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GTP_TEI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GTP_TEI_tags_1)
+		/sizeof(asn_DEF_X2N_GTP_TEI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_GTP_TEI_constr_1, X2N_GTP_TEI_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GTP-TEI.h b/asn1c_defs/X2N_GTP-TEI.h
new file mode 100644
index 0000000..57f55dc
--- /dev/null
+++ b/asn1c_defs/X2N_GTP-TEI.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GTP_TEI_H_
+#define	_X2N_GTP_TEI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_GTP-TEI */
+typedef OCTET_STRING_t	 X2N_GTP_TEI_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_GTP_TEI_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GTP_TEI;
+asn_struct_free_f X2N_GTP_TEI_free;
+asn_struct_print_f X2N_GTP_TEI_print;
+asn_constr_check_f X2N_GTP_TEI_constraint;
+ber_type_decoder_f X2N_GTP_TEI_decode_ber;
+der_type_encoder_f X2N_GTP_TEI_encode_der;
+xer_type_decoder_f X2N_GTP_TEI_decode_xer;
+xer_type_encoder_f X2N_GTP_TEI_encode_xer;
+per_type_decoder_f X2N_GTP_TEI_decode_uper;
+per_type_encoder_f X2N_GTP_TEI_encode_uper;
+per_type_decoder_f X2N_GTP_TEI_decode_aper;
+per_type_encoder_f X2N_GTP_TEI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GTP_TEI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GTPtunnelEndpoint.c b/asn1c_defs/X2N_GTPtunnelEndpoint.c
new file mode 100644
index 0000000..2716833
--- /dev/null
+++ b/asn1c_defs/X2N_GTPtunnelEndpoint.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GTPtunnelEndpoint.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_GTPtunnelEndpoint_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GTPtunnelEndpoint, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TransportLayerAddress,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GTPtunnelEndpoint, gTP_TEID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GTP_TEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gTP-TEID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GTPtunnelEndpoint, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P152,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GTPtunnelEndpoint_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_GTPtunnelEndpoint_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GTPtunnelEndpoint_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gTP-TEID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GTPtunnelEndpoint_specs_1 = {
+	sizeof(struct X2N_GTPtunnelEndpoint),
+	offsetof(struct X2N_GTPtunnelEndpoint, _asn_ctx),
+	asn_MAP_X2N_GTPtunnelEndpoint_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_GTPtunnelEndpoint_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GTPtunnelEndpoint = {
+	"GTPtunnelEndpoint",
+	"GTPtunnelEndpoint",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GTPtunnelEndpoint_tags_1,
+	sizeof(asn_DEF_X2N_GTPtunnelEndpoint_tags_1)
+		/sizeof(asn_DEF_X2N_GTPtunnelEndpoint_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GTPtunnelEndpoint_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GTPtunnelEndpoint_tags_1)
+		/sizeof(asn_DEF_X2N_GTPtunnelEndpoint_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GTPtunnelEndpoint_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GTPtunnelEndpoint_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GTPtunnelEndpoint.h b/asn1c_defs/X2N_GTPtunnelEndpoint.h
new file mode 100644
index 0000000..c5b242a
--- /dev/null
+++ b/asn1c_defs/X2N_GTPtunnelEndpoint.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GTPtunnelEndpoint_H_
+#define	_X2N_GTPtunnelEndpoint_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TransportLayerAddress.h"
+#include "X2N_GTP-TEI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GTPtunnelEndpoint */
+typedef struct X2N_GTPtunnelEndpoint {
+	X2N_TransportLayerAddress_t	 transportLayerAddress;
+	X2N_GTP_TEI_t	 gTP_TEID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GTPtunnelEndpoint_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GTPtunnelEndpoint;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GTPtunnelEndpoint_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GTPtunnelEndpoint_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GTPtunnelEndpoint_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GU-Group-ID.c b/asn1c_defs/X2N_GU-Group-ID.c
new file mode 100644
index 0000000..5cd7481
--- /dev/null
+++ b/asn1c_defs/X2N_GU-Group-ID.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GU-Group-ID.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_GU_Group_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GU_Group_ID, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GU_Group_ID, mME_Group_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MME_Group_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-Group-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GU_Group_ID, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P153,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GU_Group_ID_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_GU_Group_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GU_Group_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Group-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GU_Group_ID_specs_1 = {
+	sizeof(struct X2N_GU_Group_ID),
+	offsetof(struct X2N_GU_Group_ID, _asn_ctx),
+	asn_MAP_X2N_GU_Group_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_GU_Group_ID_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GU_Group_ID = {
+	"GU-Group-ID",
+	"GU-Group-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GU_Group_ID_tags_1,
+	sizeof(asn_DEF_X2N_GU_Group_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GU_Group_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GU_Group_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GU_Group_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GU_Group_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GU_Group_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GU_Group_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GU-Group-ID.h b/asn1c_defs/X2N_GU-Group-ID.h
new file mode 100644
index 0000000..8afe40b
--- /dev/null
+++ b/asn1c_defs/X2N_GU-Group-ID.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GU_Group_ID_H_
+#define	_X2N_GU_Group_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_MME-Group-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GU-Group-ID */
+typedef struct X2N_GU_Group_ID {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_MME_Group_ID_t	 mME_Group_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GU_Group_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GU_Group_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GU_Group_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GU_Group_ID_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GU_Group_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GUGroupIDList.c b/asn1c_defs/X2N_GUGroupIDList.c
new file mode 100644
index 0000000..5926dba
--- /dev/null
+++ b/asn1c_defs/X2N_GUGroupIDList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GUGroupIDList.h"
+
+#include "X2N_GU-Group-ID.h"
+static asn_per_constraints_t asn_PER_type_X2N_GUGroupIDList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_GUGroupIDList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GU_Group_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GUGroupIDList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_GUGroupIDList_specs_1 = {
+	sizeof(struct X2N_GUGroupIDList),
+	offsetof(struct X2N_GUGroupIDList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GUGroupIDList = {
+	"GUGroupIDList",
+	"GUGroupIDList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_GUGroupIDList_tags_1,
+	sizeof(asn_DEF_X2N_GUGroupIDList_tags_1)
+		/sizeof(asn_DEF_X2N_GUGroupIDList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GUGroupIDList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GUGroupIDList_tags_1)
+		/sizeof(asn_DEF_X2N_GUGroupIDList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_GUGroupIDList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_GUGroupIDList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_GUGroupIDList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GUGroupIDList.h b/asn1c_defs/X2N_GUGroupIDList.h
new file mode 100644
index 0000000..b86472f
--- /dev/null
+++ b/asn1c_defs/X2N_GUGroupIDList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GUGroupIDList_H_
+#define	_X2N_GUGroupIDList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GU_Group_ID;
+
+/* X2N_GUGroupIDList */
+typedef struct X2N_GUGroupIDList {
+	A_SEQUENCE_OF(struct X2N_GU_Group_ID) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GUGroupIDList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GUGroupIDList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GUGroupIDList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GUMMEI.c b/asn1c_defs/X2N_GUMMEI.c
new file mode 100644
index 0000000..d84d18b
--- /dev/null
+++ b/asn1c_defs/X2N_GUMMEI.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GUMMEI.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_GUMMEI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GUMMEI, gU_Group_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GU_Group_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gU-Group-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GUMMEI, mME_Code),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MME_Code,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-Code"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GUMMEI, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P154,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GUMMEI_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_GUMMEI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GUMMEI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gU-Group-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Code */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_GUMMEI_specs_1 = {
+	sizeof(struct X2N_GUMMEI),
+	offsetof(struct X2N_GUMMEI, _asn_ctx),
+	asn_MAP_X2N_GUMMEI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_GUMMEI_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GUMMEI = {
+	"GUMMEI",
+	"GUMMEI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GUMMEI_tags_1,
+	sizeof(asn_DEF_X2N_GUMMEI_tags_1)
+		/sizeof(asn_DEF_X2N_GUMMEI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GUMMEI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GUMMEI_tags_1)
+		/sizeof(asn_DEF_X2N_GUMMEI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GUMMEI_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GUMMEI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GUMMEI.h b/asn1c_defs/X2N_GUMMEI.h
new file mode 100644
index 0000000..c22e465
--- /dev/null
+++ b/asn1c_defs/X2N_GUMMEI.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GUMMEI_H_
+#define	_X2N_GUMMEI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GU-Group-ID.h"
+#include "X2N_MME-Code.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GUMMEI */
+typedef struct X2N_GUMMEI {
+	X2N_GU_Group_ID_t	 gU_Group_ID;
+	X2N_MME_Code_t	 mME_Code;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GUMMEI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GUMMEI;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GUMMEI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GlobalENB-ID.c b/asn1c_defs/X2N_GlobalENB-ID.c
new file mode 100644
index 0000000..129f317
--- /dev/null
+++ b/asn1c_defs/X2N_GlobalENB-ID.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GlobalENB-ID.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_GlobalENB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalENB_ID, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalENB_ID, eNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_ENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GlobalENB_ID, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P150,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GlobalENB_ID_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_GlobalENB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GlobalENB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalENB_ID_specs_1 = {
+	sizeof(struct X2N_GlobalENB_ID),
+	offsetof(struct X2N_GlobalENB_ID, _asn_ctx),
+	asn_MAP_X2N_GlobalENB_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_GlobalENB_ID_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GlobalENB_ID = {
+	"GlobalENB-ID",
+	"GlobalENB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GlobalENB_ID_tags_1,
+	sizeof(asn_DEF_X2N_GlobalENB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GlobalENB_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GlobalENB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GlobalENB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GlobalENB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GlobalENB_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GlobalENB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GlobalENB-ID.h b/asn1c_defs/X2N_GlobalENB-ID.h
new file mode 100644
index 0000000..5efdd19
--- /dev/null
+++ b/asn1c_defs/X2N_GlobalENB-ID.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GlobalENB_ID_H_
+#define	_X2N_GlobalENB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_ENB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GlobalENB-ID */
+typedef struct X2N_GlobalENB_ID {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_ENB_ID_t	 eNB_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GlobalENB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GlobalENB_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalENB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GlobalENB_ID_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GlobalENB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_GlobalGNB-ID.c b/asn1c_defs/X2N_GlobalGNB-ID.c
new file mode 100644
index 0000000..9bc69a1
--- /dev/null
+++ b/asn1c_defs/X2N_GlobalGNB-ID.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_GlobalGNB-ID.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_GlobalGNB_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalGNB_ID, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalGNB_ID, gNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_GNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_GlobalGNB_ID, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P151,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_GlobalGNB_ID_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_GlobalGNB_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GlobalGNB_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalGNB_ID_specs_1 = {
+	sizeof(struct X2N_GlobalGNB_ID),
+	offsetof(struct X2N_GlobalGNB_ID, _asn_ctx),
+	asn_MAP_X2N_GlobalGNB_ID_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_GlobalGNB_ID_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GlobalGNB_ID = {
+	"GlobalGNB-ID",
+	"GlobalGNB-ID",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GlobalGNB_ID_tags_1,
+	sizeof(asn_DEF_X2N_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GlobalGNB_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_GlobalGNB_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_GlobalGNB_ID_tags_1)
+		/sizeof(asn_DEF_X2N_GlobalGNB_ID_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GlobalGNB_ID_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GlobalGNB_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_GlobalGNB-ID.h b/asn1c_defs/X2N_GlobalGNB-ID.h
new file mode 100644
index 0000000..375a22e
--- /dev/null
+++ b/asn1c_defs/X2N_GlobalGNB-ID.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_GlobalGNB_ID_H_
+#define	_X2N_GlobalGNB_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_GNB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_GlobalGNB-ID */
+typedef struct X2N_GlobalGNB_ID {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_GNB_ID_t	 gNB_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GlobalGNB_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GlobalGNB_ID;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalGNB_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_GlobalGNB_ID_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_GlobalGNB_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HFN.c b/asn1c_defs/X2N_HFN.c
new file mode 100644
index 0000000..34edb83
--- /dev/null
+++ b/asn1c_defs/X2N_HFN.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HFN.h"
+
+int
+X2N_HFN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1048575)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_HFN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 20, -1,  0,  1048575 }	/* (0..1048575) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HFN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HFN = {
+	"HFN",
+	"HFN",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_HFN_tags_1,
+	sizeof(asn_DEF_X2N_HFN_tags_1)
+		/sizeof(asn_DEF_X2N_HFN_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HFN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HFN_tags_1)
+		/sizeof(asn_DEF_X2N_HFN_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_HFN_constr_1, X2N_HFN_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_HFN.h b/asn1c_defs/X2N_HFN.h
new file mode 100644
index 0000000..614d66e
--- /dev/null
+++ b/asn1c_defs/X2N_HFN.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HFN_H_
+#define	_X2N_HFN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HFN */
+typedef long	 X2N_HFN_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_HFN_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HFN;
+asn_struct_free_f X2N_HFN_free;
+asn_struct_print_f X2N_HFN_print;
+asn_constr_check_f X2N_HFN_constraint;
+ber_type_decoder_f X2N_HFN_decode_ber;
+der_type_encoder_f X2N_HFN_encode_der;
+xer_type_decoder_f X2N_HFN_decode_xer;
+xer_type_encoder_f X2N_HFN_encode_xer;
+per_type_decoder_f X2N_HFN_decode_uper;
+per_type_encoder_f X2N_HFN_encode_uper;
+per_type_decoder_f X2N_HFN_decode_aper;
+per_type_encoder_f X2N_HFN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HFN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HFNModified.c b/asn1c_defs/X2N_HFNModified.c
new file mode 100644
index 0000000..f5a1967
--- /dev/null
+++ b/asn1c_defs/X2N_HFNModified.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HFNModified.h"
+
+int
+X2N_HFNModified_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 131071)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_HFNModified_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 17, -1,  0,  131071 }	/* (0..131071) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HFNModified_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HFNModified = {
+	"HFNModified",
+	"HFNModified",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_HFNModified_tags_1,
+	sizeof(asn_DEF_X2N_HFNModified_tags_1)
+		/sizeof(asn_DEF_X2N_HFNModified_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HFNModified_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HFNModified_tags_1)
+		/sizeof(asn_DEF_X2N_HFNModified_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_HFNModified_constr_1, X2N_HFNModified_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_HFNModified.h b/asn1c_defs/X2N_HFNModified.h
new file mode 100644
index 0000000..e7a39dd
--- /dev/null
+++ b/asn1c_defs/X2N_HFNModified.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HFNModified_H_
+#define	_X2N_HFNModified_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HFNModified */
+typedef long	 X2N_HFNModified_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_HFNModified_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HFNModified;
+asn_struct_free_f X2N_HFNModified_free;
+asn_struct_print_f X2N_HFNModified_print;
+asn_constr_check_f X2N_HFNModified_constraint;
+ber_type_decoder_f X2N_HFNModified_decode_ber;
+der_type_encoder_f X2N_HFNModified_encode_der;
+xer_type_decoder_f X2N_HFNModified_decode_xer;
+xer_type_encoder_f X2N_HFNModified_encode_xer;
+per_type_decoder_f X2N_HFNModified_decode_uper;
+per_type_encoder_f X2N_HFNModified_encode_uper;
+per_type_decoder_f X2N_HFNModified_decode_aper;
+per_type_encoder_f X2N_HFNModified_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HFNModified_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HFNforPDCP-SNlength18.c b/asn1c_defs/X2N_HFNforPDCP-SNlength18.c
new file mode 100644
index 0000000..23421ee
--- /dev/null
+++ b/asn1c_defs/X2N_HFNforPDCP-SNlength18.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HFNforPDCP-SNlength18.h"
+
+int
+X2N_HFNforPDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 16383)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_HFNforPDCP_SNlength18_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 14,  14,  0,  16383 }	/* (0..16383) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HFNforPDCP_SNlength18 = {
+	"HFNforPDCP-SNlength18",
+	"HFNforPDCP-SNlength18",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1,
+	sizeof(asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_HFNforPDCP_SNlength18_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_HFNforPDCP_SNlength18_constr_1, X2N_HFNforPDCP_SNlength18_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_HFNforPDCP-SNlength18.h b/asn1c_defs/X2N_HFNforPDCP-SNlength18.h
new file mode 100644
index 0000000..ab56697
--- /dev/null
+++ b/asn1c_defs/X2N_HFNforPDCP-SNlength18.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HFNforPDCP_SNlength18_H_
+#define	_X2N_HFNforPDCP_SNlength18_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HFNforPDCP-SNlength18 */
+typedef long	 X2N_HFNforPDCP_SNlength18_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_HFNforPDCP_SNlength18_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HFNforPDCP_SNlength18;
+asn_struct_free_f X2N_HFNforPDCP_SNlength18_free;
+asn_struct_print_f X2N_HFNforPDCP_SNlength18_print;
+asn_constr_check_f X2N_HFNforPDCP_SNlength18_constraint;
+ber_type_decoder_f X2N_HFNforPDCP_SNlength18_decode_ber;
+der_type_encoder_f X2N_HFNforPDCP_SNlength18_encode_der;
+xer_type_decoder_f X2N_HFNforPDCP_SNlength18_decode_xer;
+xer_type_encoder_f X2N_HFNforPDCP_SNlength18_encode_xer;
+per_type_decoder_f X2N_HFNforPDCP_SNlength18_decode_uper;
+per_type_encoder_f X2N_HFNforPDCP_SNlength18_encode_uper;
+per_type_decoder_f X2N_HFNforPDCP_SNlength18_decode_aper;
+per_type_encoder_f X2N_HFNforPDCP_SNlength18_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HFNforPDCP_SNlength18_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HWLoadIndicator.c b/asn1c_defs/X2N_HWLoadIndicator.c
new file mode 100644
index 0000000..a1a094e
--- /dev/null
+++ b/asn1c_defs/X2N_HWLoadIndicator.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HWLoadIndicator.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_HWLoadIndicator_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HWLoadIndicator, dLHWLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dLHWLoadIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HWLoadIndicator, uLHWLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLHWLoadIndicator"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_HWLoadIndicator, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P156,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_HWLoadIndicator_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_HWLoadIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HWLoadIndicator_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dLHWLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLHWLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HWLoadIndicator_specs_1 = {
+	sizeof(struct X2N_HWLoadIndicator),
+	offsetof(struct X2N_HWLoadIndicator, _asn_ctx),
+	asn_MAP_X2N_HWLoadIndicator_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_HWLoadIndicator_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HWLoadIndicator = {
+	"HWLoadIndicator",
+	"HWLoadIndicator",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HWLoadIndicator_tags_1,
+	sizeof(asn_DEF_X2N_HWLoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_HWLoadIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HWLoadIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HWLoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_HWLoadIndicator_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HWLoadIndicator_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HWLoadIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HWLoadIndicator.h b/asn1c_defs/X2N_HWLoadIndicator.h
new file mode 100644
index 0000000..7f0f40d
--- /dev/null
+++ b/asn1c_defs/X2N_HWLoadIndicator.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HWLoadIndicator_H_
+#define	_X2N_HWLoadIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_LoadIndicator.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_HWLoadIndicator */
+typedef struct X2N_HWLoadIndicator {
+	X2N_LoadIndicator_t	 dLHWLoadIndicator;
+	X2N_LoadIndicator_t	 uLHWLoadIndicator;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HWLoadIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HWLoadIndicator;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HWLoadIndicator_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HWLoadIndicator_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HWLoadIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverCancel.c b/asn1c_defs/X2N_HandoverCancel.c
new file mode 100644
index 0000000..f141830
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverCancel.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverCancel.h"
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverCancel_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverCancel_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverCancel_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverCancel_specs_1 = {
+	sizeof(struct X2N_HandoverCancel),
+	offsetof(struct X2N_HandoverCancel, _asn_ctx),
+	asn_MAP_X2N_HandoverCancel_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverCancel = {
+	"HandoverCancel",
+	"HandoverCancel",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverCancel_tags_1,
+	sizeof(asn_DEF_X2N_HandoverCancel_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverCancel_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverCancel_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverCancel_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverCancel_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverCancel_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_HandoverCancel_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverCancel.h b/asn1c_defs/X2N_HandoverCancel.h
new file mode 100644
index 0000000..9ed6f8d
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverCancel.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverCancel_H_
+#define	_X2N_HandoverCancel_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HandoverCancel */
+typedef struct X2N_HandoverCancel {
+	X2N_ProtocolIE_Container_8180P6_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverCancel_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverCancel;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverCancel_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverCancel_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverCancel_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverPreparationFailure.c b/asn1c_defs/X2N_HandoverPreparationFailure.c
new file mode 100644
index 0000000..6e5f6c0
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverPreparationFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverPreparationFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverPreparationFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverPreparationFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverPreparationFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverPreparationFailure_specs_1 = {
+	sizeof(struct X2N_HandoverPreparationFailure),
+	offsetof(struct X2N_HandoverPreparationFailure, _asn_ctx),
+	asn_MAP_X2N_HandoverPreparationFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverPreparationFailure = {
+	"HandoverPreparationFailure",
+	"HandoverPreparationFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverPreparationFailure_tags_1,
+	sizeof(asn_DEF_X2N_HandoverPreparationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverPreparationFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverPreparationFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverPreparationFailure_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverPreparationFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverPreparationFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_HandoverPreparationFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverPreparationFailure.h b/asn1c_defs/X2N_HandoverPreparationFailure.h
new file mode 100644
index 0000000..4991b11
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverPreparationFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverPreparationFailure_H_
+#define	_X2N_HandoverPreparationFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HandoverPreparationFailure */
+typedef struct X2N_HandoverPreparationFailure {
+	X2N_ProtocolIE_Container_8180P2_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverPreparationFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverPreparationFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverPreparationFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverPreparationFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverPreparationFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverReport.c b/asn1c_defs/X2N_HandoverReport.c
new file mode 100644
index 0000000..a1a1815
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverReport.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverReport.h"
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverReport_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverReport_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverReport_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverReport_specs_1 = {
+	sizeof(struct X2N_HandoverReport),
+	offsetof(struct X2N_HandoverReport, _asn_ctx),
+	asn_MAP_X2N_HandoverReport_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReport = {
+	"HandoverReport",
+	"HandoverReport",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverReport_tags_1,
+	sizeof(asn_DEF_X2N_HandoverReport_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverReport_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverReport_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverReport_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverReport_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverReport_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_HandoverReport_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverReport.h b/asn1c_defs/X2N_HandoverReport.h
new file mode 100644
index 0000000..837276b
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverReport.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverReport_H_
+#define	_X2N_HandoverReport_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HandoverReport */
+typedef struct X2N_HandoverReport {
+	X2N_ProtocolIE_Container_8180P3_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverReport_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReport;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverReport_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverReport_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverReport_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverReportType.c b/asn1c_defs/X2N_HandoverReportType.c
new file mode 100644
index 0000000..74f6563
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverReportType.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverReportType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_HandoverReportType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_HandoverReportType_value2enum_1[] = {
+	{ 0,	10,	"hoTooEarly" },
+	{ 1,	13,	"hoToWrongCell" },
+	{ 2,	16,	"interRATpingpong" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_HandoverReportType_enum2value_1[] = {
+	1,	/* hoToWrongCell(1) */
+	0,	/* hoTooEarly(0) */
+	2	/* interRATpingpong(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_HandoverReportType_specs_1 = {
+	asn_MAP_X2N_HandoverReportType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_HandoverReportType_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverReportType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReportType = {
+	"HandoverReportType",
+	"HandoverReportType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_HandoverReportType_tags_1,
+	sizeof(asn_DEF_X2N_HandoverReportType_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverReportType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverReportType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverReportType_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverReportType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_HandoverReportType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_HandoverReportType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverReportType.h b/asn1c_defs/X2N_HandoverReportType.h
new file mode 100644
index 0000000..299de90
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverReportType.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverReportType_H_
+#define	_X2N_HandoverReportType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_HandoverReportType {
+	X2N_HandoverReportType_hoTooEarly	= 0,
+	X2N_HandoverReportType_hoToWrongCell	= 1,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_HandoverReportType_interRATpingpong	= 2
+} e_X2N_HandoverReportType;
+
+/* X2N_HandoverReportType */
+typedef long	 X2N_HandoverReportType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReportType;
+asn_struct_free_f X2N_HandoverReportType_free;
+asn_struct_print_f X2N_HandoverReportType_print;
+asn_constr_check_f X2N_HandoverReportType_constraint;
+ber_type_decoder_f X2N_HandoverReportType_decode_ber;
+der_type_encoder_f X2N_HandoverReportType_encode_der;
+xer_type_decoder_f X2N_HandoverReportType_decode_xer;
+xer_type_encoder_f X2N_HandoverReportType_encode_xer;
+per_type_decoder_f X2N_HandoverReportType_decode_uper;
+per_type_encoder_f X2N_HandoverReportType_encode_uper;
+per_type_decoder_f X2N_HandoverReportType_decode_aper;
+per_type_encoder_f X2N_HandoverReportType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverReportType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverRequest.c b/asn1c_defs/X2N_HandoverRequest.c
new file mode 100644
index 0000000..f913840
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequest_specs_1 = {
+	sizeof(struct X2N_HandoverRequest),
+	offsetof(struct X2N_HandoverRequest, _asn_ctx),
+	asn_MAP_X2N_HandoverRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequest = {
+	"HandoverRequest",
+	"HandoverRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRequest_tags_1,
+	sizeof(asn_DEF_X2N_HandoverRequest_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRequest_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_HandoverRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverRequest.h b/asn1c_defs/X2N_HandoverRequest.h
new file mode 100644
index 0000000..5f36300
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverRequest_H_
+#define	_X2N_HandoverRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HandoverRequest */
+typedef struct X2N_HandoverRequest {
+	X2N_ProtocolIE_Container_8180P0_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverRequestAcknowledge.c b/asn1c_defs/X2N_HandoverRequestAcknowledge.c
new file mode 100644
index 0000000..d344ccb
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_HandoverRequestAcknowledge),
+	offsetof(struct X2N_HandoverRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_HandoverRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequestAcknowledge = {
+	"HandoverRequestAcknowledge",
+	"HandoverRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_HandoverRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverRequestAcknowledge.h b/asn1c_defs/X2N_HandoverRequestAcknowledge.h
new file mode 100644
index 0000000..a46df31
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverRequestAcknowledge_H_
+#define	_X2N_HandoverRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_HandoverRequestAcknowledge */
+typedef struct X2N_HandoverRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P1_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_HandoverRestrictionList.c b/asn1c_defs/X2N_HandoverRestrictionList.c
new file mode 100644
index 0000000..19d8c3c
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRestrictionList.c
@@ -0,0 +1,106 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_HandoverRestrictionList.h"
+
+#include "X2N_EPLMNs.h"
+#include "X2N_ForbiddenTAs.h"
+#include "X2N_ForbiddenLAs.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_HandoverRestrictionList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList, servingPLMN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servingPLMN"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_HandoverRestrictionList, equivalentPLMNs),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EPLMNs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"equivalentPLMNs"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_HandoverRestrictionList, forbiddenTAs),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ForbiddenTAs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"forbiddenTAs"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_HandoverRestrictionList, forbiddenLAs),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ForbiddenLAs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"forbiddenLAs"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_HandoverRestrictionList, forbiddenInterRATs),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ForbiddenInterRATs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"forbiddenInterRATs"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_HandoverRestrictionList, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P155,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_HandoverRestrictionList_oms_1[] = { 1, 2, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRestrictionList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRestrictionList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servingPLMN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* equivalentPLMNs */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* forbiddenTAs */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* forbiddenLAs */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* forbiddenInterRATs */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRestrictionList_specs_1 = {
+	sizeof(struct X2N_HandoverRestrictionList),
+	offsetof(struct X2N_HandoverRestrictionList, _asn_ctx),
+	asn_MAP_X2N_HandoverRestrictionList_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_HandoverRestrictionList_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRestrictionList = {
+	"HandoverRestrictionList",
+	"HandoverRestrictionList",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRestrictionList_tags_1,
+	sizeof(asn_DEF_X2N_HandoverRestrictionList_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRestrictionList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_HandoverRestrictionList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRestrictionList_tags_1)
+		/sizeof(asn_DEF_X2N_HandoverRestrictionList_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRestrictionList_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_HandoverRestrictionList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_HandoverRestrictionList.h b/asn1c_defs/X2N_HandoverRestrictionList.h
new file mode 100644
index 0000000..b246036
--- /dev/null
+++ b/asn1c_defs/X2N_HandoverRestrictionList.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_HandoverRestrictionList_H_
+#define	_X2N_HandoverRestrictionList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_ForbiddenInterRATs.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_EPLMNs;
+struct X2N_ForbiddenTAs;
+struct X2N_ForbiddenLAs;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_HandoverRestrictionList */
+typedef struct X2N_HandoverRestrictionList {
+	X2N_PLMN_Identity_t	 servingPLMN;
+	struct X2N_EPLMNs	*equivalentPLMNs;	/* OPTIONAL */
+	struct X2N_ForbiddenTAs	*forbiddenTAs;	/* OPTIONAL */
+	struct X2N_ForbiddenLAs	*forbiddenLAs;	/* OPTIONAL */
+	X2N_ForbiddenInterRATs_t	*forbiddenInterRATs;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRestrictionList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRestrictionList;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRestrictionList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRestrictionList_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_HandoverRestrictionList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InitiatingMessage.c b/asn1c_defs/X2N_InitiatingMessage.c
new file mode 100644
index 0000000..7ea0e78
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingMessage.c
@@ -0,0 +1,1018 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InitiatingMessage.h"
+
+static const long asn_VAL_1_X2N_id_handoverPreparation = 0;
+static const long asn_VAL_1_X2N_reject = 0;
+static const long asn_VAL_2_X2N_id_reset = 7;
+static const long asn_VAL_2_X2N_reject = 0;
+static const long asn_VAL_3_X2N_id_x2Setup = 6;
+static const long asn_VAL_3_X2N_reject = 0;
+static const long asn_VAL_4_X2N_id_resourceStatusReportingInitiation = 9;
+static const long asn_VAL_4_X2N_reject = 0;
+static const long asn_VAL_5_X2N_id_eNBConfigurationUpdate = 8;
+static const long asn_VAL_5_X2N_reject = 0;
+static const long asn_VAL_6_X2N_id_mobilitySettingsChange = 12;
+static const long asn_VAL_6_X2N_reject = 0;
+static const long asn_VAL_7_X2N_id_cellActivation = 15;
+static const long asn_VAL_7_X2N_reject = 0;
+static const long asn_VAL_8_X2N_id_seNBAdditionPreparation = 19;
+static const long asn_VAL_8_X2N_reject = 0;
+static const long asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation = 21;
+static const long asn_VAL_9_X2N_reject = 0;
+static const long asn_VAL_10_X2N_id_seNBinitiatedSeNBModification = 22;
+static const long asn_VAL_10_X2N_reject = 0;
+static const long asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease = 24;
+static const long asn_VAL_11_X2N_reject = 0;
+static const long asn_VAL_12_X2N_id_x2Removal = 18;
+static const long asn_VAL_12_X2N_reject = 0;
+static const long asn_VAL_13_X2N_id_retrieveUEContext = 26;
+static const long asn_VAL_13_X2N_reject = 0;
+static const long asn_VAL_14_X2N_id_sgNBAdditionPreparation = 27;
+static const long asn_VAL_14_X2N_reject = 0;
+static const long asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation = 29;
+static const long asn_VAL_15_X2N_reject = 0;
+static const long asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification = 30;
+static const long asn_VAL_16_X2N_reject = 0;
+static const long asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease = 31;
+static const long asn_VAL_17_X2N_ignore = 1;
+static const long asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease = 32;
+static const long asn_VAL_18_X2N_reject = 0;
+static const long asn_VAL_19_X2N_id_sgNBChange = 34;
+static const long asn_VAL_19_X2N_reject = 0;
+static const long asn_VAL_20_X2N_id_endcX2Setup = 36;
+static const long asn_VAL_20_X2N_reject = 0;
+static const long asn_VAL_21_X2N_id_endcConfigurationUpdate = 37;
+static const long asn_VAL_21_X2N_reject = 0;
+static const long asn_VAL_22_X2N_id_endcCellActivation = 39;
+static const long asn_VAL_22_X2N_reject = 0;
+static const long asn_VAL_23_X2N_id_endcPartialReset = 40;
+static const long asn_VAL_23_X2N_reject = 0;
+static const long asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination = 41;
+static const long asn_VAL_24_X2N_reject = 0;
+static const long asn_VAL_25_X2N_id_endcX2Removal = 43;
+static const long asn_VAL_25_X2N_reject = 0;
+static const long asn_VAL_26_X2N_id_snStatusTransfer = 4;
+static const long asn_VAL_26_X2N_ignore = 1;
+static const long asn_VAL_27_X2N_id_uEContextRelease = 5;
+static const long asn_VAL_27_X2N_ignore = 1;
+static const long asn_VAL_28_X2N_id_handoverCancel = 1;
+static const long asn_VAL_28_X2N_ignore = 1;
+static const long asn_VAL_29_X2N_id_errorIndication = 3;
+static const long asn_VAL_29_X2N_ignore = 1;
+static const long asn_VAL_30_X2N_id_resourceStatusReporting = 10;
+static const long asn_VAL_30_X2N_ignore = 1;
+static const long asn_VAL_31_X2N_id_loadIndication = 2;
+static const long asn_VAL_31_X2N_ignore = 1;
+static const long asn_VAL_32_X2N_id_privateMessage = 11;
+static const long asn_VAL_32_X2N_ignore = 1;
+static const long asn_VAL_33_X2N_id_rLFIndication = 13;
+static const long asn_VAL_33_X2N_ignore = 1;
+static const long asn_VAL_34_X2N_id_handoverReport = 14;
+static const long asn_VAL_34_X2N_ignore = 1;
+static const long asn_VAL_35_X2N_id_x2Release = 16;
+static const long asn_VAL_35_X2N_reject = 0;
+static const long asn_VAL_36_X2N_id_x2APMessageTransfer = 17;
+static const long asn_VAL_36_X2N_reject = 0;
+static const long asn_VAL_37_X2N_id_seNBReconfigurationCompletion = 20;
+static const long asn_VAL_37_X2N_ignore = 1;
+static const long asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease = 23;
+static const long asn_VAL_38_X2N_ignore = 1;
+static const long asn_VAL_39_X2N_id_seNBCounterCheck = 25;
+static const long asn_VAL_39_X2N_reject = 0;
+static const long asn_VAL_40_X2N_id_sgNBReconfigurationCompletion = 28;
+static const long asn_VAL_40_X2N_ignore = 1;
+static const long asn_VAL_41_X2N_id_sgNBCounterCheck = 33;
+static const long asn_VAL_41_X2N_reject = 0;
+static const long asn_VAL_42_X2N_id_rRCTransfer = 35;
+static const long asn_VAL_42_X2N_reject = 0;
+static const long asn_VAL_43_X2N_id_secondaryRATDataUsageReport = 38;
+static const long asn_VAL_43_X2N_reject = 0;
+static const long asn_VAL_44_X2N_id_SgNBActivityNotification = 42;
+static const long asn_VAL_44_X2N_reject = 0;
+static const long asn_VAL_45_X2N_id_dataForwardingAddressIndication = 44;
+static const long asn_VAL_45_X2N_ignore = 1;
+static const long asn_VAL_46_X2N_id_gNBStatusIndication = 45;
+static const long asn_VAL_46_X2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverPreparationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_1_X2N_id_handoverPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_1_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResetRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResetResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_2_X2N_id_reset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_2_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_3_X2N_id_x2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_3_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_4_X2N_id_resourceStatusReportingInitiation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_4_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_5_X2N_id_eNBConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_5_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_MobilityChangeRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_6_X2N_id_mobilitySettingsChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_6_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_CellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_7_X2N_id_cellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_7_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_8_X2N_id_seNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_8_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_9_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_10_X2N_id_seNBinitiatedSeNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_10_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_11_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_12_X2N_id_x2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_12_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RetrieveUEContextRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_13_X2N_id_retrieveUEContext },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_13_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_14_X2N_id_sgNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_14_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_15_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_16_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_17_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_18_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBChangeRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_19_X2N_id_sgNBChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_19_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_20_X2N_id_endcX2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_20_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_21_X2N_id_endcConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_21_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCCellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_22_X2N_id_endcCellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_22_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCPartialResetRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCPartialResetConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_23_X2N_id_endcPartialReset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_23_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_24_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_25_X2N_id_endcX2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_25_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SNStatusTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_26_X2N_id_snStatusTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_26_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_UEContextRelease },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_27_X2N_id_uEContextRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_27_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverCancel },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_28_X2N_id_handoverCancel },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_28_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ErrorIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_29_X2N_id_errorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_29_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusUpdate },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_30_X2N_id_resourceStatusReporting },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_30_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_LoadInformation },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_31_X2N_id_loadIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_31_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_PrivateMessage },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_32_X2N_id_privateMessage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_32_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RLFIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_33_X2N_id_rLFIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_33_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_34_X2N_id_handoverReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_34_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2Release },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_35_X2N_id_x2Release },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_35_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2APMessageTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_36_X2N_id_x2APMessageTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_36_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_37_X2N_id_seNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_37_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_38_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_39_X2N_id_seNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_39_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_40_X2N_id_sgNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_40_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_41_X2N_id_sgNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_41_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RRCTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_42_X2N_id_rRCTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_42_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SecondaryRATDataUsageReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_43_X2N_id_secondaryRATDataUsageReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_43_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBActivityNotification },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_44_X2N_id_SgNBActivityNotification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_44_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_DataForwardingAddressIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_45_X2N_id_dataForwardingAddressIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_45_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_GNBStatusIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_46_X2N_id_gNBStatusIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_46_X2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 46, 5, asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_X2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_InitiatingMessage_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_InitiatingMessage, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_InitiatingMessage_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 0; /* &InitiatingMessage */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_InitiatingMessage, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.HandoverRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ResetRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResetRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResetRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.X2SetupRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2SetupRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ResourceStatusRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResourceStatusRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENBConfigurationUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENBConfigurationUpdate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.MobilityChangeRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityChangeRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.CellActivationRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellActivationRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBAdditionRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBAdditionRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBModificationRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBModificationRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBReleaseRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBReleaseRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.X2RemovalRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2RemovalRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.RetrieveUEContextRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RetrieveUEContextRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBAdditionRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBAdditionRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBModificationRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBModificationRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBReleaseRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReleaseRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBReleaseRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReleaseRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBChangeRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBChangeRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENDCX2SetupRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2SetupRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENDCConfigurationUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCConfigurationUpdate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENDCCellActivationRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCCellActivationRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENDCPartialResetRequired),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCPartialResetRequired,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCPartialResetRequired"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.EUTRANRCellResourceCoordinationRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EUTRANRCellResourceCoordinationRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ENDCX2RemovalRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2RemovalRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SNStatusTransfer),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SNStatusTransfer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SNStatusTransfer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.UEContextRelease),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEContextRelease,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEContextRelease"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.HandoverCancel),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverCancel,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverCancel"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ErrorIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ErrorIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ErrorIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.ResourceStatusUpdate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResourceStatusUpdate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.LoadInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_LoadInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LoadInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.PrivateMessage),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_PrivateMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PrivateMessage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.RLFIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLFIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLFIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.HandoverReport),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverReport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverReport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.X2Release),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2Release,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2Release"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.X2APMessageTransfer),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2APMessageTransfer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2APMessageTransfer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBReconfigurationComplete),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReconfigurationComplete,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBReconfigurationComplete"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBReleaseRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBReleaseRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SeNBCounterCheckRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBCounterCheckRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBCounterCheckRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBReconfigurationComplete),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReconfigurationComplete,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReconfigurationComplete"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBCounterCheckRequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBCounterCheckRequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBCounterCheckRequest"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.RRCTransfer),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RRCTransfer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRCTransfer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SecondaryRATDataUsageReport),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SecondaryRATDataUsageReport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SecondaryRATDataUsageReport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.SgNBActivityNotification),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBActivityNotification,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBActivityNotification"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.DataForwardingAddressIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataForwardingAddressIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DataForwardingAddressIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage__value, choice.GNBStatusIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GNBStatusIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GNBStatusIndication"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 45 }, /* HandoverRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 44 }, /* ResetRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 43 }, /* X2SetupRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 42 }, /* ResourceStatusRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 41 }, /* ENBConfigurationUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 40 }, /* MobilityChangeRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 39 }, /* CellActivationRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 38 }, /* SeNBAdditionRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 37 }, /* SeNBModificationRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 36 }, /* SeNBModificationRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 35 }, /* SeNBReleaseRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 11, -11, 34 }, /* X2RemovalRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -12, 33 }, /* RetrieveUEContextRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -13, 32 }, /* SgNBAdditionRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -14, 31 }, /* SgNBModificationRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -15, 30 }, /* SgNBModificationRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 16, -16, 29 }, /* SgNBReleaseRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 17, -17, 28 }, /* SgNBReleaseRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 18, -18, 27 }, /* SgNBChangeRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 19, -19, 26 }, /* ENDCX2SetupRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 20, -20, 25 }, /* ENDCConfigurationUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 21, -21, 24 }, /* ENDCCellActivationRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 22, -22, 23 }, /* ENDCPartialResetRequired */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 23, -23, 22 }, /* EUTRANRCellResourceCoordinationRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 24, -24, 21 }, /* ENDCX2RemovalRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 25, -25, 20 }, /* SNStatusTransfer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 26, -26, 19 }, /* UEContextRelease */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 27, -27, 18 }, /* HandoverCancel */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 28, -28, 17 }, /* ErrorIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 29, -29, 16 }, /* ResourceStatusUpdate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 30, -30, 15 }, /* LoadInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 31, -31, 14 }, /* PrivateMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 32, -32, 13 }, /* RLFIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 33, -33, 12 }, /* HandoverReport */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 34, -34, 11 }, /* X2Release */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 35, -35, 10 }, /* X2APMessageTransfer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 36, -36, 9 }, /* SeNBReconfigurationComplete */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 37, -37, 8 }, /* SeNBReleaseRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 38, -38, 7 }, /* SeNBCounterCheckRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 39, -39, 6 }, /* SgNBReconfigurationComplete */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 40, -40, 5 }, /* SgNBCounterCheckRequest */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 41, -41, 4 }, /* RRCTransfer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 42, -42, 3 }, /* SecondaryRATDataUsageReport */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 43, -43, 2 }, /* SgNBActivityNotification */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 44, -44, 1 }, /* DataForwardingAddressIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 45, -45, 0 } /* GNBStatusIndication */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_4 = {
+	sizeof(struct X2N_InitiatingMessage__value),
+	offsetof(struct X2N_InitiatingMessage__value, _asn_ctx),
+	offsetof(struct X2N_InitiatingMessage__value, present),
+	sizeof(((struct X2N_InitiatingMessage__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_4,
+	46,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_4,
+	46,	/* Elements count */
+	&asn_SPC_X2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_InitiatingMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_X2N_procedureCode_constr_2,  memb_X2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_InitiatingMessage_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_InitiatingMessage, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_4,
+		select_InitiatingMessage_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_4,  memb_X2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_InitiatingMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_InitiatingMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_InitiatingMessage_specs_1 = {
+	sizeof(struct X2N_InitiatingMessage),
+	offsetof(struct X2N_InitiatingMessage, _asn_ctx),
+	asn_MAP_X2N_InitiatingMessage_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingMessage = {
+	"InitiatingMessage",
+	"InitiatingMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_InitiatingMessage_tags_1,
+	sizeof(asn_DEF_X2N_InitiatingMessage_tags_1)
+		/sizeof(asn_DEF_X2N_InitiatingMessage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_InitiatingMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_InitiatingMessage_tags_1)
+		/sizeof(asn_DEF_X2N_InitiatingMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_InitiatingMessage_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_InitiatingMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InitiatingMessage.h b/asn1c_defs/X2N_InitiatingMessage.h
new file mode 100644
index 0000000..347a7b5
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingMessage.h
@@ -0,0 +1,242 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InitiatingMessage_H_
+#define	_X2N_InitiatingMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProcedureCode.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "X2N_HandoverRequest.h"
+#include "X2N_HandoverRequestAcknowledge.h"
+#include "X2N_HandoverPreparationFailure.h"
+#include "X2N_ResetRequest.h"
+#include "X2N_ResetResponse.h"
+#include "X2N_X2SetupRequest.h"
+#include "X2N_X2SetupResponse.h"
+#include "X2N_X2SetupFailure.h"
+#include "X2N_ResourceStatusRequest.h"
+#include "X2N_ResourceStatusResponse.h"
+#include "X2N_ResourceStatusFailure.h"
+#include "X2N_ENBConfigurationUpdate.h"
+#include "X2N_ENBConfigurationUpdateAcknowledge.h"
+#include "X2N_ENBConfigurationUpdateFailure.h"
+#include "X2N_MobilityChangeRequest.h"
+#include "X2N_MobilityChangeAcknowledge.h"
+#include "X2N_MobilityChangeFailure.h"
+#include "X2N_CellActivationRequest.h"
+#include "X2N_CellActivationResponse.h"
+#include "X2N_CellActivationFailure.h"
+#include "X2N_SeNBAdditionRequest.h"
+#include "X2N_SeNBAdditionRequestAcknowledge.h"
+#include "X2N_SeNBAdditionRequestReject.h"
+#include "X2N_SeNBModificationRequest.h"
+#include "X2N_SeNBModificationRequestAcknowledge.h"
+#include "X2N_SeNBModificationRequestReject.h"
+#include "X2N_SeNBModificationRequired.h"
+#include "X2N_SeNBModificationConfirm.h"
+#include "X2N_SeNBModificationRefuse.h"
+#include "X2N_SeNBReleaseRequired.h"
+#include "X2N_SeNBReleaseConfirm.h"
+#include "X2N_X2RemovalRequest.h"
+#include "X2N_X2RemovalResponse.h"
+#include "X2N_X2RemovalFailure.h"
+#include "X2N_RetrieveUEContextRequest.h"
+#include "X2N_RetrieveUEContextResponse.h"
+#include "X2N_RetrieveUEContextFailure.h"
+#include "X2N_SgNBAdditionRequest.h"
+#include "X2N_SgNBAdditionRequestAcknowledge.h"
+#include "X2N_SgNBAdditionRequestReject.h"
+#include "X2N_SgNBModificationRequest.h"
+#include "X2N_SgNBModificationRequestAcknowledge.h"
+#include "X2N_SgNBModificationRequestReject.h"
+#include "X2N_SgNBModificationRequired.h"
+#include "X2N_SgNBModificationConfirm.h"
+#include "X2N_SgNBModificationRefuse.h"
+#include "X2N_SgNBReleaseRequest.h"
+#include "X2N_SgNBReleaseRequestAcknowledge.h"
+#include "X2N_SgNBReleaseRequestReject.h"
+#include "X2N_SgNBReleaseRequired.h"
+#include "X2N_SgNBReleaseConfirm.h"
+#include "X2N_SgNBChangeRequired.h"
+#include "X2N_SgNBChangeConfirm.h"
+#include "X2N_SgNBChangeRefuse.h"
+#include "X2N_ENDCX2SetupRequest.h"
+#include "X2N_ENDCX2SetupResponse.h"
+#include "X2N_ENDCX2SetupFailure.h"
+#include "X2N_ENDCConfigurationUpdate.h"
+#include "X2N_ENDCConfigurationUpdateAcknowledge.h"
+#include "X2N_ENDCConfigurationUpdateFailure.h"
+#include "X2N_ENDCCellActivationRequest.h"
+#include "X2N_ENDCCellActivationResponse.h"
+#include "X2N_ENDCCellActivationFailure.h"
+#include "X2N_ENDCPartialResetRequired.h"
+#include "X2N_ENDCPartialResetConfirm.h"
+#include "X2N_EUTRANRCellResourceCoordinationRequest.h"
+#include "X2N_EUTRANRCellResourceCoordinationResponse.h"
+#include "X2N_ENDCX2RemovalRequest.h"
+#include "X2N_ENDCX2RemovalResponse.h"
+#include "X2N_ENDCX2RemovalFailure.h"
+#include "X2N_SNStatusTransfer.h"
+#include "X2N_UEContextRelease.h"
+#include "X2N_HandoverCancel.h"
+#include "X2N_ErrorIndication.h"
+#include "X2N_ResourceStatusUpdate.h"
+#include "X2N_LoadInformation.h"
+#include "X2N_PrivateMessage.h"
+#include "X2N_RLFIndication.h"
+#include "X2N_HandoverReport.h"
+#include "X2N_X2Release.h"
+#include "X2N_X2APMessageTransfer.h"
+#include "X2N_SeNBReconfigurationComplete.h"
+#include "X2N_SeNBReleaseRequest.h"
+#include "X2N_SeNBCounterCheckRequest.h"
+#include "X2N_SgNBReconfigurationComplete.h"
+#include "X2N_SgNBCounterCheckRequest.h"
+#include "X2N_RRCTransfer.h"
+#include "X2N_SecondaryRATDataUsageReport.h"
+#include "X2N_SgNBActivityNotification.h"
+#include "X2N_DataForwardingAddressIndication.h"
+#include "X2N_GNBStatusIndication.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InitiatingMessage__value_PR {
+	X2N_InitiatingMessage__value_PR_NOTHING,	/* No components present */
+	X2N_InitiatingMessage__value_PR_HandoverRequest,
+	X2N_InitiatingMessage__value_PR_ResetRequest,
+	X2N_InitiatingMessage__value_PR_X2SetupRequest,
+	X2N_InitiatingMessage__value_PR_ResourceStatusRequest,
+	X2N_InitiatingMessage__value_PR_ENBConfigurationUpdate,
+	X2N_InitiatingMessage__value_PR_MobilityChangeRequest,
+	X2N_InitiatingMessage__value_PR_CellActivationRequest,
+	X2N_InitiatingMessage__value_PR_SeNBAdditionRequest,
+	X2N_InitiatingMessage__value_PR_SeNBModificationRequest,
+	X2N_InitiatingMessage__value_PR_SeNBModificationRequired,
+	X2N_InitiatingMessage__value_PR_SeNBReleaseRequired,
+	X2N_InitiatingMessage__value_PR_X2RemovalRequest,
+	X2N_InitiatingMessage__value_PR_RetrieveUEContextRequest,
+	X2N_InitiatingMessage__value_PR_SgNBAdditionRequest,
+	X2N_InitiatingMessage__value_PR_SgNBModificationRequest,
+	X2N_InitiatingMessage__value_PR_SgNBModificationRequired,
+	X2N_InitiatingMessage__value_PR_SgNBReleaseRequest,
+	X2N_InitiatingMessage__value_PR_SgNBReleaseRequired,
+	X2N_InitiatingMessage__value_PR_SgNBChangeRequired,
+	X2N_InitiatingMessage__value_PR_ENDCX2SetupRequest,
+	X2N_InitiatingMessage__value_PR_ENDCConfigurationUpdate,
+	X2N_InitiatingMessage__value_PR_ENDCCellActivationRequest,
+	X2N_InitiatingMessage__value_PR_ENDCPartialResetRequired,
+	X2N_InitiatingMessage__value_PR_EUTRANRCellResourceCoordinationRequest,
+	X2N_InitiatingMessage__value_PR_ENDCX2RemovalRequest,
+	X2N_InitiatingMessage__value_PR_SNStatusTransfer,
+	X2N_InitiatingMessage__value_PR_UEContextRelease,
+	X2N_InitiatingMessage__value_PR_HandoverCancel,
+	X2N_InitiatingMessage__value_PR_ErrorIndication,
+	X2N_InitiatingMessage__value_PR_ResourceStatusUpdate,
+	X2N_InitiatingMessage__value_PR_LoadInformation,
+	X2N_InitiatingMessage__value_PR_PrivateMessage,
+	X2N_InitiatingMessage__value_PR_RLFIndication,
+	X2N_InitiatingMessage__value_PR_HandoverReport,
+	X2N_InitiatingMessage__value_PR_X2Release,
+	X2N_InitiatingMessage__value_PR_X2APMessageTransfer,
+	X2N_InitiatingMessage__value_PR_SeNBReconfigurationComplete,
+	X2N_InitiatingMessage__value_PR_SeNBReleaseRequest,
+	X2N_InitiatingMessage__value_PR_SeNBCounterCheckRequest,
+	X2N_InitiatingMessage__value_PR_SgNBReconfigurationComplete,
+	X2N_InitiatingMessage__value_PR_SgNBCounterCheckRequest,
+	X2N_InitiatingMessage__value_PR_RRCTransfer,
+	X2N_InitiatingMessage__value_PR_SecondaryRATDataUsageReport,
+	X2N_InitiatingMessage__value_PR_SgNBActivityNotification,
+	X2N_InitiatingMessage__value_PR_DataForwardingAddressIndication,
+	X2N_InitiatingMessage__value_PR_GNBStatusIndication
+} X2N_InitiatingMessage__value_PR;
+
+/* X2N_InitiatingMessage */
+typedef struct X2N_InitiatingMessage {
+	X2N_ProcedureCode_t	 procedureCode;
+	X2N_Criticality_t	 criticality;
+	struct X2N_InitiatingMessage__value {
+		X2N_InitiatingMessage__value_PR present;
+		union X2N_InitiatingMessage__X2N_value_u {
+			X2N_HandoverRequest_t	 HandoverRequest;
+			X2N_ResetRequest_t	 ResetRequest;
+			X2N_X2SetupRequest_t	 X2SetupRequest;
+			X2N_ResourceStatusRequest_t	 ResourceStatusRequest;
+			X2N_ENBConfigurationUpdate_t	 ENBConfigurationUpdate;
+			X2N_MobilityChangeRequest_t	 MobilityChangeRequest;
+			X2N_CellActivationRequest_t	 CellActivationRequest;
+			X2N_SeNBAdditionRequest_t	 SeNBAdditionRequest;
+			X2N_SeNBModificationRequest_t	 SeNBModificationRequest;
+			X2N_SeNBModificationRequired_t	 SeNBModificationRequired;
+			X2N_SeNBReleaseRequired_t	 SeNBReleaseRequired;
+			X2N_X2RemovalRequest_t	 X2RemovalRequest;
+			X2N_RetrieveUEContextRequest_t	 RetrieveUEContextRequest;
+			X2N_SgNBAdditionRequest_t	 SgNBAdditionRequest;
+			X2N_SgNBModificationRequest_t	 SgNBModificationRequest;
+			X2N_SgNBModificationRequired_t	 SgNBModificationRequired;
+			X2N_SgNBReleaseRequest_t	 SgNBReleaseRequest;
+			X2N_SgNBReleaseRequired_t	 SgNBReleaseRequired;
+			X2N_SgNBChangeRequired_t	 SgNBChangeRequired;
+			X2N_ENDCX2SetupRequest_t	 ENDCX2SetupRequest;
+			X2N_ENDCConfigurationUpdate_t	 ENDCConfigurationUpdate;
+			X2N_ENDCCellActivationRequest_t	 ENDCCellActivationRequest;
+			X2N_ENDCPartialResetRequired_t	 ENDCPartialResetRequired;
+			X2N_EUTRANRCellResourceCoordinationRequest_t	 EUTRANRCellResourceCoordinationRequest;
+			X2N_ENDCX2RemovalRequest_t	 ENDCX2RemovalRequest;
+			X2N_SNStatusTransfer_t	 SNStatusTransfer;
+			X2N_UEContextRelease_t	 UEContextRelease;
+			X2N_HandoverCancel_t	 HandoverCancel;
+			X2N_ErrorIndication_t	 ErrorIndication;
+			X2N_ResourceStatusUpdate_t	 ResourceStatusUpdate;
+			X2N_LoadInformation_t	 LoadInformation;
+			X2N_PrivateMessage_t	 PrivateMessage;
+			X2N_RLFIndication_t	 RLFIndication;
+			X2N_HandoverReport_t	 HandoverReport;
+			X2N_X2Release_t	 X2Release;
+			X2N_X2APMessageTransfer_t	 X2APMessageTransfer;
+			X2N_SeNBReconfigurationComplete_t	 SeNBReconfigurationComplete;
+			X2N_SeNBReleaseRequest_t	 SeNBReleaseRequest;
+			X2N_SeNBCounterCheckRequest_t	 SeNBCounterCheckRequest;
+			X2N_SgNBReconfigurationComplete_t	 SgNBReconfigurationComplete;
+			X2N_SgNBCounterCheckRequest_t	 SgNBCounterCheckRequest;
+			X2N_RRCTransfer_t	 RRCTransfer;
+			X2N_SecondaryRATDataUsageReport_t	 SecondaryRATDataUsageReport;
+			X2N_SgNBActivityNotification_t	 SgNBActivityNotification;
+			X2N_DataForwardingAddressIndication_t	 DataForwardingAddressIndication;
+			X2N_GNBStatusIndication_t	 GNBStatusIndication;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_InitiatingMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_InitiatingMessage_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_InitiatingMessage_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InitiatingMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.c b/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.c
new file mode 100644
index 0000000..7c72c8b
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InitiatingNodeType-EndcConfigUpdate.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_InitiatingNodeType_EndcConfigUpdate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_InitiatingNodeType_EndcConfigUpdate_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcConfigUpdate, choice.init_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P78,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcConfigUpdate, choice.init_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P79,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_InitiatingNodeType_EndcConfigUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_InitiatingNodeType_EndcConfigUpdate_specs_1 = {
+	sizeof(struct X2N_InitiatingNodeType_EndcConfigUpdate),
+	offsetof(struct X2N_InitiatingNodeType_EndcConfigUpdate, _asn_ctx),
+	offsetof(struct X2N_InitiatingNodeType_EndcConfigUpdate, present),
+	sizeof(((struct X2N_InitiatingNodeType_EndcConfigUpdate *)0)->present),
+	asn_MAP_X2N_InitiatingNodeType_EndcConfigUpdate_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcConfigUpdate = {
+	"InitiatingNodeType-EndcConfigUpdate",
+	"InitiatingNodeType-EndcConfigUpdate",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_InitiatingNodeType_EndcConfigUpdate_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_InitiatingNodeType_EndcConfigUpdate_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_InitiatingNodeType_EndcConfigUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.h b/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.h
new file mode 100644
index 0000000..52ccd86
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcConfigUpdate.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InitiatingNodeType_EndcConfigUpdate_H_
+#define	_X2N_InitiatingNodeType_EndcConfigUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InitiatingNodeType_EndcConfigUpdate_PR {
+	X2N_InitiatingNodeType_EndcConfigUpdate_PR_NOTHING,	/* No components present */
+	X2N_InitiatingNodeType_EndcConfigUpdate_PR_init_eNB,
+	X2N_InitiatingNodeType_EndcConfigUpdate_PR_init_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_InitiatingNodeType_EndcConfigUpdate_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_InitiatingNodeType-EndcConfigUpdate */
+typedef struct X2N_InitiatingNodeType_EndcConfigUpdate {
+	X2N_InitiatingNodeType_EndcConfigUpdate_PR present;
+	union X2N_InitiatingNodeType_EndcConfigUpdate_u {
+		struct X2N_ProtocolIE_Container	*init_eNB;
+		struct X2N_ProtocolIE_Container	*init_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_InitiatingNodeType_EndcConfigUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcConfigUpdate;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InitiatingNodeType_EndcConfigUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.c b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.c
new file mode 100644
index 0000000..aabead4
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InitiatingNodeType-EndcX2Removal.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_InitiatingNodeType_EndcX2Removal_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_InitiatingNodeType_EndcX2Removal_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcX2Removal, choice.init_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P98,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcX2Removal, choice.init_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P99,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_InitiatingNodeType_EndcX2Removal_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_InitiatingNodeType_EndcX2Removal_specs_1 = {
+	sizeof(struct X2N_InitiatingNodeType_EndcX2Removal),
+	offsetof(struct X2N_InitiatingNodeType_EndcX2Removal, _asn_ctx),
+	offsetof(struct X2N_InitiatingNodeType_EndcX2Removal, present),
+	sizeof(((struct X2N_InitiatingNodeType_EndcX2Removal *)0)->present),
+	asn_MAP_X2N_InitiatingNodeType_EndcX2Removal_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcX2Removal = {
+	"InitiatingNodeType-EndcX2Removal",
+	"InitiatingNodeType-EndcX2Removal",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_InitiatingNodeType_EndcX2Removal_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_InitiatingNodeType_EndcX2Removal_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_InitiatingNodeType_EndcX2Removal_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.h b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.h
new file mode 100644
index 0000000..cdad49a
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Removal.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InitiatingNodeType_EndcX2Removal_H_
+#define	_X2N_InitiatingNodeType_EndcX2Removal_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InitiatingNodeType_EndcX2Removal_PR {
+	X2N_InitiatingNodeType_EndcX2Removal_PR_NOTHING,	/* No components present */
+	X2N_InitiatingNodeType_EndcX2Removal_PR_init_eNB,
+	X2N_InitiatingNodeType_EndcX2Removal_PR_init_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_InitiatingNodeType_EndcX2Removal_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_InitiatingNodeType-EndcX2Removal */
+typedef struct X2N_InitiatingNodeType_EndcX2Removal {
+	X2N_InitiatingNodeType_EndcX2Removal_PR present;
+	union X2N_InitiatingNodeType_EndcX2Removal_u {
+		struct X2N_ProtocolIE_Container	*init_eNB;
+		struct X2N_ProtocolIE_Container	*init_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_InitiatingNodeType_EndcX2Removal_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcX2Removal;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InitiatingNodeType_EndcX2Removal_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.c b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.c
new file mode 100644
index 0000000..9e189c6
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InitiatingNodeType-EndcX2Setup.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_InitiatingNodeType_EndcX2Setup_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_InitiatingNodeType_EndcX2Setup_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcX2Setup, choice.init_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P71,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EndcX2Setup, choice.init_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P72,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"init-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_InitiatingNodeType_EndcX2Setup_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_InitiatingNodeType_EndcX2Setup_specs_1 = {
+	sizeof(struct X2N_InitiatingNodeType_EndcX2Setup),
+	offsetof(struct X2N_InitiatingNodeType_EndcX2Setup, _asn_ctx),
+	offsetof(struct X2N_InitiatingNodeType_EndcX2Setup, present),
+	sizeof(((struct X2N_InitiatingNodeType_EndcX2Setup *)0)->present),
+	asn_MAP_X2N_InitiatingNodeType_EndcX2Setup_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcX2Setup = {
+	"InitiatingNodeType-EndcX2Setup",
+	"InitiatingNodeType-EndcX2Setup",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_InitiatingNodeType_EndcX2Setup_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_InitiatingNodeType_EndcX2Setup_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_InitiatingNodeType_EndcX2Setup_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.h b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.h
new file mode 100644
index 0000000..72865af
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EndcX2Setup.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InitiatingNodeType_EndcX2Setup_H_
+#define	_X2N_InitiatingNodeType_EndcX2Setup_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InitiatingNodeType_EndcX2Setup_PR {
+	X2N_InitiatingNodeType_EndcX2Setup_PR_NOTHING,	/* No components present */
+	X2N_InitiatingNodeType_EndcX2Setup_PR_init_eNB,
+	X2N_InitiatingNodeType_EndcX2Setup_PR_init_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_InitiatingNodeType_EndcX2Setup_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_InitiatingNodeType-EndcX2Setup */
+typedef struct X2N_InitiatingNodeType_EndcX2Setup {
+	X2N_InitiatingNodeType_EndcX2Setup_PR present;
+	union X2N_InitiatingNodeType_EndcX2Setup_u {
+		struct X2N_ProtocolIE_Container	*init_eNB;
+		struct X2N_ProtocolIE_Container	*init_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_InitiatingNodeType_EndcX2Setup_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EndcX2Setup;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InitiatingNodeType_EndcX2Setup_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.c b/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.c
new file mode 100644
index 0000000..90e3473
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InitiatingNodeType-EutranrCellResourceCoordination.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_InitiatingNodeType_EutranrCellResourceCoordination_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_InitiatingNodeType_EutranrCellResourceCoordination_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EutranrCellResourceCoordination, choice.initiate_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P92,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"initiate-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_InitiatingNodeType_EutranrCellResourceCoordination, choice.initiate_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P93,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"initiate-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_InitiatingNodeType_EutranrCellResourceCoordination_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiate-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* initiate-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_InitiatingNodeType_EutranrCellResourceCoordination_specs_1 = {
+	sizeof(struct X2N_InitiatingNodeType_EutranrCellResourceCoordination),
+	offsetof(struct X2N_InitiatingNodeType_EutranrCellResourceCoordination, _asn_ctx),
+	offsetof(struct X2N_InitiatingNodeType_EutranrCellResourceCoordination, present),
+	sizeof(((struct X2N_InitiatingNodeType_EutranrCellResourceCoordination *)0)->present),
+	asn_MAP_X2N_InitiatingNodeType_EutranrCellResourceCoordination_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EutranrCellResourceCoordination = {
+	"InitiatingNodeType-EutranrCellResourceCoordination",
+	"InitiatingNodeType-EutranrCellResourceCoordination",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_InitiatingNodeType_EutranrCellResourceCoordination_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_InitiatingNodeType_EutranrCellResourceCoordination_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_InitiatingNodeType_EutranrCellResourceCoordination_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.h b/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.h
new file mode 100644
index 0000000..45f8f04
--- /dev/null
+++ b/asn1c_defs/X2N_InitiatingNodeType-EutranrCellResourceCoordination.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InitiatingNodeType_EutranrCellResourceCoordination_H_
+#define	_X2N_InitiatingNodeType_EutranrCellResourceCoordination_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR {
+	X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR_NOTHING,	/* No components present */
+	X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR_initiate_eNB,
+	X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR_initiate_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_InitiatingNodeType-EutranrCellResourceCoordination */
+typedef struct X2N_InitiatingNodeType_EutranrCellResourceCoordination {
+	X2N_InitiatingNodeType_EutranrCellResourceCoordination_PR present;
+	union X2N_InitiatingNodeType_EutranrCellResourceCoordination_u {
+		struct X2N_ProtocolIE_Container	*initiate_eNB;
+		struct X2N_ProtocolIE_Container	*initiate_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_InitiatingNodeType_EutranrCellResourceCoordination_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InitiatingNodeType_EutranrCellResourceCoordination;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InitiatingNodeType_EutranrCellResourceCoordination_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_IntegrityProtectionAlgorithms.c b/asn1c_defs/X2N_IntegrityProtectionAlgorithms.c
new file mode 100644
index 0000000..8fc5471
--- /dev/null
+++ b/asn1c_defs/X2N_IntegrityProtectionAlgorithms.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_IntegrityProtectionAlgorithms.h"
+
+int
+X2N_IntegrityProtectionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_IntegrityProtectionAlgorithms_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  16,  16 }	/* (SIZE(16..16,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_IntegrityProtectionAlgorithms = {
+	"IntegrityProtectionAlgorithms",
+	"IntegrityProtectionAlgorithms",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1,
+	sizeof(asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1[0]), /* 1 */
+	asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_IntegrityProtectionAlgorithms_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_IntegrityProtectionAlgorithms_constr_1, X2N_IntegrityProtectionAlgorithms_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_IntegrityProtectionAlgorithms.h b/asn1c_defs/X2N_IntegrityProtectionAlgorithms.h
new file mode 100644
index 0000000..7562401
--- /dev/null
+++ b/asn1c_defs/X2N_IntegrityProtectionAlgorithms.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_IntegrityProtectionAlgorithms_H_
+#define	_X2N_IntegrityProtectionAlgorithms_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_IntegrityProtectionAlgorithms */
+typedef BIT_STRING_t	 X2N_IntegrityProtectionAlgorithms_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_IntegrityProtectionAlgorithms_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_IntegrityProtectionAlgorithms;
+asn_struct_free_f X2N_IntegrityProtectionAlgorithms_free;
+asn_struct_print_f X2N_IntegrityProtectionAlgorithms_print;
+asn_constr_check_f X2N_IntegrityProtectionAlgorithms_constraint;
+ber_type_decoder_f X2N_IntegrityProtectionAlgorithms_decode_ber;
+der_type_encoder_f X2N_IntegrityProtectionAlgorithms_encode_der;
+xer_type_decoder_f X2N_IntegrityProtectionAlgorithms_decode_xer;
+xer_type_encoder_f X2N_IntegrityProtectionAlgorithms_encode_xer;
+per_type_decoder_f X2N_IntegrityProtectionAlgorithms_decode_uper;
+per_type_encoder_f X2N_IntegrityProtectionAlgorithms_encode_uper;
+per_type_decoder_f X2N_IntegrityProtectionAlgorithms_decode_aper;
+per_type_encoder_f X2N_IntegrityProtectionAlgorithms_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_IntegrityProtectionAlgorithms_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InterfacesToTrace.c b/asn1c_defs/X2N_InterfacesToTrace.c
new file mode 100644
index 0000000..ea691c4
--- /dev/null
+++ b/asn1c_defs/X2N_InterfacesToTrace.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InterfacesToTrace.h"
+
+int
+X2N_InterfacesToTrace_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_InterfacesToTrace_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_InterfacesToTrace_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InterfacesToTrace = {
+	"InterfacesToTrace",
+	"InterfacesToTrace",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_InterfacesToTrace_tags_1,
+	sizeof(asn_DEF_X2N_InterfacesToTrace_tags_1)
+		/sizeof(asn_DEF_X2N_InterfacesToTrace_tags_1[0]), /* 1 */
+	asn_DEF_X2N_InterfacesToTrace_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_InterfacesToTrace_tags_1)
+		/sizeof(asn_DEF_X2N_InterfacesToTrace_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_InterfacesToTrace_constr_1, X2N_InterfacesToTrace_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InterfacesToTrace.h b/asn1c_defs/X2N_InterfacesToTrace.h
new file mode 100644
index 0000000..e2ffa90
--- /dev/null
+++ b/asn1c_defs/X2N_InterfacesToTrace.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InterfacesToTrace_H_
+#define	_X2N_InterfacesToTrace_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_InterfacesToTrace */
+typedef BIT_STRING_t	 X2N_InterfacesToTrace_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_InterfacesToTrace_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InterfacesToTrace;
+asn_struct_free_f X2N_InterfacesToTrace_free;
+asn_struct_print_f X2N_InterfacesToTrace_print;
+asn_constr_check_f X2N_InterfacesToTrace_constraint;
+ber_type_decoder_f X2N_InterfacesToTrace_decode_ber;
+der_type_encoder_f X2N_InterfacesToTrace_encode_der;
+xer_type_decoder_f X2N_InterfacesToTrace_decode_xer;
+xer_type_encoder_f X2N_InterfacesToTrace_encode_xer;
+per_type_decoder_f X2N_InterfacesToTrace_decode_uper;
+per_type_encoder_f X2N_InterfacesToTrace_encode_uper;
+per_type_decoder_f X2N_InterfacesToTrace_decode_aper;
+per_type_encoder_f X2N_InterfacesToTrace_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InterfacesToTrace_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_InvokeIndication.c b/asn1c_defs/X2N_InvokeIndication.c
new file mode 100644
index 0000000..e212ba1
--- /dev/null
+++ b/asn1c_defs/X2N_InvokeIndication.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_InvokeIndication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_InvokeIndication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_InvokeIndication_value2enum_1[] = {
+	{ 0,	15,	"abs-information" },
+	{ 1,	23,	"naics-information-start" },
+	{ 2,	22,	"naics-information-stop" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_InvokeIndication_enum2value_1[] = {
+	0,	/* abs-information(0) */
+	1,	/* naics-information-start(1) */
+	2	/* naics-information-stop(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_InvokeIndication_specs_1 = {
+	asn_MAP_X2N_InvokeIndication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_InvokeIndication_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_InvokeIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_InvokeIndication = {
+	"InvokeIndication",
+	"InvokeIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_InvokeIndication_tags_1,
+	sizeof(asn_DEF_X2N_InvokeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_InvokeIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_InvokeIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_InvokeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_InvokeIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_InvokeIndication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_InvokeIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_InvokeIndication.h b/asn1c_defs/X2N_InvokeIndication.h
new file mode 100644
index 0000000..ea878b0
--- /dev/null
+++ b/asn1c_defs/X2N_InvokeIndication.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_InvokeIndication_H_
+#define	_X2N_InvokeIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_InvokeIndication {
+	X2N_InvokeIndication_abs_information	= 0,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_InvokeIndication_naics_information_start	= 1,
+	X2N_InvokeIndication_naics_information_stop	= 2
+} e_X2N_InvokeIndication;
+
+/* X2N_InvokeIndication */
+typedef long	 X2N_InvokeIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_InvokeIndication;
+asn_struct_free_f X2N_InvokeIndication_free;
+asn_struct_print_f X2N_InvokeIndication_print;
+asn_constr_check_f X2N_InvokeIndication_constraint;
+ber_type_decoder_f X2N_InvokeIndication_decode_ber;
+der_type_encoder_f X2N_InvokeIndication_encode_der;
+xer_type_decoder_f X2N_InvokeIndication_decode_xer;
+xer_type_encoder_f X2N_InvokeIndication_encode_xer;
+per_type_decoder_f X2N_InvokeIndication_decode_uper;
+per_type_encoder_f X2N_InvokeIndication_encode_uper;
+per_type_decoder_f X2N_InvokeIndication_decode_aper;
+per_type_encoder_f X2N_InvokeIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_InvokeIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Key-eNodeB-Star.c b/asn1c_defs/X2N_Key-eNodeB-Star.c
new file mode 100644
index 0000000..cc01f76
--- /dev/null
+++ b/asn1c_defs/X2N_Key-eNodeB-Star.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Key-eNodeB-Star.h"
+
+int
+X2N_Key_eNodeB_Star_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Key_eNodeB_Star_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  256,  256 }	/* (SIZE(256..256)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Key_eNodeB_Star_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Key_eNodeB_Star = {
+	"Key-eNodeB-Star",
+	"Key-eNodeB-Star",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_Key_eNodeB_Star_tags_1,
+	sizeof(asn_DEF_X2N_Key_eNodeB_Star_tags_1)
+		/sizeof(asn_DEF_X2N_Key_eNodeB_Star_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Key_eNodeB_Star_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Key_eNodeB_Star_tags_1)
+		/sizeof(asn_DEF_X2N_Key_eNodeB_Star_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Key_eNodeB_Star_constr_1, X2N_Key_eNodeB_Star_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Key-eNodeB-Star.h b/asn1c_defs/X2N_Key-eNodeB-Star.h
new file mode 100644
index 0000000..d043827
--- /dev/null
+++ b/asn1c_defs/X2N_Key-eNodeB-Star.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Key_eNodeB_Star_H_
+#define	_X2N_Key_eNodeB_Star_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Key-eNodeB-Star */
+typedef BIT_STRING_t	 X2N_Key_eNodeB_Star_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Key_eNodeB_Star_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Key_eNodeB_Star;
+asn_struct_free_f X2N_Key_eNodeB_Star_free;
+asn_struct_print_f X2N_Key_eNodeB_Star_print;
+asn_constr_check_f X2N_Key_eNodeB_Star_constraint;
+ber_type_decoder_f X2N_Key_eNodeB_Star_decode_ber;
+der_type_encoder_f X2N_Key_eNodeB_Star_encode_der;
+xer_type_decoder_f X2N_Key_eNodeB_Star_decode_xer;
+xer_type_encoder_f X2N_Key_eNodeB_Star_encode_xer;
+per_type_decoder_f X2N_Key_eNodeB_Star_decode_uper;
+per_type_encoder_f X2N_Key_eNodeB_Star_encode_uper;
+per_type_decoder_f X2N_Key_eNodeB_Star_decode_aper;
+per_type_encoder_f X2N_Key_eNodeB_Star_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Key_eNodeB_Star_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LAC.c b/asn1c_defs/X2N_LAC.c
new file mode 100644
index 0000000..49cede8
--- /dev/null
+++ b/asn1c_defs/X2N_LAC.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LAC.h"
+
+int
+X2N_LAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_LAC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LAC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LAC = {
+	"LAC",
+	"LAC",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_LAC_tags_1,
+	sizeof(asn_DEF_X2N_LAC_tags_1)
+		/sizeof(asn_DEF_X2N_LAC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LAC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LAC_tags_1)
+		/sizeof(asn_DEF_X2N_LAC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_LAC_constr_1, X2N_LAC_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LAC.h b/asn1c_defs/X2N_LAC.h
new file mode 100644
index 0000000..dbbf13e
--- /dev/null
+++ b/asn1c_defs/X2N_LAC.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LAC_H_
+#define	_X2N_LAC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LAC */
+typedef OCTET_STRING_t	 X2N_LAC_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_LAC_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LAC;
+asn_struct_free_f X2N_LAC_free;
+asn_struct_print_f X2N_LAC_print;
+asn_constr_check_f X2N_LAC_constraint;
+ber_type_decoder_f X2N_LAC_decode_ber;
+der_type_encoder_f X2N_LAC_encode_der;
+xer_type_decoder_f X2N_LAC_decode_xer;
+xer_type_encoder_f X2N_LAC_encode_xer;
+per_type_decoder_f X2N_LAC_decode_uper;
+per_type_encoder_f X2N_LAC_encode_uper;
+per_type_decoder_f X2N_LAC_decode_aper;
+per_type_encoder_f X2N_LAC_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LAC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LCID.c b/asn1c_defs/X2N_LCID.c
new file mode 100644
index 0000000..2aaf049
--- /dev/null
+++ b/asn1c_defs/X2N_LCID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LCID.h"
+
+int
+X2N_LCID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_LCID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  1,  32 }	/* (1..32,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LCID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LCID = {
+	"LCID",
+	"LCID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_LCID_tags_1,
+	sizeof(asn_DEF_X2N_LCID_tags_1)
+		/sizeof(asn_DEF_X2N_LCID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LCID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LCID_tags_1)
+		/sizeof(asn_DEF_X2N_LCID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_LCID_constr_1, X2N_LCID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_LCID.h b/asn1c_defs/X2N_LCID.h
new file mode 100644
index 0000000..f68dc6b
--- /dev/null
+++ b/asn1c_defs/X2N_LCID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LCID_H_
+#define	_X2N_LCID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LCID */
+typedef long	 X2N_LCID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LCID;
+asn_struct_free_f X2N_LCID_free;
+asn_struct_print_f X2N_LCID_print;
+asn_constr_check_f X2N_LCID_constraint;
+ber_type_decoder_f X2N_LCID_decode_ber;
+der_type_encoder_f X2N_LCID_encode_der;
+xer_type_decoder_f X2N_LCID_decode_xer;
+xer_type_encoder_f X2N_LCID_encode_xer;
+per_type_decoder_f X2N_LCID_decode_uper;
+per_type_encoder_f X2N_LCID_encode_uper;
+per_type_decoder_f X2N_LCID_decode_aper;
+per_type_encoder_f X2N_LCID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LCID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LHN-ID.c b/asn1c_defs/X2N_LHN-ID.c
new file mode 100644
index 0000000..2ea122e
--- /dev/null
+++ b/asn1c_defs/X2N_LHN-ID.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LHN-ID.h"
+
+int
+X2N_LHN_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 32 && size <= 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_LHN_ID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  32,  256 }	/* (SIZE(32..256)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LHN_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LHN_ID = {
+	"LHN-ID",
+	"LHN-ID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_LHN_ID_tags_1,
+	sizeof(asn_DEF_X2N_LHN_ID_tags_1)
+		/sizeof(asn_DEF_X2N_LHN_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LHN_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LHN_ID_tags_1)
+		/sizeof(asn_DEF_X2N_LHN_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_LHN_ID_constr_1, X2N_LHN_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LHN-ID.h b/asn1c_defs/X2N_LHN-ID.h
new file mode 100644
index 0000000..88b145a
--- /dev/null
+++ b/asn1c_defs/X2N_LHN-ID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LHN_ID_H_
+#define	_X2N_LHN_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LHN-ID */
+typedef OCTET_STRING_t	 X2N_LHN_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LHN_ID;
+asn_struct_free_f X2N_LHN_ID_free;
+asn_struct_print_f X2N_LHN_ID_print;
+asn_constr_check_f X2N_LHN_ID_constraint;
+ber_type_decoder_f X2N_LHN_ID_decode_ber;
+der_type_encoder_f X2N_LHN_ID_encode_der;
+xer_type_decoder_f X2N_LHN_ID_decode_xer;
+xer_type_encoder_f X2N_LHN_ID_encode_xer;
+per_type_decoder_f X2N_LHN_ID_decode_uper;
+per_type_encoder_f X2N_LHN_ID_encode_uper;
+per_type_decoder_f X2N_LHN_ID_decode_aper;
+per_type_encoder_f X2N_LHN_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LHN_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LastVisitedCell-Item.c b/asn1c_defs/X2N_LastVisitedCell-Item.c
new file mode 100644
index 0000000..a431e81
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedCell-Item.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LastVisitedCell-Item.h"
+
+#include "X2N_LastVisitedEUTRANCellInformation.h"
+#include "X2N_LastVisitedGERANCellInformation.h"
+asn_per_constraints_t asn_PER_type_X2N_LastVisitedCell_Item_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_LastVisitedCell_Item_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_LastVisitedCell_Item, choice.e_UTRAN_Cell),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LastVisitedEUTRANCellInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-UTRAN-Cell"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedCell_Item, choice.uTRAN_Cell),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LastVisitedUTRANCellInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uTRAN-Cell"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_LastVisitedCell_Item, choice.gERAN_Cell),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_LastVisitedGERANCellInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"gERAN-Cell"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedCell_Item, choice.nG_RAN_Cell),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LastVisitedNGRANCellInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nG-RAN-Cell"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LastVisitedCell_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-UTRAN-Cell */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uTRAN-Cell */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gERAN-Cell */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nG-RAN-Cell */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_LastVisitedCell_Item_specs_1 = {
+	sizeof(struct X2N_LastVisitedCell_Item),
+	offsetof(struct X2N_LastVisitedCell_Item, _asn_ctx),
+	offsetof(struct X2N_LastVisitedCell_Item, present),
+	sizeof(((struct X2N_LastVisitedCell_Item *)0)->present),
+	asn_MAP_X2N_LastVisitedCell_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedCell_Item = {
+	"LastVisitedCell-Item",
+	"LastVisitedCell-Item",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_LastVisitedCell_Item_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_LastVisitedCell_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_LastVisitedCell_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LastVisitedCell-Item.h b/asn1c_defs/X2N_LastVisitedCell-Item.h
new file mode 100644
index 0000000..17fe01b
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedCell-Item.h
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LastVisitedCell_Item_H_
+#define	_X2N_LastVisitedCell_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_LastVisitedUTRANCellInformation.h"
+#include "X2N_LastVisitedNGRANCellInformation.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_LastVisitedCell_Item_PR {
+	X2N_LastVisitedCell_Item_PR_NOTHING,	/* No components present */
+	X2N_LastVisitedCell_Item_PR_e_UTRAN_Cell,
+	X2N_LastVisitedCell_Item_PR_uTRAN_Cell,
+	X2N_LastVisitedCell_Item_PR_gERAN_Cell,
+	/* Extensions may appear below */
+	X2N_LastVisitedCell_Item_PR_nG_RAN_Cell
+} X2N_LastVisitedCell_Item_PR;
+
+/* Forward declarations */
+struct X2N_LastVisitedEUTRANCellInformation;
+struct X2N_LastVisitedGERANCellInformation;
+
+/* X2N_LastVisitedCell-Item */
+typedef struct X2N_LastVisitedCell_Item {
+	X2N_LastVisitedCell_Item_PR present;
+	union X2N_LastVisitedCell_Item_u {
+		struct X2N_LastVisitedEUTRANCellInformation	*e_UTRAN_Cell;
+		X2N_LastVisitedUTRANCellInformation_t	 uTRAN_Cell;
+		struct X2N_LastVisitedGERANCellInformation	*gERAN_Cell;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		X2N_LastVisitedNGRANCellInformation_t	 nG_RAN_Cell;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LastVisitedCell_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedCell_Item;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_LastVisitedCell_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_LastVisitedCell_Item_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_LastVisitedCell_Item_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LastVisitedCell_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.c b/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.c
new file mode 100644
index 0000000..7323415
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LastVisitedEUTRANCellInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_LastVisitedEUTRANCellInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation, global_Cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global-Cell-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation, cellType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CellType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation, time_UE_StayedInCell),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Time_UE_StayedInCell,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"time-UE-StayedInCell"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_LastVisitedEUTRANCellInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P157,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_LastVisitedEUTRANCellInformation_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LastVisitedEUTRANCellInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-Cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* time-UE-StayedInCell */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LastVisitedEUTRANCellInformation_specs_1 = {
+	sizeof(struct X2N_LastVisitedEUTRANCellInformation),
+	offsetof(struct X2N_LastVisitedEUTRANCellInformation, _asn_ctx),
+	asn_MAP_X2N_LastVisitedEUTRANCellInformation_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_LastVisitedEUTRANCellInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedEUTRANCellInformation = {
+	"LastVisitedEUTRANCellInformation",
+	"LastVisitedEUTRANCellInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1,
+	sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LastVisitedEUTRANCellInformation_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_LastVisitedEUTRANCellInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.h b/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.h
new file mode 100644
index 0000000..2335f07
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedEUTRANCellInformation.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LastVisitedEUTRANCellInformation_H_
+#define	_X2N_LastVisitedEUTRANCellInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include "X2N_CellType.h"
+#include "X2N_Time-UE-StayedInCell.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_LastVisitedEUTRANCellInformation */
+typedef struct X2N_LastVisitedEUTRANCellInformation {
+	X2N_ECGI_t	 global_Cell_ID;
+	X2N_CellType_t	 cellType;
+	X2N_Time_UE_StayedInCell_t	 time_UE_StayedInCell;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LastVisitedEUTRANCellInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedEUTRANCellInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LastVisitedEUTRANCellInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_LastVisitedEUTRANCellInformation_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LastVisitedEUTRANCellInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LastVisitedGERANCellInformation.c b/asn1c_defs/X2N_LastVisitedGERANCellInformation.c
new file mode 100644
index 0000000..287b3ef
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedGERANCellInformation.c
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LastVisitedGERANCellInformation.h"
+
+asn_per_constraints_t asn_PER_type_X2N_LastVisitedGERANCellInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_LastVisitedGERANCellInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedGERANCellInformation, choice.undefined),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"undefined"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LastVisitedGERANCellInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* undefined */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_LastVisitedGERANCellInformation_specs_1 = {
+	sizeof(struct X2N_LastVisitedGERANCellInformation),
+	offsetof(struct X2N_LastVisitedGERANCellInformation, _asn_ctx),
+	offsetof(struct X2N_LastVisitedGERANCellInformation, present),
+	sizeof(((struct X2N_LastVisitedGERANCellInformation *)0)->present),
+	asn_MAP_X2N_LastVisitedGERANCellInformation_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0,
+	1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedGERANCellInformation = {
+	"LastVisitedGERANCellInformation",
+	"LastVisitedGERANCellInformation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_LastVisitedGERANCellInformation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_LastVisitedGERANCellInformation_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_LastVisitedGERANCellInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LastVisitedGERANCellInformation.h b/asn1c_defs/X2N_LastVisitedGERANCellInformation.h
new file mode 100644
index 0000000..71fad6c
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedGERANCellInformation.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LastVisitedGERANCellInformation_H_
+#define	_X2N_LastVisitedGERANCellInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_LastVisitedGERANCellInformation_PR {
+	X2N_LastVisitedGERANCellInformation_PR_NOTHING,	/* No components present */
+	X2N_LastVisitedGERANCellInformation_PR_undefined
+	/* Extensions may appear below */
+	
+} X2N_LastVisitedGERANCellInformation_PR;
+
+/* X2N_LastVisitedGERANCellInformation */
+typedef struct X2N_LastVisitedGERANCellInformation {
+	X2N_LastVisitedGERANCellInformation_PR present;
+	union X2N_LastVisitedGERANCellInformation_u {
+		NULL_t	 undefined;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LastVisitedGERANCellInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedGERANCellInformation;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_LastVisitedGERANCellInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_LastVisitedGERANCellInformation_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_LastVisitedGERANCellInformation_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LastVisitedGERANCellInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LastVisitedNGRANCellInformation.c b/asn1c_defs/X2N_LastVisitedNGRANCellInformation.c
new file mode 100644
index 0000000..edc5c60
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedNGRANCellInformation.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LastVisitedNGRANCellInformation.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedNGRANCellInformation = {
+	"LastVisitedNGRANCellInformation",
+	"LastVisitedNGRANCellInformation",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1,
+	sizeof(asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedNGRANCellInformation_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LastVisitedNGRANCellInformation.h b/asn1c_defs/X2N_LastVisitedNGRANCellInformation.h
new file mode 100644
index 0000000..13141ff
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedNGRANCellInformation.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LastVisitedNGRANCellInformation_H_
+#define	_X2N_LastVisitedNGRANCellInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LastVisitedNGRANCellInformation */
+typedef OCTET_STRING_t	 X2N_LastVisitedNGRANCellInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedNGRANCellInformation;
+asn_struct_free_f X2N_LastVisitedNGRANCellInformation_free;
+asn_struct_print_f X2N_LastVisitedNGRANCellInformation_print;
+asn_constr_check_f X2N_LastVisitedNGRANCellInformation_constraint;
+ber_type_decoder_f X2N_LastVisitedNGRANCellInformation_decode_ber;
+der_type_encoder_f X2N_LastVisitedNGRANCellInformation_encode_der;
+xer_type_decoder_f X2N_LastVisitedNGRANCellInformation_decode_xer;
+xer_type_encoder_f X2N_LastVisitedNGRANCellInformation_encode_xer;
+per_type_decoder_f X2N_LastVisitedNGRANCellInformation_decode_uper;
+per_type_encoder_f X2N_LastVisitedNGRANCellInformation_encode_uper;
+per_type_decoder_f X2N_LastVisitedNGRANCellInformation_decode_aper;
+per_type_encoder_f X2N_LastVisitedNGRANCellInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LastVisitedNGRANCellInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LastVisitedUTRANCellInformation.c b/asn1c_defs/X2N_LastVisitedUTRANCellInformation.c
new file mode 100644
index 0000000..2003e8c
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedUTRANCellInformation.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LastVisitedUTRANCellInformation.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedUTRANCellInformation = {
+	"LastVisitedUTRANCellInformation",
+	"LastVisitedUTRANCellInformation",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1,
+	sizeof(asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LastVisitedUTRANCellInformation_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LastVisitedUTRANCellInformation.h b/asn1c_defs/X2N_LastVisitedUTRANCellInformation.h
new file mode 100644
index 0000000..7a5c0ff
--- /dev/null
+++ b/asn1c_defs/X2N_LastVisitedUTRANCellInformation.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LastVisitedUTRANCellInformation_H_
+#define	_X2N_LastVisitedUTRANCellInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LastVisitedUTRANCellInformation */
+typedef OCTET_STRING_t	 X2N_LastVisitedUTRANCellInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedUTRANCellInformation;
+asn_struct_free_f X2N_LastVisitedUTRANCellInformation_free;
+asn_struct_print_f X2N_LastVisitedUTRANCellInformation_print;
+asn_constr_check_f X2N_LastVisitedUTRANCellInformation_constraint;
+ber_type_decoder_f X2N_LastVisitedUTRANCellInformation_decode_ber;
+der_type_encoder_f X2N_LastVisitedUTRANCellInformation_encode_der;
+xer_type_decoder_f X2N_LastVisitedUTRANCellInformation_decode_xer;
+xer_type_encoder_f X2N_LastVisitedUTRANCellInformation_encode_xer;
+per_type_decoder_f X2N_LastVisitedUTRANCellInformation_decode_uper;
+per_type_encoder_f X2N_LastVisitedUTRANCellInformation_encode_uper;
+per_type_decoder_f X2N_LastVisitedUTRANCellInformation_decode_aper;
+per_type_encoder_f X2N_LastVisitedUTRANCellInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LastVisitedUTRANCellInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Limited-list.c b/asn1c_defs/X2N_Limited-list.c
new file mode 100644
index 0000000..2a8f4ea
--- /dev/null
+++ b/asn1c_defs/X2N_Limited-list.c
@@ -0,0 +1,104 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Limited-list.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_per_constraints_t asn_PER_type_X2N_Limited_list_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Limited_list__Member, nrCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrCellID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_Limited_list__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P98,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_Limited_list__Member),
+	offsetof(struct X2N_Limited_list__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	2,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Limited_list_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Limited_list_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_Limited_list_specs_1 = {
+	sizeof(struct X2N_Limited_list),
+	offsetof(struct X2N_Limited_list, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Limited_list = {
+	"Limited-list",
+	"Limited-list",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_Limited_list_tags_1,
+	sizeof(asn_DEF_X2N_Limited_list_tags_1)
+		/sizeof(asn_DEF_X2N_Limited_list_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Limited_list_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Limited_list_tags_1)
+		/sizeof(asn_DEF_X2N_Limited_list_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Limited_list_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_Limited_list_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_Limited_list_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Limited-list.h b/asn1c_defs/X2N_Limited-list.h
new file mode 100644
index 0000000..eccb01c
--- /dev/null
+++ b/asn1c_defs/X2N_Limited-list.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Limited_list_H_
+#define	_X2N_Limited_list_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_NRCGI.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_Limited_list__Member {
+	X2N_NRCGI_t	 nrCellID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Limited_list__Member;
+
+/* X2N_Limited-list */
+typedef struct X2N_Limited_list {
+	A_SEQUENCE_OF(Limited_list__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Limited_list_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Limited_list;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_Limited_list_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_Limited_list_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_Limited_list_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Limited_list_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Links-to-log.c b/asn1c_defs/X2N_Links-to-log.c
new file mode 100644
index 0000000..0d177bf
--- /dev/null
+++ b/asn1c_defs/X2N_Links-to-log.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Links-to-log.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Links_to_log_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Links_to_log_value2enum_1[] = {
+	{ 0,	6,	"uplink" },
+	{ 1,	8,	"downlink" },
+	{ 2,	24,	"both-uplink-and-downlink" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Links_to_log_enum2value_1[] = {
+	2,	/* both-uplink-and-downlink(2) */
+	1,	/* downlink(1) */
+	0	/* uplink(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Links_to_log_specs_1 = {
+	asn_MAP_X2N_Links_to_log_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Links_to_log_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Links_to_log_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Links_to_log = {
+	"Links-to-log",
+	"Links-to-log",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Links_to_log_tags_1,
+	sizeof(asn_DEF_X2N_Links_to_log_tags_1)
+		/sizeof(asn_DEF_X2N_Links_to_log_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Links_to_log_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Links_to_log_tags_1)
+		/sizeof(asn_DEF_X2N_Links_to_log_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Links_to_log_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Links_to_log_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Links-to-log.h b/asn1c_defs/X2N_Links-to-log.h
new file mode 100644
index 0000000..2024442
--- /dev/null
+++ b/asn1c_defs/X2N_Links-to-log.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Links_to_log_H_
+#define	_X2N_Links_to_log_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Links_to_log {
+	X2N_Links_to_log_uplink	= 0,
+	X2N_Links_to_log_downlink	= 1,
+	X2N_Links_to_log_both_uplink_and_downlink	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Links_to_log;
+
+/* X2N_Links-to-log */
+typedef long	 X2N_Links_to_log_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Links_to_log_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Links_to_log;
+extern const asn_INTEGER_specifics_t asn_SPC_Links_to_log_specs_1;
+asn_struct_free_f Links_to_log_free;
+asn_struct_print_f Links_to_log_print;
+asn_constr_check_f Links_to_log_constraint;
+ber_type_decoder_f Links_to_log_decode_ber;
+der_type_encoder_f Links_to_log_encode_der;
+xer_type_decoder_f Links_to_log_decode_xer;
+xer_type_encoder_f Links_to_log_encode_xer;
+per_type_decoder_f Links_to_log_decode_uper;
+per_type_encoder_f Links_to_log_encode_uper;
+per_type_decoder_f Links_to_log_decode_aper;
+per_type_encoder_f Links_to_log_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Links_to_log_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.c b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.c
new file mode 100644
index 0000000..ddae1c9
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ListofEUTRACellsinEUTRACoordinationReq.h"
+
+#include "X2N_ECGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ListofEUTRACellsinEUTRACoordinationReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ListofEUTRACellsinEUTRACoordinationReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ListofEUTRACellsinEUTRACoordinationReq_specs_1 = {
+	sizeof(struct X2N_ListofEUTRACellsinEUTRACoordinationReq),
+	offsetof(struct X2N_ListofEUTRACellsinEUTRACoordinationReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq = {
+	"ListofEUTRACellsinEUTRACoordinationReq",
+	"ListofEUTRACellsinEUTRACoordinationReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1,
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ListofEUTRACellsinEUTRACoordinationReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ListofEUTRACellsinEUTRACoordinationReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ListofEUTRACellsinEUTRACoordinationReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.h b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.h
new file mode 100644
index 0000000..0cce8a4
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationReq.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ListofEUTRACellsinEUTRACoordinationReq_H_
+#define	_X2N_ListofEUTRACellsinEUTRACoordinationReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_ListofEUTRACellsinEUTRACoordinationReq */
+typedef struct X2N_ListofEUTRACellsinEUTRACoordinationReq {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ListofEUTRACellsinEUTRACoordinationReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ListofEUTRACellsinEUTRACoordinationReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.c b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.c
new file mode 100644
index 0000000..09b2d93
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ListofEUTRACellsinEUTRACoordinationResp.h"
+
+#include "X2N_ECGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ListofEUTRACellsinEUTRACoordinationResp_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ListofEUTRACellsinEUTRACoordinationResp_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ListofEUTRACellsinEUTRACoordinationResp_specs_1 = {
+	sizeof(struct X2N_ListofEUTRACellsinEUTRACoordinationResp),
+	offsetof(struct X2N_ListofEUTRACellsinEUTRACoordinationResp, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp = {
+	"ListofEUTRACellsinEUTRACoordinationResp",
+	"ListofEUTRACellsinEUTRACoordinationResp",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1,
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ListofEUTRACellsinEUTRACoordinationResp_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ListofEUTRACellsinEUTRACoordinationResp_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ListofEUTRACellsinEUTRACoordinationResp_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.h b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.h
new file mode 100644
index 0000000..a4bd56c
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinEUTRACoordinationResp.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ListofEUTRACellsinEUTRACoordinationResp_H_
+#define	_X2N_ListofEUTRACellsinEUTRACoordinationResp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_ListofEUTRACellsinEUTRACoordinationResp */
+typedef struct X2N_ListofEUTRACellsinEUTRACoordinationResp {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ListofEUTRACellsinEUTRACoordinationResp_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ListofEUTRACellsinEUTRACoordinationResp_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.c b/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.c
new file mode 100644
index 0000000..12e87e8
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ListofEUTRACellsinNRCoordinationReq.h"
+
+#include "X2N_ECGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ListofEUTRACellsinNRCoordinationReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ListofEUTRACellsinNRCoordinationReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ListofEUTRACellsinNRCoordinationReq_specs_1 = {
+	sizeof(struct X2N_ListofEUTRACellsinNRCoordinationReq),
+	offsetof(struct X2N_ListofEUTRACellsinNRCoordinationReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq = {
+	"ListofEUTRACellsinNRCoordinationReq",
+	"ListofEUTRACellsinNRCoordinationReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1,
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ListofEUTRACellsinNRCoordinationReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ListofEUTRACellsinNRCoordinationReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ListofEUTRACellsinNRCoordinationReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.h b/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.h
new file mode 100644
index 0000000..b87581a
--- /dev/null
+++ b/asn1c_defs/X2N_ListofEUTRACellsinNRCoordinationReq.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ListofEUTRACellsinNRCoordinationReq_H_
+#define	_X2N_ListofEUTRACellsinNRCoordinationReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_ListofEUTRACellsinNRCoordinationReq */
+typedef struct X2N_ListofEUTRACellsinNRCoordinationReq {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ListofEUTRACellsinNRCoordinationReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ListofEUTRACellsinNRCoordinationReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.c b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.c
new file mode 100644
index 0000000..852810f
--- /dev/null
+++ b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ListofNRCellsinNRCoordinationReq.h"
+
+#include "X2N_NRCGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ListofNRCellsinNRCoordinationReq_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  0,  64 }	/* (SIZE(0..64)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ListofNRCellsinNRCoordinationReq_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ListofNRCellsinNRCoordinationReq_specs_1 = {
+	sizeof(struct X2N_ListofNRCellsinNRCoordinationReq),
+	offsetof(struct X2N_ListofNRCellsinNRCoordinationReq, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ListofNRCellsinNRCoordinationReq = {
+	"ListofNRCellsinNRCoordinationReq",
+	"ListofNRCellsinNRCoordinationReq",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1,
+	sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1)
+		/sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationReq_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ListofNRCellsinNRCoordinationReq_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ListofNRCellsinNRCoordinationReq_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ListofNRCellsinNRCoordinationReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.h b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.h
new file mode 100644
index 0000000..cbff799
--- /dev/null
+++ b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationReq.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ListofNRCellsinNRCoordinationReq_H_
+#define	_X2N_ListofNRCellsinNRCoordinationReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRCGI;
+
+/* X2N_ListofNRCellsinNRCoordinationReq */
+typedef struct X2N_ListofNRCellsinNRCoordinationReq {
+	A_SEQUENCE_OF(struct X2N_NRCGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ListofNRCellsinNRCoordinationReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ListofNRCellsinNRCoordinationReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ListofNRCellsinNRCoordinationReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.c b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.c
new file mode 100644
index 0000000..11c6ceb
--- /dev/null
+++ b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ListofNRCellsinNRCoordinationResp.h"
+
+#include "X2N_NRCGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ListofNRCellsinNRCoordinationResp_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  0,  64 }	/* (SIZE(0..64)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ListofNRCellsinNRCoordinationResp_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ListofNRCellsinNRCoordinationResp_specs_1 = {
+	sizeof(struct X2N_ListofNRCellsinNRCoordinationResp),
+	offsetof(struct X2N_ListofNRCellsinNRCoordinationResp, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ListofNRCellsinNRCoordinationResp = {
+	"ListofNRCellsinNRCoordinationResp",
+	"ListofNRCellsinNRCoordinationResp",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1,
+	sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1)
+		/sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1)
+		/sizeof(asn_DEF_X2N_ListofNRCellsinNRCoordinationResp_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ListofNRCellsinNRCoordinationResp_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ListofNRCellsinNRCoordinationResp_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ListofNRCellsinNRCoordinationResp_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.h b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.h
new file mode 100644
index 0000000..926fa49
--- /dev/null
+++ b/asn1c_defs/X2N_ListofNRCellsinNRCoordinationResp.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ListofNRCellsinNRCoordinationResp_H_
+#define	_X2N_ListofNRCellsinNRCoordinationResp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRCGI;
+
+/* X2N_ListofNRCellsinNRCoordinationResp */
+typedef struct X2N_ListofNRCellsinNRCoordinationResp {
+	A_SEQUENCE_OF(struct X2N_NRCGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ListofNRCellsinNRCoordinationResp_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ListofNRCellsinNRCoordinationResp;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ListofNRCellsinNRCoordinationResp_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LoadIndicator.c b/asn1c_defs/X2N_LoadIndicator.c
new file mode 100644
index 0000000..db3f114
--- /dev/null
+++ b/asn1c_defs/X2N_LoadIndicator.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LoadIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_LoadIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_LoadIndicator_value2enum_1[] = {
+	{ 0,	7,	"lowLoad" },
+	{ 1,	10,	"mediumLoad" },
+	{ 2,	8,	"highLoad" },
+	{ 3,	8,	"overLoad" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_LoadIndicator_enum2value_1[] = {
+	2,	/* highLoad(2) */
+	0,	/* lowLoad(0) */
+	1,	/* mediumLoad(1) */
+	3	/* overLoad(3) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_LoadIndicator_specs_1 = {
+	asn_MAP_X2N_LoadIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_LoadIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LoadIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LoadIndicator = {
+	"LoadIndicator",
+	"LoadIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_LoadIndicator_tags_1,
+	sizeof(asn_DEF_X2N_LoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_LoadIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LoadIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_LoadIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_LoadIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_LoadIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LoadIndicator.h b/asn1c_defs/X2N_LoadIndicator.h
new file mode 100644
index 0000000..c3eac2f
--- /dev/null
+++ b/asn1c_defs/X2N_LoadIndicator.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LoadIndicator_H_
+#define	_X2N_LoadIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_LoadIndicator {
+	X2N_LoadIndicator_lowLoad	= 0,
+	X2N_LoadIndicator_mediumLoad	= 1,
+	X2N_LoadIndicator_highLoad	= 2,
+	X2N_LoadIndicator_overLoad	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_LoadIndicator;
+
+/* X2N_LoadIndicator */
+typedef long	 X2N_LoadIndicator_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_LoadIndicator_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LoadIndicator;
+extern const asn_INTEGER_specifics_t asn_SPC_LoadIndicator_specs_1;
+asn_struct_free_f LoadIndicator_free;
+asn_struct_print_f LoadIndicator_print;
+asn_constr_check_f LoadIndicator_constraint;
+ber_type_decoder_f LoadIndicator_decode_ber;
+der_type_encoder_f LoadIndicator_encode_der;
+xer_type_decoder_f LoadIndicator_decode_xer;
+xer_type_encoder_f LoadIndicator_encode_xer;
+per_type_decoder_f LoadIndicator_decode_uper;
+per_type_encoder_f LoadIndicator_encode_uper;
+per_type_decoder_f LoadIndicator_decode_aper;
+per_type_encoder_f LoadIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LoadIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LoadInformation.c b/asn1c_defs/X2N_LoadInformation.c
new file mode 100644
index 0000000..c33c26d
--- /dev/null
+++ b/asn1c_defs/X2N_LoadInformation.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LoadInformation.h"
+
+asn_TYPE_member_t asn_MBR_X2N_LoadInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LoadInformation, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P13,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LoadInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LoadInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LoadInformation_specs_1 = {
+	sizeof(struct X2N_LoadInformation),
+	offsetof(struct X2N_LoadInformation, _asn_ctx),
+	asn_MAP_X2N_LoadInformation_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LoadInformation = {
+	"LoadInformation",
+	"LoadInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LoadInformation_tags_1,
+	sizeof(asn_DEF_X2N_LoadInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LoadInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LoadInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LoadInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LoadInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LoadInformation_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_LoadInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LoadInformation.h b/asn1c_defs/X2N_LoadInformation.h
new file mode 100644
index 0000000..7782bf0
--- /dev/null
+++ b/asn1c_defs/X2N_LoadInformation.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LoadInformation_H_
+#define	_X2N_LoadInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_LoadInformation */
+typedef struct X2N_LoadInformation {
+	X2N_ProtocolIE_Container_8180P13_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LoadInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LoadInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LoadInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_LoadInformation_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LoadInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_LocationReportingInformation.c b/asn1c_defs/X2N_LocationReportingInformation.c
new file mode 100644
index 0000000..3707371
--- /dev/null
+++ b/asn1c_defs/X2N_LocationReportingInformation.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_LocationReportingInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_LocationReportingInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LocationReportingInformation, eventType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EventType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eventType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LocationReportingInformation, reportArea),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReportArea,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reportArea"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_LocationReportingInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P158,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_LocationReportingInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_LocationReportingInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LocationReportingInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reportArea */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LocationReportingInformation_specs_1 = {
+	sizeof(struct X2N_LocationReportingInformation),
+	offsetof(struct X2N_LocationReportingInformation, _asn_ctx),
+	asn_MAP_X2N_LocationReportingInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_LocationReportingInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LocationReportingInformation = {
+	"LocationReportingInformation",
+	"LocationReportingInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LocationReportingInformation_tags_1,
+	sizeof(asn_DEF_X2N_LocationReportingInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LocationReportingInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_LocationReportingInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_LocationReportingInformation_tags_1)
+		/sizeof(asn_DEF_X2N_LocationReportingInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LocationReportingInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_LocationReportingInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_LocationReportingInformation.h b/asn1c_defs/X2N_LocationReportingInformation.h
new file mode 100644
index 0000000..60b69fa
--- /dev/null
+++ b/asn1c_defs/X2N_LocationReportingInformation.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_LocationReportingInformation_H_
+#define	_X2N_LocationReportingInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_EventType.h"
+#include "X2N_ReportArea.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_LocationReportingInformation */
+typedef struct X2N_LocationReportingInformation {
+	X2N_EventType_t	 eventType;
+	X2N_ReportArea_t	 reportArea;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LocationReportingInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LocationReportingInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LocationReportingInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_LocationReportingInformation_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_LocationReportingInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M1PeriodicReporting.c b/asn1c_defs/X2N_M1PeriodicReporting.c
new file mode 100644
index 0000000..6858266
--- /dev/null
+++ b/asn1c_defs/X2N_M1PeriodicReporting.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M1PeriodicReporting.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_M1PeriodicReporting_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1PeriodicReporting, reportInterval),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReportIntervalMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reportInterval"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1PeriodicReporting, reportAmount),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReportAmountMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reportAmount"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M1PeriodicReporting, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P159,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M1PeriodicReporting_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_M1PeriodicReporting_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M1PeriodicReporting_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reportInterval */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reportAmount */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M1PeriodicReporting_specs_1 = {
+	sizeof(struct X2N_M1PeriodicReporting),
+	offsetof(struct X2N_M1PeriodicReporting, _asn_ctx),
+	asn_MAP_X2N_M1PeriodicReporting_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_M1PeriodicReporting_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M1PeriodicReporting = {
+	"M1PeriodicReporting",
+	"M1PeriodicReporting",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M1PeriodicReporting_tags_1,
+	sizeof(asn_DEF_X2N_M1PeriodicReporting_tags_1)
+		/sizeof(asn_DEF_X2N_M1PeriodicReporting_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M1PeriodicReporting_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M1PeriodicReporting_tags_1)
+		/sizeof(asn_DEF_X2N_M1PeriodicReporting_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M1PeriodicReporting_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M1PeriodicReporting_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M1PeriodicReporting.h b/asn1c_defs/X2N_M1PeriodicReporting.h
new file mode 100644
index 0000000..35bd535
--- /dev/null
+++ b/asn1c_defs/X2N_M1PeriodicReporting.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M1PeriodicReporting_H_
+#define	_X2N_M1PeriodicReporting_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ReportIntervalMDT.h"
+#include "X2N_ReportAmountMDT.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M1PeriodicReporting */
+typedef struct X2N_M1PeriodicReporting {
+	X2N_ReportIntervalMDT_t	 reportInterval;
+	X2N_ReportAmountMDT_t	 reportAmount;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M1PeriodicReporting_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M1PeriodicReporting;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M1PeriodicReporting_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_M1PeriodicReporting_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M1PeriodicReporting_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M1ReportingTrigger.c b/asn1c_defs/X2N_M1ReportingTrigger.c
new file mode 100644
index 0000000..29a5384
--- /dev/null
+++ b/asn1c_defs/X2N_M1ReportingTrigger.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M1ReportingTrigger.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M1ReportingTrigger_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M1ReportingTrigger_value2enum_1[] = {
+	{ 0,	8,	"periodic" },
+	{ 1,	16,	"a2eventtriggered" },
+	{ 2,	25,	"a2eventtriggered-periodic" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M1ReportingTrigger_enum2value_1[] = {
+	1,	/* a2eventtriggered(1) */
+	2,	/* a2eventtriggered-periodic(2) */
+	0	/* periodic(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M1ReportingTrigger_specs_1 = {
+	asn_MAP_X2N_M1ReportingTrigger_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M1ReportingTrigger_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M1ReportingTrigger_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M1ReportingTrigger = {
+	"M1ReportingTrigger",
+	"M1ReportingTrigger",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M1ReportingTrigger_tags_1,
+	sizeof(asn_DEF_X2N_M1ReportingTrigger_tags_1)
+		/sizeof(asn_DEF_X2N_M1ReportingTrigger_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M1ReportingTrigger_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M1ReportingTrigger_tags_1)
+		/sizeof(asn_DEF_X2N_M1ReportingTrigger_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M1ReportingTrigger_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M1ReportingTrigger_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M1ReportingTrigger.h b/asn1c_defs/X2N_M1ReportingTrigger.h
new file mode 100644
index 0000000..7862d89
--- /dev/null
+++ b/asn1c_defs/X2N_M1ReportingTrigger.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M1ReportingTrigger_H_
+#define	_X2N_M1ReportingTrigger_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M1ReportingTrigger {
+	X2N_M1ReportingTrigger_periodic	= 0,
+	X2N_M1ReportingTrigger_a2eventtriggered	= 1,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_M1ReportingTrigger_a2eventtriggered_periodic	= 2
+} e_X2N_M1ReportingTrigger;
+
+/* X2N_M1ReportingTrigger */
+typedef long	 X2N_M1ReportingTrigger_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M1ReportingTrigger_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M1ReportingTrigger;
+extern const asn_INTEGER_specifics_t asn_SPC_M1ReportingTrigger_specs_1;
+asn_struct_free_f M1ReportingTrigger_free;
+asn_struct_print_f M1ReportingTrigger_print;
+asn_constr_check_f M1ReportingTrigger_constraint;
+ber_type_decoder_f M1ReportingTrigger_decode_ber;
+der_type_encoder_f M1ReportingTrigger_encode_der;
+xer_type_decoder_f M1ReportingTrigger_decode_xer;
+xer_type_encoder_f M1ReportingTrigger_encode_xer;
+per_type_decoder_f M1ReportingTrigger_decode_uper;
+per_type_encoder_f M1ReportingTrigger_encode_uper;
+per_type_decoder_f M1ReportingTrigger_decode_aper;
+per_type_encoder_f M1ReportingTrigger_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M1ReportingTrigger_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M1ThresholdEventA2.c b/asn1c_defs/X2N_M1ThresholdEventA2.c
new file mode 100644
index 0000000..5f5a4e2
--- /dev/null
+++ b/asn1c_defs/X2N_M1ThresholdEventA2.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M1ThresholdEventA2.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_M1ThresholdEventA2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1ThresholdEventA2, measurementThreshold),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_MeasurementThresholdA2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementThreshold"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M1ThresholdEventA2, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P160,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M1ThresholdEventA2_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_M1ThresholdEventA2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M1ThresholdEventA2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measurementThreshold */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M1ThresholdEventA2_specs_1 = {
+	sizeof(struct X2N_M1ThresholdEventA2),
+	offsetof(struct X2N_M1ThresholdEventA2, _asn_ctx),
+	asn_MAP_X2N_M1ThresholdEventA2_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_M1ThresholdEventA2_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M1ThresholdEventA2 = {
+	"M1ThresholdEventA2",
+	"M1ThresholdEventA2",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M1ThresholdEventA2_tags_1,
+	sizeof(asn_DEF_X2N_M1ThresholdEventA2_tags_1)
+		/sizeof(asn_DEF_X2N_M1ThresholdEventA2_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M1ThresholdEventA2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M1ThresholdEventA2_tags_1)
+		/sizeof(asn_DEF_X2N_M1ThresholdEventA2_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M1ThresholdEventA2_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_M1ThresholdEventA2_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M1ThresholdEventA2.h b/asn1c_defs/X2N_M1ThresholdEventA2.h
new file mode 100644
index 0000000..c9d9f95
--- /dev/null
+++ b/asn1c_defs/X2N_M1ThresholdEventA2.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M1ThresholdEventA2_H_
+#define	_X2N_M1ThresholdEventA2_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_MeasurementThresholdA2.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M1ThresholdEventA2 */
+typedef struct X2N_M1ThresholdEventA2 {
+	X2N_MeasurementThresholdA2_t	 measurementThreshold;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M1ThresholdEventA2_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M1ThresholdEventA2;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M1ThresholdEventA2_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_M1ThresholdEventA2_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M1ThresholdEventA2_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M3Configuration.c b/asn1c_defs/X2N_M3Configuration.c
new file mode 100644
index 0000000..3d01fd4
--- /dev/null
+++ b/asn1c_defs/X2N_M3Configuration.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M3Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_M3Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M3Configuration, m3period),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M3period,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m3period"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M3Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P161,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M3Configuration_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_M3Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M3Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m3period */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_M3Configuration_specs_1 = {
+	sizeof(struct X2N_M3Configuration),
+	offsetof(struct X2N_M3Configuration, _asn_ctx),
+	asn_MAP_X2N_M3Configuration_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_M3Configuration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M3Configuration = {
+	"M3Configuration",
+	"M3Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M3Configuration_tags_1,
+	sizeof(asn_DEF_X2N_M3Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M3Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M3Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M3Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M3Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M3Configuration_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_M3Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M3Configuration.h b/asn1c_defs/X2N_M3Configuration.h
new file mode 100644
index 0000000..ececf71
--- /dev/null
+++ b/asn1c_defs/X2N_M3Configuration.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M3Configuration_H_
+#define	_X2N_M3Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_M3period.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M3Configuration */
+typedef struct X2N_M3Configuration {
+	X2N_M3period_t	 m3period;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M3Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M3Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M3Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M3period.c b/asn1c_defs/X2N_M3period.c
new file mode 100644
index 0000000..3db5235
--- /dev/null
+++ b/asn1c_defs/X2N_M3period.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M3period.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M3period_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M3period_value2enum_1[] = {
+	{ 0,	5,	"ms100" },
+	{ 1,	6,	"ms1000" },
+	{ 2,	7,	"ms10000" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M3period_enum2value_1[] = {
+	0,	/* ms100(0) */
+	1,	/* ms1000(1) */
+	2	/* ms10000(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M3period_specs_1 = {
+	asn_MAP_X2N_M3period_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M3period_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M3period_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M3period = {
+	"M3period",
+	"M3period",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M3period_tags_1,
+	sizeof(asn_DEF_X2N_M3period_tags_1)
+		/sizeof(asn_DEF_X2N_M3period_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M3period_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M3period_tags_1)
+		/sizeof(asn_DEF_X2N_M3period_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M3period_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M3period_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M3period.h b/asn1c_defs/X2N_M3period.h
new file mode 100644
index 0000000..a635063
--- /dev/null
+++ b/asn1c_defs/X2N_M3period.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M3period_H_
+#define	_X2N_M3period_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M3period {
+	X2N_M3period_ms100	= 0,
+	X2N_M3period_ms1000	= 1,
+	X2N_M3period_ms10000	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_M3period;
+
+/* X2N_M3period */
+typedef long	 X2N_M3period_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M3period_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M3period;
+extern const asn_INTEGER_specifics_t asn_SPC_M3period_specs_1;
+asn_struct_free_f M3period_free;
+asn_struct_print_f M3period_print;
+asn_constr_check_f M3period_constraint;
+ber_type_decoder_f M3period_decode_ber;
+der_type_encoder_f M3period_encode_der;
+xer_type_decoder_f M3period_decode_xer;
+xer_type_encoder_f M3period_encode_xer;
+per_type_decoder_f M3period_decode_uper;
+per_type_encoder_f M3period_encode_uper;
+per_type_decoder_f M3period_decode_aper;
+per_type_encoder_f M3period_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M3period_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M4Configuration.c b/asn1c_defs/X2N_M4Configuration.c
new file mode 100644
index 0000000..7cc8427
--- /dev/null
+++ b/asn1c_defs/X2N_M4Configuration.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M4Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_M4Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M4Configuration, m4period),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M4period,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m4period"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M4Configuration, m4_links_to_log),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Links_to_log,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m4-links-to-log"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M4Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P162,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M4Configuration_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_M4Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M4Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m4period */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m4-links-to-log */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_M4Configuration_specs_1 = {
+	sizeof(struct X2N_M4Configuration),
+	offsetof(struct X2N_M4Configuration, _asn_ctx),
+	asn_MAP_X2N_M4Configuration_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_M4Configuration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M4Configuration = {
+	"M4Configuration",
+	"M4Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M4Configuration_tags_1,
+	sizeof(asn_DEF_X2N_M4Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M4Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M4Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M4Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M4Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M4Configuration_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M4Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M4Configuration.h b/asn1c_defs/X2N_M4Configuration.h
new file mode 100644
index 0000000..dadbe03
--- /dev/null
+++ b/asn1c_defs/X2N_M4Configuration.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M4Configuration_H_
+#define	_X2N_M4Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_M4period.h"
+#include "X2N_Links-to-log.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M4Configuration */
+typedef struct X2N_M4Configuration {
+	X2N_M4period_t	 m4period;
+	X2N_Links_to_log_t	 m4_links_to_log;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M4Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M4Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M4Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M4period.c b/asn1c_defs/X2N_M4period.c
new file mode 100644
index 0000000..477b859
--- /dev/null
+++ b/asn1c_defs/X2N_M4period.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M4period.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M4period_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M4period_value2enum_1[] = {
+	{ 0,	6,	"ms1024" },
+	{ 1,	6,	"ms2048" },
+	{ 2,	6,	"ms5120" },
+	{ 3,	7,	"ms10240" },
+	{ 4,	4,	"min1" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M4period_enum2value_1[] = {
+	4,	/* min1(4) */
+	0,	/* ms1024(0) */
+	3,	/* ms10240(3) */
+	1,	/* ms2048(1) */
+	2	/* ms5120(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M4period_specs_1 = {
+	asn_MAP_X2N_M4period_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M4period_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M4period_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M4period = {
+	"M4period",
+	"M4period",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M4period_tags_1,
+	sizeof(asn_DEF_X2N_M4period_tags_1)
+		/sizeof(asn_DEF_X2N_M4period_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M4period_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M4period_tags_1)
+		/sizeof(asn_DEF_X2N_M4period_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M4period_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M4period_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M4period.h b/asn1c_defs/X2N_M4period.h
new file mode 100644
index 0000000..33d7807
--- /dev/null
+++ b/asn1c_defs/X2N_M4period.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M4period_H_
+#define	_X2N_M4period_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M4period {
+	X2N_M4period_ms1024	= 0,
+	X2N_M4period_ms2048	= 1,
+	X2N_M4period_ms5120	= 2,
+	X2N_M4period_ms10240	= 3,
+	X2N_M4period_min1	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_M4period;
+
+/* X2N_M4period */
+typedef long	 X2N_M4period_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M4period_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M4period;
+extern const asn_INTEGER_specifics_t asn_SPC_M4period_specs_1;
+asn_struct_free_f M4period_free;
+asn_struct_print_f M4period_print;
+asn_constr_check_f M4period_constraint;
+ber_type_decoder_f M4period_decode_ber;
+der_type_encoder_f M4period_encode_der;
+xer_type_decoder_f M4period_decode_xer;
+xer_type_encoder_f M4period_encode_xer;
+per_type_decoder_f M4period_decode_uper;
+per_type_encoder_f M4period_encode_uper;
+per_type_decoder_f M4period_decode_aper;
+per_type_encoder_f M4period_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M4period_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M5Configuration.c b/asn1c_defs/X2N_M5Configuration.c
new file mode 100644
index 0000000..7bc9bef
--- /dev/null
+++ b/asn1c_defs/X2N_M5Configuration.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M5Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_M5Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M5Configuration, m5period),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M5period,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m5period"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M5Configuration, m5_links_to_log),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Links_to_log,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m5-links-to-log"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M5Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P163,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M5Configuration_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_M5Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M5Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m5period */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m5-links-to-log */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_M5Configuration_specs_1 = {
+	sizeof(struct X2N_M5Configuration),
+	offsetof(struct X2N_M5Configuration, _asn_ctx),
+	asn_MAP_X2N_M5Configuration_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_M5Configuration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M5Configuration = {
+	"M5Configuration",
+	"M5Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M5Configuration_tags_1,
+	sizeof(asn_DEF_X2N_M5Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M5Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M5Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M5Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M5Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M5Configuration_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M5Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M5Configuration.h b/asn1c_defs/X2N_M5Configuration.h
new file mode 100644
index 0000000..839da23
--- /dev/null
+++ b/asn1c_defs/X2N_M5Configuration.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M5Configuration_H_
+#define	_X2N_M5Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_M5period.h"
+#include "X2N_Links-to-log.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M5Configuration */
+typedef struct X2N_M5Configuration {
+	X2N_M5period_t	 m5period;
+	X2N_Links_to_log_t	 m5_links_to_log;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M5Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M5Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M5Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M5period.c b/asn1c_defs/X2N_M5period.c
new file mode 100644
index 0000000..4a7edf8
--- /dev/null
+++ b/asn1c_defs/X2N_M5period.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M5period.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M5period_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M5period_value2enum_1[] = {
+	{ 0,	6,	"ms1024" },
+	{ 1,	6,	"ms2048" },
+	{ 2,	6,	"ms5120" },
+	{ 3,	7,	"ms10240" },
+	{ 4,	4,	"min1" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M5period_enum2value_1[] = {
+	4,	/* min1(4) */
+	0,	/* ms1024(0) */
+	3,	/* ms10240(3) */
+	1,	/* ms2048(1) */
+	2	/* ms5120(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M5period_specs_1 = {
+	asn_MAP_X2N_M5period_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M5period_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M5period_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M5period = {
+	"M5period",
+	"M5period",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M5period_tags_1,
+	sizeof(asn_DEF_X2N_M5period_tags_1)
+		/sizeof(asn_DEF_X2N_M5period_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M5period_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M5period_tags_1)
+		/sizeof(asn_DEF_X2N_M5period_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M5period_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M5period_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M5period.h b/asn1c_defs/X2N_M5period.h
new file mode 100644
index 0000000..9341544
--- /dev/null
+++ b/asn1c_defs/X2N_M5period.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M5period_H_
+#define	_X2N_M5period_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M5period {
+	X2N_M5period_ms1024	= 0,
+	X2N_M5period_ms2048	= 1,
+	X2N_M5period_ms5120	= 2,
+	X2N_M5period_ms10240	= 3,
+	X2N_M5period_min1	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_M5period;
+
+/* X2N_M5period */
+typedef long	 X2N_M5period_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M5period_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M5period;
+extern const asn_INTEGER_specifics_t asn_SPC_M5period_specs_1;
+asn_struct_free_f M5period_free;
+asn_struct_print_f M5period_print;
+asn_constr_check_f M5period_constraint;
+ber_type_decoder_f M5period_decode_ber;
+der_type_encoder_f M5period_encode_der;
+xer_type_decoder_f M5period_decode_xer;
+xer_type_encoder_f M5period_encode_xer;
+per_type_decoder_f M5period_decode_uper;
+per_type_encoder_f M5period_encode_uper;
+per_type_decoder_f M5period_decode_aper;
+per_type_encoder_f M5period_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M5period_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M6Configuration.c b/asn1c_defs/X2N_M6Configuration.c
new file mode 100644
index 0000000..512011b
--- /dev/null
+++ b/asn1c_defs/X2N_M6Configuration.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M6Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_M6Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M6Configuration, m6report_interval),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M6report_interval,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m6report-interval"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M6Configuration, m6delay_threshold),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M6delay_threshold,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m6delay-threshold"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M6Configuration, m6_links_to_log),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Links_to_log,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m6-links-to-log"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M6Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P164,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M6Configuration_oms_1[] = { 1, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_M6Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M6Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m6report-interval */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m6delay-threshold */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* m6-links-to-log */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_M6Configuration_specs_1 = {
+	sizeof(struct X2N_M6Configuration),
+	offsetof(struct X2N_M6Configuration, _asn_ctx),
+	asn_MAP_X2N_M6Configuration_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_M6Configuration_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M6Configuration = {
+	"M6Configuration",
+	"M6Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M6Configuration_tags_1,
+	sizeof(asn_DEF_X2N_M6Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M6Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M6Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M6Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M6Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M6Configuration_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_M6Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M6Configuration.h b/asn1c_defs/X2N_M6Configuration.h
new file mode 100644
index 0000000..ec90664
--- /dev/null
+++ b/asn1c_defs/X2N_M6Configuration.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M6Configuration_H_
+#define	_X2N_M6Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_M6report-interval.h"
+#include "X2N_M6delay-threshold.h"
+#include "X2N_Links-to-log.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M6Configuration */
+typedef struct X2N_M6Configuration {
+	X2N_M6report_interval_t	 m6report_interval;
+	X2N_M6delay_threshold_t	*m6delay_threshold;	/* OPTIONAL */
+	X2N_Links_to_log_t	 m6_links_to_log;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M6Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M6Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M6Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M6delay-threshold.c b/asn1c_defs/X2N_M6delay-threshold.c
new file mode 100644
index 0000000..3c57270
--- /dev/null
+++ b/asn1c_defs/X2N_M6delay-threshold.c
@@ -0,0 +1,75 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M6delay-threshold.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M6delay_threshold_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  11 }	/* (0..11,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M6delay_threshold_value2enum_1[] = {
+	{ 0,	4,	"ms30" },
+	{ 1,	4,	"ms40" },
+	{ 2,	4,	"ms50" },
+	{ 3,	4,	"ms60" },
+	{ 4,	4,	"ms70" },
+	{ 5,	4,	"ms80" },
+	{ 6,	4,	"ms90" },
+	{ 7,	5,	"ms100" },
+	{ 8,	5,	"ms150" },
+	{ 9,	5,	"ms300" },
+	{ 10,	5,	"ms500" },
+	{ 11,	5,	"ms750" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M6delay_threshold_enum2value_1[] = {
+	7,	/* ms100(7) */
+	8,	/* ms150(8) */
+	0,	/* ms30(0) */
+	9,	/* ms300(9) */
+	1,	/* ms40(1) */
+	2,	/* ms50(2) */
+	10,	/* ms500(10) */
+	3,	/* ms60(3) */
+	4,	/* ms70(4) */
+	11,	/* ms750(11) */
+	5,	/* ms80(5) */
+	6	/* ms90(6) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M6delay_threshold_specs_1 = {
+	asn_MAP_X2N_M6delay_threshold_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M6delay_threshold_enum2value_1,	/* N => "tag"; sorted by N */
+	12,	/* Number of elements in the maps */
+	13,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M6delay_threshold_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M6delay_threshold = {
+	"M6delay-threshold",
+	"M6delay-threshold",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M6delay_threshold_tags_1,
+	sizeof(asn_DEF_X2N_M6delay_threshold_tags_1)
+		/sizeof(asn_DEF_X2N_M6delay_threshold_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M6delay_threshold_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M6delay_threshold_tags_1)
+		/sizeof(asn_DEF_X2N_M6delay_threshold_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M6delay_threshold_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M6delay_threshold_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M6delay-threshold.h b/asn1c_defs/X2N_M6delay-threshold.h
new file mode 100644
index 0000000..a122f6e
--- /dev/null
+++ b/asn1c_defs/X2N_M6delay-threshold.h
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M6delay_threshold_H_
+#define	_X2N_M6delay_threshold_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M6delay_threshold {
+	X2N_M6delay_threshold_ms30	= 0,
+	X2N_M6delay_threshold_ms40	= 1,
+	X2N_M6delay_threshold_ms50	= 2,
+	X2N_M6delay_threshold_ms60	= 3,
+	X2N_M6delay_threshold_ms70	= 4,
+	X2N_M6delay_threshold_ms80	= 5,
+	X2N_M6delay_threshold_ms90	= 6,
+	X2N_M6delay_threshold_ms100	= 7,
+	X2N_M6delay_threshold_ms150	= 8,
+	X2N_M6delay_threshold_ms300	= 9,
+	X2N_M6delay_threshold_ms500	= 10,
+	X2N_M6delay_threshold_ms750	= 11
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_M6delay_threshold;
+
+/* X2N_M6delay-threshold */
+typedef long	 X2N_M6delay_threshold_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M6delay_threshold_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M6delay_threshold;
+extern const asn_INTEGER_specifics_t asn_SPC_M6delay_threshold_specs_1;
+asn_struct_free_f M6delay_threshold_free;
+asn_struct_print_f M6delay_threshold_print;
+asn_constr_check_f M6delay_threshold_constraint;
+ber_type_decoder_f M6delay_threshold_decode_ber;
+der_type_encoder_f M6delay_threshold_encode_der;
+xer_type_decoder_f M6delay_threshold_decode_xer;
+xer_type_encoder_f M6delay_threshold_encode_xer;
+per_type_decoder_f M6delay_threshold_decode_uper;
+per_type_encoder_f M6delay_threshold_encode_uper;
+per_type_decoder_f M6delay_threshold_decode_aper;
+per_type_encoder_f M6delay_threshold_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M6delay_threshold_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M6report-interval.c b/asn1c_defs/X2N_M6report-interval.c
new file mode 100644
index 0000000..14812e9
--- /dev/null
+++ b/asn1c_defs/X2N_M6report-interval.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M6report-interval.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M6report_interval_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_M6report_interval_value2enum_1[] = {
+	{ 0,	6,	"ms1024" },
+	{ 1,	6,	"ms2048" },
+	{ 2,	6,	"ms5120" },
+	{ 3,	7,	"ms10240" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_M6report_interval_enum2value_1[] = {
+	0,	/* ms1024(0) */
+	3,	/* ms10240(3) */
+	1,	/* ms2048(1) */
+	2	/* ms5120(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_M6report_interval_specs_1 = {
+	asn_MAP_X2N_M6report_interval_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_M6report_interval_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M6report_interval_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M6report_interval = {
+	"M6report-interval",
+	"M6report-interval",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_M6report_interval_tags_1,
+	sizeof(asn_DEF_X2N_M6report_interval_tags_1)
+		/sizeof(asn_DEF_X2N_M6report_interval_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M6report_interval_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M6report_interval_tags_1)
+		/sizeof(asn_DEF_X2N_M6report_interval_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M6report_interval_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_M6report_interval_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M6report-interval.h b/asn1c_defs/X2N_M6report-interval.h
new file mode 100644
index 0000000..b608b67
--- /dev/null
+++ b/asn1c_defs/X2N_M6report-interval.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M6report_interval_H_
+#define	_X2N_M6report_interval_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_M6report_interval {
+	X2N_M6report_interval_ms1024	= 0,
+	X2N_M6report_interval_ms2048	= 1,
+	X2N_M6report_interval_ms5120	= 2,
+	X2N_M6report_interval_ms10240	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_M6report_interval;
+
+/* X2N_M6report-interval */
+typedef long	 X2N_M6report_interval_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M6report_interval_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M6report_interval;
+extern const asn_INTEGER_specifics_t asn_SPC_M6report_interval_specs_1;
+asn_struct_free_f M6report_interval_free;
+asn_struct_print_f M6report_interval_print;
+asn_constr_check_f M6report_interval_constraint;
+ber_type_decoder_f M6report_interval_decode_ber;
+der_type_encoder_f M6report_interval_encode_der;
+xer_type_decoder_f M6report_interval_decode_xer;
+xer_type_encoder_f M6report_interval_encode_xer;
+per_type_decoder_f M6report_interval_decode_uper;
+per_type_encoder_f M6report_interval_encode_uper;
+per_type_decoder_f M6report_interval_decode_aper;
+per_type_encoder_f M6report_interval_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M6report_interval_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M7Configuration.c b/asn1c_defs/X2N_M7Configuration.c
new file mode 100644
index 0000000..cc62225
--- /dev/null
+++ b/asn1c_defs/X2N_M7Configuration.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M7Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_M7Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M7Configuration, m7period),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M7period,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m7period"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M7Configuration, m7_links_to_log),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Links_to_log,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m7-links-to-log"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_M7Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P165,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_M7Configuration_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_M7Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M7Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m7period */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m7-links-to-log */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_M7Configuration_specs_1 = {
+	sizeof(struct X2N_M7Configuration),
+	offsetof(struct X2N_M7Configuration, _asn_ctx),
+	asn_MAP_X2N_M7Configuration_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_M7Configuration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M7Configuration = {
+	"M7Configuration",
+	"M7Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M7Configuration_tags_1,
+	sizeof(asn_DEF_X2N_M7Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M7Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M7Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M7Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_M7Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M7Configuration_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M7Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_M7Configuration.h b/asn1c_defs/X2N_M7Configuration.h
new file mode 100644
index 0000000..3060ad5
--- /dev/null
+++ b/asn1c_defs/X2N_M7Configuration.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M7Configuration_H_
+#define	_X2N_M7Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_M7period.h"
+#include "X2N_Links-to-log.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_M7Configuration */
+typedef struct X2N_M7Configuration {
+	X2N_M7period_t	 m7period;
+	X2N_Links_to_log_t	 m7_links_to_log;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M7Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M7Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M7Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_M7period.c b/asn1c_defs/X2N_M7period.c
new file mode 100644
index 0000000..6044fc4
--- /dev/null
+++ b/asn1c_defs/X2N_M7period.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_M7period.h"
+
+int
+X2N_M7period_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 60)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_M7period_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  6,  6,  1,  60 }	/* (1..60,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M7period_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M7period = {
+	"M7period",
+	"M7period",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_M7period_tags_1,
+	sizeof(asn_DEF_X2N_M7period_tags_1)
+		/sizeof(asn_DEF_X2N_M7period_tags_1[0]), /* 1 */
+	asn_DEF_X2N_M7period_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_M7period_tags_1)
+		/sizeof(asn_DEF_X2N_M7period_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_M7period_constr_1, X2N_M7period_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_M7period.h b/asn1c_defs/X2N_M7period.h
new file mode 100644
index 0000000..ea0a55f
--- /dev/null
+++ b/asn1c_defs/X2N_M7period.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_M7period_H_
+#define	_X2N_M7period_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_M7period */
+typedef long	 X2N_M7period_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_M7period_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M7period;
+asn_struct_free_f X2N_M7period_free;
+asn_struct_print_f X2N_M7period_print;
+asn_constr_check_f X2N_M7period_constraint;
+ber_type_decoder_f X2N_M7period_decode_ber;
+der_type_encoder_f X2N_M7period_encode_der;
+xer_type_decoder_f X2N_M7period_decode_xer;
+xer_type_encoder_f X2N_M7period_encode_xer;
+per_type_decoder_f X2N_M7period_decode_uper;
+per_type_encoder_f X2N_M7period_encode_uper;
+per_type_decoder_f X2N_M7period_decode_aper;
+per_type_encoder_f X2N_M7period_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_M7period_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.c b/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.c
new file mode 100644
index 0000000..36519ef
--- /dev/null
+++ b/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MBMS-Service-Area-Identity-List.h"
+
+static asn_per_constraints_t asn_PER_type_X2N_MBMS_Service_Area_Identity_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MBMS_Service_Area_Identity_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MBMS_Service_Area_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_MBMS_Service_Area_Identity_List_specs_1 = {
+	sizeof(struct X2N_MBMS_Service_Area_Identity_List),
+	offsetof(struct X2N_MBMS_Service_Area_Identity_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MBMS_Service_Area_Identity_List = {
+	"MBMS-Service-Area-Identity-List",
+	"MBMS-Service-Area-Identity-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1,
+	sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1)
+		/sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1)
+		/sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MBMS_Service_Area_Identity_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MBMS_Service_Area_Identity_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MBMS_Service_Area_Identity_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.h b/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.h
new file mode 100644
index 0000000..183ab1c
--- /dev/null
+++ b/asn1c_defs/X2N_MBMS-Service-Area-Identity-List.h
@@ -0,0 +1,39 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MBMS_Service_Area_Identity_List_H_
+#define	_X2N_MBMS_Service_Area_Identity_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_MBMS-Service-Area-Identity.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MBMS-Service-Area-Identity-List */
+typedef struct X2N_MBMS_Service_Area_Identity_List {
+	A_SEQUENCE_OF(X2N_MBMS_Service_Area_Identity_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MBMS_Service_Area_Identity_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MBMS_Service_Area_Identity_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MBMS_Service_Area_Identity_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MBMS-Service-Area-Identity.c b/asn1c_defs/X2N_MBMS-Service-Area-Identity.c
new file mode 100644
index 0000000..084547a
--- /dev/null
+++ b/asn1c_defs/X2N_MBMS-Service-Area-Identity.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MBMS-Service-Area-Identity.h"
+
+int
+X2N_MBMS_Service_Area_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_MBMS_Service_Area_Identity_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MBMS_Service_Area_Identity = {
+	"MBMS-Service-Area-Identity",
+	"MBMS-Service-Area-Identity",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1,
+	sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1)
+		/sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1)
+		/sizeof(asn_DEF_X2N_MBMS_Service_Area_Identity_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MBMS_Service_Area_Identity_constr_1, X2N_MBMS_Service_Area_Identity_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MBMS-Service-Area-Identity.h b/asn1c_defs/X2N_MBMS-Service-Area-Identity.h
new file mode 100644
index 0000000..c756e20
--- /dev/null
+++ b/asn1c_defs/X2N_MBMS-Service-Area-Identity.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MBMS_Service_Area_Identity_H_
+#define	_X2N_MBMS_Service_Area_Identity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MBMS-Service-Area-Identity */
+typedef OCTET_STRING_t	 X2N_MBMS_Service_Area_Identity_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_MBMS_Service_Area_Identity_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MBMS_Service_Area_Identity;
+asn_struct_free_f X2N_MBMS_Service_Area_Identity_free;
+asn_struct_print_f X2N_MBMS_Service_Area_Identity_print;
+asn_constr_check_f X2N_MBMS_Service_Area_Identity_constraint;
+ber_type_decoder_f X2N_MBMS_Service_Area_Identity_decode_ber;
+der_type_encoder_f X2N_MBMS_Service_Area_Identity_encode_der;
+xer_type_decoder_f X2N_MBMS_Service_Area_Identity_decode_xer;
+xer_type_encoder_f X2N_MBMS_Service_Area_Identity_encode_xer;
+per_type_decoder_f X2N_MBMS_Service_Area_Identity_decode_uper;
+per_type_encoder_f X2N_MBMS_Service_Area_Identity_encode_uper;
+per_type_decoder_f X2N_MBMS_Service_Area_Identity_decode_aper;
+per_type_encoder_f X2N_MBMS_Service_Area_Identity_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MBMS_Service_Area_Identity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MBSFN-Subframe-Info.c b/asn1c_defs/X2N_MBSFN-Subframe-Info.c
new file mode 100644
index 0000000..2b5b958
--- /dev/null
+++ b/asn1c_defs/X2N_MBSFN-Subframe-Info.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MBSFN-Subframe-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_MBSFN_Subframe_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info, radioframeAllocationPeriod),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RadioframeAllocationPeriod,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioframeAllocationPeriod"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info, radioframeAllocationOffset),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RadioframeAllocationOffset,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"radioframeAllocationOffset"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info, subframeAllocation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_SubframeAllocation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subframeAllocation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_MBSFN_Subframe_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P168,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_MBSFN_Subframe_Info_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_MBSFN_Subframe_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MBSFN_Subframe_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioframeAllocationPeriod */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* radioframeAllocationOffset */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subframeAllocation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MBSFN_Subframe_Info_specs_1 = {
+	sizeof(struct X2N_MBSFN_Subframe_Info),
+	offsetof(struct X2N_MBSFN_Subframe_Info, _asn_ctx),
+	asn_MAP_X2N_MBSFN_Subframe_Info_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_MBSFN_Subframe_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Info = {
+	"MBSFN-Subframe-Info",
+	"MBSFN-Subframe-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MBSFN_Subframe_Info_tags_1,
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MBSFN_Subframe_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MBSFN_Subframe_Info_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_MBSFN_Subframe_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MBSFN-Subframe-Info.h b/asn1c_defs/X2N_MBSFN-Subframe-Info.h
new file mode 100644
index 0000000..a3134c3
--- /dev/null
+++ b/asn1c_defs/X2N_MBSFN-Subframe-Info.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MBSFN_Subframe_Info_H_
+#define	_X2N_MBSFN_Subframe_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_RadioframeAllocationPeriod.h"
+#include "X2N_RadioframeAllocationOffset.h"
+#include "X2N_SubframeAllocation.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_MBSFN-Subframe-Info */
+typedef struct X2N_MBSFN_Subframe_Info {
+	X2N_RadioframeAllocationPeriod_t	 radioframeAllocationPeriod;
+	X2N_RadioframeAllocationOffset_t	 radioframeAllocationOffset;
+	X2N_SubframeAllocation_t	 subframeAllocation;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MBSFN_Subframe_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Info;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MBSFN_Subframe_Info_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MBSFN_Subframe_Info_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MBSFN_Subframe_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MBSFN-Subframe-Infolist.c b/asn1c_defs/X2N_MBSFN-Subframe-Infolist.c
new file mode 100644
index 0000000..06a0bcc
--- /dev/null
+++ b/asn1c_defs/X2N_MBSFN-Subframe-Infolist.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MBSFN-Subframe-Infolist.h"
+
+#include "X2N_MBSFN-Subframe-Info.h"
+static asn_per_constraints_t asn_PER_type_X2N_MBSFN_Subframe_Infolist_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MBSFN_Subframe_Infolist_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MBSFN_Subframe_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_MBSFN_Subframe_Infolist_specs_1 = {
+	sizeof(struct X2N_MBSFN_Subframe_Infolist),
+	offsetof(struct X2N_MBSFN_Subframe_Infolist, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Infolist = {
+	"MBSFN-Subframe-Infolist",
+	"MBSFN-Subframe-Infolist",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1,
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Infolist_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MBSFN_Subframe_Infolist_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MBSFN_Subframe_Infolist_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MBSFN_Subframe_Infolist_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MBSFN-Subframe-Infolist.h b/asn1c_defs/X2N_MBSFN-Subframe-Infolist.h
new file mode 100644
index 0000000..0efc84f
--- /dev/null
+++ b/asn1c_defs/X2N_MBSFN-Subframe-Infolist.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MBSFN_Subframe_Infolist_H_
+#define	_X2N_MBSFN_Subframe_Infolist_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_MBSFN_Subframe_Info;
+
+/* X2N_MBSFN-Subframe-Infolist */
+typedef struct X2N_MBSFN_Subframe_Infolist {
+	A_SEQUENCE_OF(struct X2N_MBSFN_Subframe_Info) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MBSFN_Subframe_Infolist_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Infolist;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MBSFN_Subframe_Infolist_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MDT-Activation.c b/asn1c_defs/X2N_MDT-Activation.c
new file mode 100644
index 0000000..909329f
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Activation.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MDT-Activation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_MDT_Activation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_MDT_Activation_value2enum_1[] = {
+	{ 0,	18,	"immediate-MDT-only" },
+	{ 1,	23,	"immediate-MDT-and-Trace" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_MDT_Activation_enum2value_1[] = {
+	1,	/* immediate-MDT-and-Trace(1) */
+	0	/* immediate-MDT-only(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_MDT_Activation_specs_1 = {
+	asn_MAP_X2N_MDT_Activation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_MDT_Activation_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MDT_Activation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Activation = {
+	"MDT-Activation",
+	"MDT-Activation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_MDT_Activation_tags_1,
+	sizeof(asn_DEF_X2N_MDT_Activation_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Activation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MDT_Activation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MDT_Activation_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Activation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MDT_Activation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_MDT_Activation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MDT-Activation.h b/asn1c_defs/X2N_MDT-Activation.h
new file mode 100644
index 0000000..11aa5f0
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Activation.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MDT_Activation_H_
+#define	_X2N_MDT_Activation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_MDT_Activation {
+	X2N_MDT_Activation_immediate_MDT_only	= 0,
+	X2N_MDT_Activation_immediate_MDT_and_Trace	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_MDT_Activation;
+
+/* X2N_MDT-Activation */
+typedef long	 X2N_MDT_Activation_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_MDT_Activation_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Activation;
+extern const asn_INTEGER_specifics_t asn_SPC_MDT_Activation_specs_1;
+asn_struct_free_f MDT_Activation_free;
+asn_struct_print_f MDT_Activation_print;
+asn_constr_check_f MDT_Activation_constraint;
+ber_type_decoder_f MDT_Activation_decode_ber;
+der_type_encoder_f MDT_Activation_encode_der;
+xer_type_decoder_f MDT_Activation_decode_xer;
+xer_type_encoder_f MDT_Activation_encode_xer;
+per_type_decoder_f MDT_Activation_decode_uper;
+per_type_encoder_f MDT_Activation_encode_uper;
+per_type_decoder_f MDT_Activation_decode_aper;
+per_type_encoder_f MDT_Activation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MDT_Activation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MDT-Configuration.c b/asn1c_defs/X2N_MDT-Configuration.c
new file mode 100644
index 0000000..f7fb57f
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Configuration.c
@@ -0,0 +1,115 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MDT-Configuration.h"
+
+#include "X2N_M1ThresholdEventA2.h"
+#include "X2N_M1PeriodicReporting.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_MDT_Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration, mdt_Activation),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MDT_Activation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mdt-Activation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration, areaScopeOfMDT),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_AreaScopeOfMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"areaScopeOfMDT"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration, measurementsToActivate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeasurementsToActivate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementsToActivate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration, m1reportingTrigger),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M1ReportingTrigger,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m1reportingTrigger"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_MDT_Configuration, m1thresholdeventA2),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M1ThresholdEventA2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m1thresholdeventA2"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_MDT_Configuration, m1periodicReporting),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_M1PeriodicReporting,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"m1periodicReporting"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_MDT_Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P166,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_MDT_Configuration_oms_1[] = { 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_MDT_Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MDT_Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mdt-Activation */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* areaScopeOfMDT */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measurementsToActivate */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m1reportingTrigger */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* m1thresholdeventA2 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* m1periodicReporting */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MDT_Configuration_specs_1 = {
+	sizeof(struct X2N_MDT_Configuration),
+	offsetof(struct X2N_MDT_Configuration, _asn_ctx),
+	asn_MAP_X2N_MDT_Configuration_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_MDT_Configuration_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Configuration = {
+	"MDT-Configuration",
+	"MDT-Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MDT_Configuration_tags_1,
+	sizeof(asn_DEF_X2N_MDT_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MDT_Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MDT_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MDT_Configuration_1,
+	7,	/* Elements count */
+	&asn_SPC_X2N_MDT_Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MDT-Configuration.h b/asn1c_defs/X2N_MDT-Configuration.h
new file mode 100644
index 0000000..50d27b9
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Configuration.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MDT_Configuration_H_
+#define	_X2N_MDT_Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_MDT-Activation.h"
+#include "X2N_AreaScopeOfMDT.h"
+#include "X2N_MeasurementsToActivate.h"
+#include "X2N_M1ReportingTrigger.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_M1ThresholdEventA2;
+struct X2N_M1PeriodicReporting;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_MDT-Configuration */
+typedef struct X2N_MDT_Configuration {
+	X2N_MDT_Activation_t	 mdt_Activation;
+	X2N_AreaScopeOfMDT_t	 areaScopeOfMDT;
+	X2N_MeasurementsToActivate_t	 measurementsToActivate;
+	X2N_M1ReportingTrigger_t	 m1reportingTrigger;
+	struct X2N_M1ThresholdEventA2	*m1thresholdeventA2;	/* OPTIONAL */
+	struct X2N_M1PeriodicReporting	*m1periodicReporting;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MDT_Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MDT_Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MDT-Location-Info.c b/asn1c_defs/X2N_MDT-Location-Info.c
new file mode 100644
index 0000000..1fdefc0
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Location-Info.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MDT-Location-Info.h"
+
+int
+X2N_MDT_Location_Info_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_MDT_Location_Info_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MDT_Location_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Location_Info = {
+	"MDT-Location-Info",
+	"MDT-Location-Info",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_MDT_Location_Info_tags_1,
+	sizeof(asn_DEF_X2N_MDT_Location_Info_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Location_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MDT_Location_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MDT_Location_Info_tags_1)
+		/sizeof(asn_DEF_X2N_MDT_Location_Info_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MDT_Location_Info_constr_1, X2N_MDT_Location_Info_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MDT-Location-Info.h b/asn1c_defs/X2N_MDT-Location-Info.h
new file mode 100644
index 0000000..6f0d9d2
--- /dev/null
+++ b/asn1c_defs/X2N_MDT-Location-Info.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MDT_Location_Info_H_
+#define	_X2N_MDT_Location_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MDT-Location-Info */
+typedef BIT_STRING_t	 X2N_MDT_Location_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Location_Info;
+asn_struct_free_f X2N_MDT_Location_Info_free;
+asn_struct_print_f X2N_MDT_Location_Info_print;
+asn_constr_check_f X2N_MDT_Location_Info_constraint;
+ber_type_decoder_f X2N_MDT_Location_Info_decode_ber;
+der_type_encoder_f X2N_MDT_Location_Info_encode_der;
+xer_type_decoder_f X2N_MDT_Location_Info_decode_xer;
+xer_type_encoder_f X2N_MDT_Location_Info_encode_xer;
+per_type_decoder_f X2N_MDT_Location_Info_decode_uper;
+per_type_encoder_f X2N_MDT_Location_Info_encode_uper;
+per_type_decoder_f X2N_MDT_Location_Info_decode_aper;
+per_type_encoder_f X2N_MDT_Location_Info_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MDT_Location_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MDTPLMNList.c b/asn1c_defs/X2N_MDTPLMNList.c
new file mode 100644
index 0000000..fa74ae9
--- /dev/null
+++ b/asn1c_defs/X2N_MDTPLMNList.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MDTPLMNList.h"
+
+asn_per_constraints_t asn_PER_type_X2N_MDTPLMNList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_MDTPLMNList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MDTPLMNList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_MDTPLMNList_specs_1 = {
+	sizeof(struct X2N_MDTPLMNList),
+	offsetof(struct X2N_MDTPLMNList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MDTPLMNList = {
+	"MDTPLMNList",
+	"MDTPLMNList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MDTPLMNList_tags_1,
+	sizeof(asn_DEF_X2N_MDTPLMNList_tags_1)
+		/sizeof(asn_DEF_X2N_MDTPLMNList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MDTPLMNList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MDTPLMNList_tags_1)
+		/sizeof(asn_DEF_X2N_MDTPLMNList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MDTPLMNList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MDTPLMNList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MDTPLMNList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MDTPLMNList.h b/asn1c_defs/X2N_MDTPLMNList.h
new file mode 100644
index 0000000..0967d57
--- /dev/null
+++ b/asn1c_defs/X2N_MDTPLMNList.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MDTPLMNList_H_
+#define	_X2N_MDTPLMNList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MDTPLMNList */
+typedef struct X2N_MDTPLMNList {
+	A_SEQUENCE_OF(X2N_PLMN_Identity_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MDTPLMNList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MDTPLMNList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_MDTPLMNList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MDTPLMNList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_MDTPLMNList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MDTPLMNList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MME-Code.c b/asn1c_defs/X2N_MME-Code.c
new file mode 100644
index 0000000..c4df8c6
--- /dev/null
+++ b/asn1c_defs/X2N_MME-Code.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MME-Code.h"
+
+int
+X2N_MME_Code_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 1)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_MME_Code_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  1,  1 }	/* (SIZE(1..1)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MME_Code_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MME_Code = {
+	"MME-Code",
+	"MME-Code",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_MME_Code_tags_1,
+	sizeof(asn_DEF_X2N_MME_Code_tags_1)
+		/sizeof(asn_DEF_X2N_MME_Code_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MME_Code_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MME_Code_tags_1)
+		/sizeof(asn_DEF_X2N_MME_Code_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MME_Code_constr_1, X2N_MME_Code_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MME-Code.h b/asn1c_defs/X2N_MME-Code.h
new file mode 100644
index 0000000..435b33d
--- /dev/null
+++ b/asn1c_defs/X2N_MME-Code.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MME_Code_H_
+#define	_X2N_MME_Code_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MME-Code */
+typedef OCTET_STRING_t	 X2N_MME_Code_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_MME_Code_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MME_Code;
+asn_struct_free_f X2N_MME_Code_free;
+asn_struct_print_f X2N_MME_Code_print;
+asn_constr_check_f X2N_MME_Code_constraint;
+ber_type_decoder_f X2N_MME_Code_decode_ber;
+der_type_encoder_f X2N_MME_Code_encode_der;
+xer_type_decoder_f X2N_MME_Code_decode_xer;
+xer_type_encoder_f X2N_MME_Code_encode_xer;
+per_type_decoder_f X2N_MME_Code_decode_uper;
+per_type_encoder_f X2N_MME_Code_encode_uper;
+per_type_decoder_f X2N_MME_Code_decode_aper;
+per_type_encoder_f X2N_MME_Code_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MME_Code_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MME-Group-ID.c b/asn1c_defs/X2N_MME-Group-ID.c
new file mode 100644
index 0000000..d0e5be4
--- /dev/null
+++ b/asn1c_defs/X2N_MME-Group-ID.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MME-Group-ID.h"
+
+int
+X2N_MME_Group_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_MME_Group_ID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MME_Group_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MME_Group_ID = {
+	"MME-Group-ID",
+	"MME-Group-ID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_MME_Group_ID_tags_1,
+	sizeof(asn_DEF_X2N_MME_Group_ID_tags_1)
+		/sizeof(asn_DEF_X2N_MME_Group_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MME_Group_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MME_Group_ID_tags_1)
+		/sizeof(asn_DEF_X2N_MME_Group_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MME_Group_ID_constr_1, X2N_MME_Group_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MME-Group-ID.h b/asn1c_defs/X2N_MME-Group-ID.h
new file mode 100644
index 0000000..66421e4
--- /dev/null
+++ b/asn1c_defs/X2N_MME-Group-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MME_Group_ID_H_
+#define	_X2N_MME_Group_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MME-Group-ID */
+typedef OCTET_STRING_t	 X2N_MME_Group_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_MME_Group_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MME_Group_ID;
+asn_struct_free_f X2N_MME_Group_ID_free;
+asn_struct_print_f X2N_MME_Group_ID_print;
+asn_constr_check_f X2N_MME_Group_ID_constraint;
+ber_type_decoder_f X2N_MME_Group_ID_decode_ber;
+der_type_encoder_f X2N_MME_Group_ID_encode_der;
+xer_type_decoder_f X2N_MME_Group_ID_decode_xer;
+xer_type_encoder_f X2N_MME_Group_ID_encode_xer;
+per_type_decoder_f X2N_MME_Group_ID_decode_uper;
+per_type_encoder_f X2N_MME_Group_ID_encode_uper;
+per_type_decoder_f X2N_MME_Group_ID_decode_aper;
+per_type_encoder_f X2N_MME_Group_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MME_Group_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MakeBeforeBreakIndicator.c b/asn1c_defs/X2N_MakeBeforeBreakIndicator.c
new file mode 100644
index 0000000..f85c4ba
--- /dev/null
+++ b/asn1c_defs/X2N_MakeBeforeBreakIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MakeBeforeBreakIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_MakeBeforeBreakIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_MakeBeforeBreakIndicator_value2enum_1[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_MakeBeforeBreakIndicator_enum2value_1[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_MakeBeforeBreakIndicator_specs_1 = {
+	asn_MAP_X2N_MakeBeforeBreakIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_MakeBeforeBreakIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MakeBeforeBreakIndicator = {
+	"MakeBeforeBreakIndicator",
+	"MakeBeforeBreakIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1,
+	sizeof(asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_MakeBeforeBreakIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MakeBeforeBreakIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_MakeBeforeBreakIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MakeBeforeBreakIndicator.h b/asn1c_defs/X2N_MakeBeforeBreakIndicator.h
new file mode 100644
index 0000000..171ed80
--- /dev/null
+++ b/asn1c_defs/X2N_MakeBeforeBreakIndicator.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MakeBeforeBreakIndicator_H_
+#define	_X2N_MakeBeforeBreakIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_MakeBeforeBreakIndicator {
+	X2N_MakeBeforeBreakIndicator_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_MakeBeforeBreakIndicator;
+
+/* X2N_MakeBeforeBreakIndicator */
+typedef long	 X2N_MakeBeforeBreakIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MakeBeforeBreakIndicator;
+asn_struct_free_f X2N_MakeBeforeBreakIndicator_free;
+asn_struct_print_f X2N_MakeBeforeBreakIndicator_print;
+asn_constr_check_f X2N_MakeBeforeBreakIndicator_constraint;
+ber_type_decoder_f X2N_MakeBeforeBreakIndicator_decode_ber;
+der_type_encoder_f X2N_MakeBeforeBreakIndicator_encode_der;
+xer_type_decoder_f X2N_MakeBeforeBreakIndicator_decode_xer;
+xer_type_encoder_f X2N_MakeBeforeBreakIndicator_encode_xer;
+per_type_decoder_f X2N_MakeBeforeBreakIndicator_decode_uper;
+per_type_encoder_f X2N_MakeBeforeBreakIndicator_encode_uper;
+per_type_decoder_f X2N_MakeBeforeBreakIndicator_decode_aper;
+per_type_encoder_f X2N_MakeBeforeBreakIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MakeBeforeBreakIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ManagementBasedMDTallowed.c b/asn1c_defs/X2N_ManagementBasedMDTallowed.c
new file mode 100644
index 0000000..2848d55
--- /dev/null
+++ b/asn1c_defs/X2N_ManagementBasedMDTallowed.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ManagementBasedMDTallowed.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ManagementBasedMDTallowed_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ManagementBasedMDTallowed_value2enum_1[] = {
+	{ 0,	7,	"allowed" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ManagementBasedMDTallowed_enum2value_1[] = {
+	0	/* allowed(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ManagementBasedMDTallowed_specs_1 = {
+	asn_MAP_X2N_ManagementBasedMDTallowed_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ManagementBasedMDTallowed_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ManagementBasedMDTallowed_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ManagementBasedMDTallowed = {
+	"ManagementBasedMDTallowed",
+	"ManagementBasedMDTallowed",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ManagementBasedMDTallowed_tags_1,
+	sizeof(asn_DEF_X2N_ManagementBasedMDTallowed_tags_1)
+		/sizeof(asn_DEF_X2N_ManagementBasedMDTallowed_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ManagementBasedMDTallowed_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ManagementBasedMDTallowed_tags_1)
+		/sizeof(asn_DEF_X2N_ManagementBasedMDTallowed_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ManagementBasedMDTallowed_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ManagementBasedMDTallowed_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ManagementBasedMDTallowed.h b/asn1c_defs/X2N_ManagementBasedMDTallowed.h
new file mode 100644
index 0000000..906835f
--- /dev/null
+++ b/asn1c_defs/X2N_ManagementBasedMDTallowed.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ManagementBasedMDTallowed_H_
+#define	_X2N_ManagementBasedMDTallowed_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ManagementBasedMDTallowed {
+	X2N_ManagementBasedMDTallowed_allowed	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ManagementBasedMDTallowed;
+
+/* X2N_ManagementBasedMDTallowed */
+typedef long	 X2N_ManagementBasedMDTallowed_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ManagementBasedMDTallowed_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ManagementBasedMDTallowed;
+extern const asn_INTEGER_specifics_t asn_SPC_ManagementBasedMDTallowed_specs_1;
+asn_struct_free_f ManagementBasedMDTallowed_free;
+asn_struct_print_f ManagementBasedMDTallowed_print;
+asn_constr_check_f ManagementBasedMDTallowed_constraint;
+ber_type_decoder_f ManagementBasedMDTallowed_decode_ber;
+der_type_encoder_f ManagementBasedMDTallowed_encode_der;
+xer_type_decoder_f ManagementBasedMDTallowed_decode_xer;
+xer_type_encoder_f ManagementBasedMDTallowed_encode_xer;
+per_type_decoder_f ManagementBasedMDTallowed_decode_uper;
+per_type_encoder_f ManagementBasedMDTallowed_encode_uper;
+per_type_decoder_f ManagementBasedMDTallowed_decode_aper;
+per_type_encoder_f ManagementBasedMDTallowed_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ManagementBasedMDTallowed_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Masked-IMEISV.c b/asn1c_defs/X2N_Masked-IMEISV.c
new file mode 100644
index 0000000..55c1a98
--- /dev/null
+++ b/asn1c_defs/X2N_Masked-IMEISV.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Masked-IMEISV.h"
+
+int
+X2N_Masked_IMEISV_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 64)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Masked_IMEISV_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  64,  64 }	/* (SIZE(64..64)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Masked_IMEISV_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Masked_IMEISV = {
+	"Masked-IMEISV",
+	"Masked-IMEISV",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_Masked_IMEISV_tags_1,
+	sizeof(asn_DEF_X2N_Masked_IMEISV_tags_1)
+		/sizeof(asn_DEF_X2N_Masked_IMEISV_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Masked_IMEISV_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Masked_IMEISV_tags_1)
+		/sizeof(asn_DEF_X2N_Masked_IMEISV_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Masked_IMEISV_constr_1, X2N_Masked_IMEISV_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Masked-IMEISV.h b/asn1c_defs/X2N_Masked-IMEISV.h
new file mode 100644
index 0000000..47290f7
--- /dev/null
+++ b/asn1c_defs/X2N_Masked-IMEISV.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Masked_IMEISV_H_
+#define	_X2N_Masked_IMEISV_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Masked-IMEISV */
+typedef BIT_STRING_t	 X2N_Masked_IMEISV_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Masked_IMEISV;
+asn_struct_free_f X2N_Masked_IMEISV_free;
+asn_struct_print_f X2N_Masked_IMEISV_print;
+asn_constr_check_f X2N_Masked_IMEISV_constraint;
+ber_type_decoder_f X2N_Masked_IMEISV_decode_ber;
+der_type_encoder_f X2N_Masked_IMEISV_encode_der;
+xer_type_decoder_f X2N_Masked_IMEISV_decode_xer;
+xer_type_encoder_f X2N_Masked_IMEISV_encode_xer;
+per_type_decoder_f X2N_Masked_IMEISV_decode_uper;
+per_type_encoder_f X2N_Masked_IMEISV_encode_uper;
+per_type_decoder_f X2N_Masked_IMEISV_decode_aper;
+per_type_encoder_f X2N_Masked_IMEISV_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Masked_IMEISV_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.c b/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.c
new file mode 100644
index 0000000..5997e7b
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeNBCoordinationAssistanceInformation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_MeNBCoordinationAssistanceInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_MeNBCoordinationAssistanceInformation_value2enum_1[] = {
+	{ 0,	25,	"coordination-not-required" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_MeNBCoordinationAssistanceInformation_enum2value_1[] = {
+	0	/* coordination-not-required(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_MeNBCoordinationAssistanceInformation_specs_1 = {
+	asn_MAP_X2N_MeNBCoordinationAssistanceInformation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_MeNBCoordinationAssistanceInformation_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeNBCoordinationAssistanceInformation = {
+	"MeNBCoordinationAssistanceInformation",
+	"MeNBCoordinationAssistanceInformation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1,
+	sizeof(asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MeNBCoordinationAssistanceInformation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_MeNBCoordinationAssistanceInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.h b/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.h
new file mode 100644
index 0000000..5c3b996
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBCoordinationAssistanceInformation.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeNBCoordinationAssistanceInformation_H_
+#define	_X2N_MeNBCoordinationAssistanceInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_MeNBCoordinationAssistanceInformation {
+	X2N_MeNBCoordinationAssistanceInformation_coordination_not_required	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_MeNBCoordinationAssistanceInformation;
+
+/* X2N_MeNBCoordinationAssistanceInformation */
+typedef long	 X2N_MeNBCoordinationAssistanceInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeNBCoordinationAssistanceInformation;
+asn_struct_free_f X2N_MeNBCoordinationAssistanceInformation_free;
+asn_struct_print_f X2N_MeNBCoordinationAssistanceInformation_print;
+asn_constr_check_f X2N_MeNBCoordinationAssistanceInformation_constraint;
+ber_type_decoder_f X2N_MeNBCoordinationAssistanceInformation_decode_ber;
+der_type_encoder_f X2N_MeNBCoordinationAssistanceInformation_encode_der;
+xer_type_decoder_f X2N_MeNBCoordinationAssistanceInformation_decode_xer;
+xer_type_encoder_f X2N_MeNBCoordinationAssistanceInformation_encode_xer;
+per_type_decoder_f X2N_MeNBCoordinationAssistanceInformation_decode_uper;
+per_type_encoder_f X2N_MeNBCoordinationAssistanceInformation_encode_uper;
+per_type_decoder_f X2N_MeNBCoordinationAssistanceInformation_decode_aper;
+per_type_encoder_f X2N_MeNBCoordinationAssistanceInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeNBCoordinationAssistanceInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeNBResourceCoordinationInformation.c b/asn1c_defs/X2N_MeNBResourceCoordinationInformation.c
new file mode 100644
index 0000000..3665b38
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBResourceCoordinationInformation.c
@@ -0,0 +1,155 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeNBResourceCoordinationInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_uLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 4400)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_dLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 4400)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_uLCoordinationInformation_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  13,  13,  6,  4400 }	/* (SIZE(6..4400,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_dLCoordinationInformation_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  13,  13,  6,  4400 }	/* (SIZE(6..4400,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MeNBResourceCoordinationInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformation, eUTRA_Cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-Cell-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformation, uLCoordinationInformation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_uLCoordinationInformation_constr_3,  memb_X2N_uLCoordinationInformation_constraint_1 },
+		0, 0, /* No default value */
+		"uLCoordinationInformation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_MeNBResourceCoordinationInformation, dLCoordinationInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_dLCoordinationInformation_constr_4,  memb_X2N_dLCoordinationInformation_constraint_1 },
+		0, 0, /* No default value */
+		"dLCoordinationInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_MeNBResourceCoordinationInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P167,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_MeNBResourceCoordinationInformation_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeNBResourceCoordinationInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eUTRA-Cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dLCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MeNBResourceCoordinationInformation_specs_1 = {
+	sizeof(struct X2N_MeNBResourceCoordinationInformation),
+	offsetof(struct X2N_MeNBResourceCoordinationInformation, _asn_ctx),
+	asn_MAP_X2N_MeNBResourceCoordinationInformation_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_MeNBResourceCoordinationInformation_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeNBResourceCoordinationInformation = {
+	"MeNBResourceCoordinationInformation",
+	"MeNBResourceCoordinationInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1,
+	sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeNBResourceCoordinationInformation_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_MeNBResourceCoordinationInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeNBResourceCoordinationInformation.h b/asn1c_defs/X2N_MeNBResourceCoordinationInformation.h
new file mode 100644
index 0000000..780931b
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBResourceCoordinationInformation.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeNBResourceCoordinationInformation_H_
+#define	_X2N_MeNBResourceCoordinationInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_MeNBResourceCoordinationInformation */
+typedef struct X2N_MeNBResourceCoordinationInformation {
+	X2N_ECGI_t	 eUTRA_Cell_ID;
+	BIT_STRING_t	 uLCoordinationInformation;
+	BIT_STRING_t	*dLCoordinationInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeNBResourceCoordinationInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeNBResourceCoordinationInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeNBResourceCoordinationInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeNBtoSeNBContainer.c b/asn1c_defs/X2N_MeNBtoSeNBContainer.c
new file mode 100644
index 0000000..5a54d78
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBtoSeNBContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeNBtoSeNBContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_MeNBtoSeNBContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeNBtoSeNBContainer = {
+	"MeNBtoSeNBContainer",
+	"MeNBtoSeNBContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_MeNBtoSeNBContainer_tags_1,
+	sizeof(asn_DEF_X2N_MeNBtoSeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBtoSeNBContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeNBtoSeNBContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeNBtoSeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBtoSeNBContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeNBtoSeNBContainer.h b/asn1c_defs/X2N_MeNBtoSeNBContainer.h
new file mode 100644
index 0000000..d61994c
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBtoSeNBContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeNBtoSeNBContainer_H_
+#define	_X2N_MeNBtoSeNBContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MeNBtoSeNBContainer */
+typedef OCTET_STRING_t	 X2N_MeNBtoSeNBContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeNBtoSeNBContainer;
+asn_struct_free_f X2N_MeNBtoSeNBContainer_free;
+asn_struct_print_f X2N_MeNBtoSeNBContainer_print;
+asn_constr_check_f X2N_MeNBtoSeNBContainer_constraint;
+ber_type_decoder_f X2N_MeNBtoSeNBContainer_decode_ber;
+der_type_encoder_f X2N_MeNBtoSeNBContainer_encode_der;
+xer_type_decoder_f X2N_MeNBtoSeNBContainer_decode_xer;
+xer_type_encoder_f X2N_MeNBtoSeNBContainer_encode_xer;
+per_type_decoder_f X2N_MeNBtoSeNBContainer_decode_uper;
+per_type_encoder_f X2N_MeNBtoSeNBContainer_encode_uper;
+per_type_decoder_f X2N_MeNBtoSeNBContainer_decode_aper;
+per_type_encoder_f X2N_MeNBtoSeNBContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeNBtoSeNBContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeNBtoSgNBContainer.c b/asn1c_defs/X2N_MeNBtoSgNBContainer.c
new file mode 100644
index 0000000..bb234b4
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBtoSgNBContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeNBtoSgNBContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_MeNBtoSgNBContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeNBtoSgNBContainer = {
+	"MeNBtoSgNBContainer",
+	"MeNBtoSgNBContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_MeNBtoSgNBContainer_tags_1,
+	sizeof(asn_DEF_X2N_MeNBtoSgNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBtoSgNBContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeNBtoSgNBContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeNBtoSgNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_MeNBtoSgNBContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeNBtoSgNBContainer.h b/asn1c_defs/X2N_MeNBtoSgNBContainer.h
new file mode 100644
index 0000000..9885c75
--- /dev/null
+++ b/asn1c_defs/X2N_MeNBtoSgNBContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeNBtoSgNBContainer_H_
+#define	_X2N_MeNBtoSgNBContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MeNBtoSgNBContainer */
+typedef OCTET_STRING_t	 X2N_MeNBtoSgNBContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeNBtoSgNBContainer;
+asn_struct_free_f X2N_MeNBtoSgNBContainer_free;
+asn_struct_print_f X2N_MeNBtoSgNBContainer_print;
+asn_constr_check_f X2N_MeNBtoSgNBContainer_constraint;
+ber_type_decoder_f X2N_MeNBtoSgNBContainer_decode_ber;
+der_type_encoder_f X2N_MeNBtoSgNBContainer_encode_der;
+xer_type_decoder_f X2N_MeNBtoSgNBContainer_decode_xer;
+xer_type_encoder_f X2N_MeNBtoSgNBContainer_encode_xer;
+per_type_decoder_f X2N_MeNBtoSgNBContainer_decode_uper;
+per_type_encoder_f X2N_MeNBtoSgNBContainer_encode_uper;
+per_type_decoder_f X2N_MeNBtoSgNBContainer_decode_aper;
+per_type_encoder_f X2N_MeNBtoSgNBContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeNBtoSgNBContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Measurement-ID.c b/asn1c_defs/X2N_Measurement-ID.c
new file mode 100644
index 0000000..d4e0d26
--- /dev/null
+++ b/asn1c_defs/X2N_Measurement-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Measurement-ID.h"
+
+int
+X2N_Measurement_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Measurement_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  12,  12,  1,  4095 }	/* (1..4095,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Measurement_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Measurement_ID = {
+	"Measurement-ID",
+	"Measurement-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Measurement_ID_tags_1,
+	sizeof(asn_DEF_X2N_Measurement_ID_tags_1)
+		/sizeof(asn_DEF_X2N_Measurement_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Measurement_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Measurement_ID_tags_1)
+		/sizeof(asn_DEF_X2N_Measurement_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Measurement_ID_constr_1, X2N_Measurement_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Measurement-ID.h b/asn1c_defs/X2N_Measurement-ID.h
new file mode 100644
index 0000000..a476151
--- /dev/null
+++ b/asn1c_defs/X2N_Measurement-ID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Measurement_ID_H_
+#define	_X2N_Measurement_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Measurement-ID */
+typedef long	 X2N_Measurement_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Measurement_ID;
+asn_struct_free_f X2N_Measurement_ID_free;
+asn_struct_print_f X2N_Measurement_ID_print;
+asn_constr_check_f X2N_Measurement_ID_constraint;
+ber_type_decoder_f X2N_Measurement_ID_decode_ber;
+der_type_encoder_f X2N_Measurement_ID_encode_der;
+xer_type_decoder_f X2N_Measurement_ID_decode_xer;
+xer_type_encoder_f X2N_Measurement_ID_encode_xer;
+per_type_decoder_f X2N_Measurement_ID_decode_uper;
+per_type_encoder_f X2N_Measurement_ID_encode_uper;
+per_type_decoder_f X2N_Measurement_ID_decode_aper;
+per_type_encoder_f X2N_Measurement_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Measurement_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementFailureCause-Item.c b/asn1c_defs/X2N_MeasurementFailureCause-Item.c
new file mode 100644
index 0000000..fd4d00e
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementFailureCause-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementFailureCause-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_Item, measurementFailedReportCharacteristics),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ReportCharacteristics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementFailedReportCharacteristics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_MeasurementFailureCause_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P11,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_MeasurementFailureCause_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementFailureCause_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementFailureCause_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measurementFailedReportCharacteristics */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementFailureCause_Item_specs_1 = {
+	sizeof(struct X2N_MeasurementFailureCause_Item),
+	offsetof(struct X2N_MeasurementFailureCause_Item, _asn_ctx),
+	asn_MAP_X2N_MeasurementFailureCause_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_MeasurementFailureCause_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_Item = {
+	"MeasurementFailureCause-Item",
+	"MeasurementFailureCause-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementFailureCause_Item_tags_1,
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeasurementFailureCause_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementFailureCause_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementFailureCause_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementFailureCause-Item.h b/asn1c_defs/X2N_MeasurementFailureCause-Item.h
new file mode 100644
index 0000000..bafd98b
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementFailureCause-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementFailureCause_Item_H_
+#define	_X2N_MeasurementFailureCause_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ReportCharacteristics.h"
+#include "X2N_Cause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_MeasurementFailureCause-Item */
+typedef struct X2N_MeasurementFailureCause_Item {
+	X2N_ReportCharacteristics_t	 measurementFailedReportCharacteristics;
+	X2N_Cause_t	 cause;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementFailureCause_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementFailureCause_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementFailureCause-List.c b/asn1c_defs/X2N_MeasurementFailureCause-List.c
new file mode 100644
index 0000000..2f1963d
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementFailureCause-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementFailureCause-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+asn_per_constraints_t asn_PER_type_X2N_MeasurementFailureCause_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P6,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementFailureCause_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_MeasurementFailureCause_List_specs_1 = {
+	sizeof(struct X2N_MeasurementFailureCause_List),
+	offsetof(struct X2N_MeasurementFailureCause_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_List = {
+	"MeasurementFailureCause-List",
+	"MeasurementFailureCause-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MeasurementFailureCause_List_tags_1,
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_List_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeasurementFailureCause_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_List_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MeasurementFailureCause_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MeasurementFailureCause_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MeasurementFailureCause_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementFailureCause-List.h b/asn1c_defs/X2N_MeasurementFailureCause-List.h
new file mode 100644
index 0000000..7ca72a0
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementFailureCause-List.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementFailureCause_List_H_
+#define	_X2N_MeasurementFailureCause_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_MeasurementFailureCause-List */
+typedef struct X2N_MeasurementFailureCause_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementFailureCause_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_List;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_MeasurementFailureCause_List_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_List_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_MeasurementFailureCause_List_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementFailureCause_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementInitiationResult-Item.c b/asn1c_defs/X2N_MeasurementInitiationResult-Item.c
new file mode 100644
index 0000000..51923be
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementInitiationResult-Item.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementInitiationResult-Item.h"
+
+#include "X2N_MeasurementFailureCause-List.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_Item, cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cell-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_MeasurementInitiationResult_Item, measurementFailureCause_List),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeasurementFailureCause_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementFailureCause-List"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_MeasurementInitiationResult_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_MeasurementInitiationResult_Item_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementInitiationResult_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measurementFailureCause-List */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementInitiationResult_Item_specs_1 = {
+	sizeof(struct X2N_MeasurementInitiationResult_Item),
+	offsetof(struct X2N_MeasurementInitiationResult_Item, _asn_ctx),
+	asn_MAP_X2N_MeasurementInitiationResult_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_MeasurementInitiationResult_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_Item = {
+	"MeasurementInitiationResult-Item",
+	"MeasurementInitiationResult-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1,
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementInitiationResult_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementInitiationResult_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementInitiationResult-Item.h b/asn1c_defs/X2N_MeasurementInitiationResult-Item.h
new file mode 100644
index 0000000..a77644c
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementInitiationResult-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementInitiationResult_Item_H_
+#define	_X2N_MeasurementInitiationResult_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_MeasurementFailureCause_List;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_MeasurementInitiationResult-Item */
+typedef struct X2N_MeasurementInitiationResult_Item {
+	X2N_ECGI_t	 cell_ID;
+	struct X2N_MeasurementFailureCause_List	*measurementFailureCause_List;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementInitiationResult_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementInitiationResult_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementInitiationResult-List.c b/asn1c_defs/X2N_MeasurementInitiationResult-List.c
new file mode 100644
index 0000000..49e6ac3
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementInitiationResult-List.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementInitiationResult-List.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_MeasurementInitiationResult_List_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_List_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementInitiationResult_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_MeasurementInitiationResult_List_specs_1 = {
+	sizeof(struct X2N_MeasurementInitiationResult_List),
+	offsetof(struct X2N_MeasurementInitiationResult_List, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_List = {
+	"MeasurementInitiationResult-List",
+	"MeasurementInitiationResult-List",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MeasurementInitiationResult_List_tags_1,
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_List_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_List_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeasurementInitiationResult_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_List_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_List_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MeasurementInitiationResult_List_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MeasurementInitiationResult_List_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MeasurementInitiationResult_List_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementInitiationResult-List.h b/asn1c_defs/X2N_MeasurementInitiationResult-List.h
new file mode 100644
index 0000000..5c05147
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementInitiationResult-List.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementInitiationResult_List_H_
+#define	_X2N_MeasurementInitiationResult_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_MeasurementInitiationResult-List */
+typedef struct X2N_MeasurementInitiationResult_List {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementInitiationResult_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementInitiationResult_List_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementThresholdA2.c b/asn1c_defs/X2N_MeasurementThresholdA2.c
new file mode 100644
index 0000000..3d59757
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementThresholdA2.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementThresholdA2.h"
+
+asn_per_constraints_t asn_PER_type_X2N_MeasurementThresholdA2_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_MeasurementThresholdA2_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementThresholdA2, choice.threshold_RSRP),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Threshold_RSRP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"threshold-RSRP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementThresholdA2, choice.threshold_RSRQ),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Threshold_RSRQ,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"threshold-RSRQ"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementThresholdA2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* threshold-RSRP */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* threshold-RSRQ */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_MeasurementThresholdA2_specs_1 = {
+	sizeof(struct X2N_MeasurementThresholdA2),
+	offsetof(struct X2N_MeasurementThresholdA2, _asn_ctx),
+	offsetof(struct X2N_MeasurementThresholdA2, present),
+	sizeof(((struct X2N_MeasurementThresholdA2 *)0)->present),
+	asn_MAP_X2N_MeasurementThresholdA2_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementThresholdA2 = {
+	"MeasurementThresholdA2",
+	"MeasurementThresholdA2",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_MeasurementThresholdA2_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_MeasurementThresholdA2_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_MeasurementThresholdA2_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementThresholdA2.h b/asn1c_defs/X2N_MeasurementThresholdA2.h
new file mode 100644
index 0000000..55e0fcc
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementThresholdA2.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementThresholdA2_H_
+#define	_X2N_MeasurementThresholdA2_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Threshold-RSRP.h"
+#include "X2N_Threshold-RSRQ.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_MeasurementThresholdA2_PR {
+	X2N_MeasurementThresholdA2_PR_NOTHING,	/* No components present */
+	X2N_MeasurementThresholdA2_PR_threshold_RSRP,
+	X2N_MeasurementThresholdA2_PR_threshold_RSRQ
+	/* Extensions may appear below */
+	
+} X2N_MeasurementThresholdA2_PR;
+
+/* X2N_MeasurementThresholdA2 */
+typedef struct X2N_MeasurementThresholdA2 {
+	X2N_MeasurementThresholdA2_PR present;
+	union X2N_MeasurementThresholdA2_u {
+		X2N_Threshold_RSRP_t	 threshold_RSRP;
+		X2N_Threshold_RSRQ_t	 threshold_RSRQ;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementThresholdA2_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementThresholdA2;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_MeasurementThresholdA2_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementThresholdA2_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_MeasurementThresholdA2_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementThresholdA2_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MeasurementsToActivate.c b/asn1c_defs/X2N_MeasurementsToActivate.c
new file mode 100644
index 0000000..1961f08
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementsToActivate.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MeasurementsToActivate.h"
+
+int
+X2N_MeasurementsToActivate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_MeasurementsToActivate_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  8,  8 }	/* (SIZE(8..8)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementsToActivate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementsToActivate = {
+	"MeasurementsToActivate",
+	"MeasurementsToActivate",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_MeasurementsToActivate_tags_1,
+	sizeof(asn_DEF_X2N_MeasurementsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementsToActivate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MeasurementsToActivate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_MeasurementsToActivate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MeasurementsToActivate_constr_1, X2N_MeasurementsToActivate_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MeasurementsToActivate.h b/asn1c_defs/X2N_MeasurementsToActivate.h
new file mode 100644
index 0000000..2fdadb7
--- /dev/null
+++ b/asn1c_defs/X2N_MeasurementsToActivate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MeasurementsToActivate_H_
+#define	_X2N_MeasurementsToActivate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MeasurementsToActivate */
+typedef BIT_STRING_t	 X2N_MeasurementsToActivate_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_MeasurementsToActivate_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementsToActivate;
+asn_struct_free_f X2N_MeasurementsToActivate_free;
+asn_struct_print_f X2N_MeasurementsToActivate_print;
+asn_constr_check_f X2N_MeasurementsToActivate_constraint;
+ber_type_decoder_f X2N_MeasurementsToActivate_decode_ber;
+der_type_encoder_f X2N_MeasurementsToActivate_encode_der;
+xer_type_decoder_f X2N_MeasurementsToActivate_decode_xer;
+xer_type_encoder_f X2N_MeasurementsToActivate_encode_xer;
+per_type_decoder_f X2N_MeasurementsToActivate_decode_uper;
+per_type_encoder_f X2N_MeasurementsToActivate_encode_uper;
+per_type_decoder_f X2N_MeasurementsToActivate_decode_aper;
+per_type_encoder_f X2N_MeasurementsToActivate_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MeasurementsToActivate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityChangeAcknowledge.c b/asn1c_defs/X2N_MobilityChangeAcknowledge.c
new file mode 100644
index 0000000..892bcf5
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityChangeAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P22,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeAcknowledge_specs_1 = {
+	sizeof(struct X2N_MobilityChangeAcknowledge),
+	offsetof(struct X2N_MobilityChangeAcknowledge, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeAcknowledge = {
+	"MobilityChangeAcknowledge",
+	"MobilityChangeAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityChangeAcknowledge.h b/asn1c_defs/X2N_MobilityChangeAcknowledge.h
new file mode 100644
index 0000000..72405c0
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityChangeAcknowledge_H_
+#define	_X2N_MobilityChangeAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityChangeAcknowledge */
+typedef struct X2N_MobilityChangeAcknowledge {
+	X2N_ProtocolIE_Container_8180P22_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityChangeAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityChangeFailure.c b/asn1c_defs/X2N_MobilityChangeFailure.c
new file mode 100644
index 0000000..8b66df4
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityChangeFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P23,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeFailure_specs_1 = {
+	sizeof(struct X2N_MobilityChangeFailure),
+	offsetof(struct X2N_MobilityChangeFailure, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeFailure = {
+	"MobilityChangeFailure",
+	"MobilityChangeFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeFailure_tags_1,
+	sizeof(asn_DEF_X2N_MobilityChangeFailure_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeFailure_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityChangeFailure.h b/asn1c_defs/X2N_MobilityChangeFailure.h
new file mode 100644
index 0000000..f09e185
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityChangeFailure_H_
+#define	_X2N_MobilityChangeFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityChangeFailure */
+typedef struct X2N_MobilityChangeFailure {
+	X2N_ProtocolIE_Container_8180P23_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityChangeFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityChangeRequest.c b/asn1c_defs/X2N_MobilityChangeRequest.c
new file mode 100644
index 0000000..0982585
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityChangeRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P21,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeRequest_specs_1 = {
+	sizeof(struct X2N_MobilityChangeRequest),
+	offsetof(struct X2N_MobilityChangeRequest, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeRequest = {
+	"MobilityChangeRequest",
+	"MobilityChangeRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeRequest_tags_1,
+	sizeof(asn_DEF_X2N_MobilityChangeRequest_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeRequest_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityChangeRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityChangeRequest.h b/asn1c_defs/X2N_MobilityChangeRequest.h
new file mode 100644
index 0000000..8b43453
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityChangeRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityChangeRequest_H_
+#define	_X2N_MobilityChangeRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityChangeRequest */
+typedef struct X2N_MobilityChangeRequest {
+	X2N_ProtocolIE_Container_8180P21_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityChangeRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityInformation.c b/asn1c_defs/X2N_MobilityInformation.c
new file mode 100644
index 0000000..d09ea6f
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityInformation.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityInformation.h"
+
+int
+X2N_MobilityInformation_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_MobilityInformation_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  32,  32 }	/* (SIZE(32..32)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityInformation = {
+	"MobilityInformation",
+	"MobilityInformation",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_MobilityInformation_tags_1,
+	sizeof(asn_DEF_X2N_MobilityInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MobilityInformation_constr_1, X2N_MobilityInformation_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityInformation.h b/asn1c_defs/X2N_MobilityInformation.h
new file mode 100644
index 0000000..d504b6a
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityInformation.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityInformation_H_
+#define	_X2N_MobilityInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityInformation */
+typedef BIT_STRING_t	 X2N_MobilityInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityInformation;
+asn_struct_free_f X2N_MobilityInformation_free;
+asn_struct_print_f X2N_MobilityInformation_print;
+asn_constr_check_f X2N_MobilityInformation_constraint;
+ber_type_decoder_f X2N_MobilityInformation_decode_ber;
+der_type_encoder_f X2N_MobilityInformation_encode_der;
+xer_type_decoder_f X2N_MobilityInformation_decode_xer;
+xer_type_encoder_f X2N_MobilityInformation_encode_xer;
+per_type_decoder_f X2N_MobilityInformation_decode_uper;
+per_type_encoder_f X2N_MobilityInformation_encode_uper;
+per_type_decoder_f X2N_MobilityInformation_decode_aper;
+per_type_encoder_f X2N_MobilityInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityParametersInformation.c b/asn1c_defs/X2N_MobilityParametersInformation.c
new file mode 100644
index 0000000..2122e91
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityParametersInformation.c
@@ -0,0 +1,80 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityParametersInformation.h"
+
+static int
+memb_X2N_handoverTriggerChange_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= -20 && value <= 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_handoverTriggerChange_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6, -20,  20 }	/* (-20..20) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MobilityParametersInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityParametersInformation, handoverTriggerChange),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_handoverTriggerChange_constr_2,  memb_X2N_handoverTriggerChange_constraint_1 },
+		0, 0, /* No default value */
+		"handoverTriggerChange"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityParametersInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityParametersInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* handoverTriggerChange */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityParametersInformation_specs_1 = {
+	sizeof(struct X2N_MobilityParametersInformation),
+	offsetof(struct X2N_MobilityParametersInformation, _asn_ctx),
+	asn_MAP_X2N_MobilityParametersInformation_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityParametersInformation = {
+	"MobilityParametersInformation",
+	"MobilityParametersInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityParametersInformation_tags_1,
+	sizeof(asn_DEF_X2N_MobilityParametersInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityParametersInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityParametersInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityParametersInformation_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityParametersInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityParametersInformation_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_MobilityParametersInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityParametersInformation.h b/asn1c_defs/X2N_MobilityParametersInformation.h
new file mode 100644
index 0000000..30bbab1
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityParametersInformation.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityParametersInformation_H_
+#define	_X2N_MobilityParametersInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityParametersInformation */
+typedef struct X2N_MobilityParametersInformation {
+	long	 handoverTriggerChange;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityParametersInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityParametersInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityParametersInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MobilityParametersModificationRange.c b/asn1c_defs/X2N_MobilityParametersModificationRange.c
new file mode 100644
index 0000000..a6a2620
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityParametersModificationRange.c
@@ -0,0 +1,120 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MobilityParametersModificationRange.h"
+
+static int
+memb_X2N_handoverTriggerChangeLowerLimit_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= -20 && value <= 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_handoverTriggerChangeUpperLimit_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= -20 && value <= 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_handoverTriggerChangeLowerLimit_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6, -20,  20 }	/* (-20..20) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_handoverTriggerChangeUpperLimit_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6, -20,  20 }	/* (-20..20) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MobilityParametersModificationRange_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityParametersModificationRange, handoverTriggerChangeLowerLimit),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_handoverTriggerChangeLowerLimit_constr_2,  memb_X2N_handoverTriggerChangeLowerLimit_constraint_1 },
+		0, 0, /* No default value */
+		"handoverTriggerChangeLowerLimit"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityParametersModificationRange, handoverTriggerChangeUpperLimit),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_handoverTriggerChangeUpperLimit_constr_3,  memb_X2N_handoverTriggerChangeUpperLimit_constraint_1 },
+		0, 0, /* No default value */
+		"handoverTriggerChangeUpperLimit"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityParametersModificationRange_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityParametersModificationRange_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverTriggerChangeLowerLimit */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* handoverTriggerChangeUpperLimit */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityParametersModificationRange_specs_1 = {
+	sizeof(struct X2N_MobilityParametersModificationRange),
+	offsetof(struct X2N_MobilityParametersModificationRange, _asn_ctx),
+	asn_MAP_X2N_MobilityParametersModificationRange_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityParametersModificationRange = {
+	"MobilityParametersModificationRange",
+	"MobilityParametersModificationRange",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityParametersModificationRange_tags_1,
+	sizeof(asn_DEF_X2N_MobilityParametersModificationRange_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityParametersModificationRange_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MobilityParametersModificationRange_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityParametersModificationRange_tags_1)
+		/sizeof(asn_DEF_X2N_MobilityParametersModificationRange_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityParametersModificationRange_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_MobilityParametersModificationRange_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MobilityParametersModificationRange.h b/asn1c_defs/X2N_MobilityParametersModificationRange.h
new file mode 100644
index 0000000..54af818
--- /dev/null
+++ b/asn1c_defs/X2N_MobilityParametersModificationRange.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MobilityParametersModificationRange_H_
+#define	_X2N_MobilityParametersModificationRange_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_MobilityParametersModificationRange */
+typedef struct X2N_MobilityParametersModificationRange {
+	long	 handoverTriggerChangeLowerLimit;
+	long	 handoverTriggerChangeUpperLimit;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityParametersModificationRange_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityParametersModificationRange;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MobilityParametersModificationRange_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_MultibandInfoList.c b/asn1c_defs/X2N_MultibandInfoList.c
new file mode 100644
index 0000000..5d612a2
--- /dev/null
+++ b/asn1c_defs/X2N_MultibandInfoList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_MultibandInfoList.h"
+
+#include "X2N_BandInfo.h"
+static asn_per_constraints_t asn_PER_type_X2N_MultibandInfoList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_MultibandInfoList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_BandInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MultibandInfoList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_MultibandInfoList_specs_1 = {
+	sizeof(struct X2N_MultibandInfoList),
+	offsetof(struct X2N_MultibandInfoList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MultibandInfoList = {
+	"MultibandInfoList",
+	"MultibandInfoList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_MultibandInfoList_tags_1,
+	sizeof(asn_DEF_X2N_MultibandInfoList_tags_1)
+		/sizeof(asn_DEF_X2N_MultibandInfoList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_MultibandInfoList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_MultibandInfoList_tags_1)
+		/sizeof(asn_DEF_X2N_MultibandInfoList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_MultibandInfoList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_MultibandInfoList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_MultibandInfoList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_MultibandInfoList.h b/asn1c_defs/X2N_MultibandInfoList.h
new file mode 100644
index 0000000..ce50281
--- /dev/null
+++ b/asn1c_defs/X2N_MultibandInfoList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_MultibandInfoList_H_
+#define	_X2N_MultibandInfoList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_BandInfo;
+
+/* X2N_MultibandInfoList */
+typedef struct X2N_MultibandInfoList {
+	A_SEQUENCE_OF(struct X2N_BandInfo) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MultibandInfoList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MultibandInfoList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_MultibandInfoList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NR-TxBW.c b/asn1c_defs/X2N_NR-TxBW.c
new file mode 100644
index 0000000..f403df2
--- /dev/null
+++ b/asn1c_defs/X2N_NR-TxBW.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NR-TxBW.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_NR_TxBW_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NR_TxBW, nRSCS),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRSCS,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRSCS"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NR_TxBW, nRNRB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRNRB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRNRB"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NR_TxBW, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P175,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_NR_TxBW_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_NR_TxBW_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NR_TxBW_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRSCS */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRNRB */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NR_TxBW_specs_1 = {
+	sizeof(struct X2N_NR_TxBW),
+	offsetof(struct X2N_NR_TxBW, _asn_ctx),
+	asn_MAP_X2N_NR_TxBW_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_NR_TxBW_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NR_TxBW = {
+	"NR-TxBW",
+	"NR-TxBW",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NR_TxBW_tags_1,
+	sizeof(asn_DEF_X2N_NR_TxBW_tags_1)
+		/sizeof(asn_DEF_X2N_NR_TxBW_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NR_TxBW_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NR_TxBW_tags_1)
+		/sizeof(asn_DEF_X2N_NR_TxBW_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NR_TxBW_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NR_TxBW_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NR-TxBW.h b/asn1c_defs/X2N_NR-TxBW.h
new file mode 100644
index 0000000..987b4f9
--- /dev/null
+++ b/asn1c_defs/X2N_NR-TxBW.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NR_TxBW_H_
+#define	_X2N_NR_TxBW_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRSCS.h"
+#include "X2N_NRNRB.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_NR-TxBW */
+typedef struct X2N_NR_TxBW {
+	X2N_NRSCS_t	 nRSCS;
+	X2N_NRNRB_t	 nRNRB;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NR_TxBW_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NR_TxBW;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NR_TxBW_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_NR_TxBW_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NR_TxBW_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRCGI.c b/asn1c_defs/X2N_NRCGI.c
new file mode 100644
index 0000000..c4bc4fb
--- /dev/null
+++ b/asn1c_defs/X2N_NRCGI.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRCGI.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_NRCGI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRCGI, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRCGI, nRcellIdentifier),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCellIdentifier,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRcellIdentifier"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NRCGI, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P174,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_NRCGI_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_NRCGI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRCGI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRcellIdentifier */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRCGI_specs_1 = {
+	sizeof(struct X2N_NRCGI),
+	offsetof(struct X2N_NRCGI, _asn_ctx),
+	asn_MAP_X2N_NRCGI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_NRCGI_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRCGI = {
+	"NRCGI",
+	"NRCGI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRCGI_tags_1,
+	sizeof(asn_DEF_X2N_NRCGI_tags_1)
+		/sizeof(asn_DEF_X2N_NRCGI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRCGI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRCGI_tags_1)
+		/sizeof(asn_DEF_X2N_NRCGI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRCGI_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRCGI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRCGI.h b/asn1c_defs/X2N_NRCGI.h
new file mode 100644
index 0000000..34e2611
--- /dev/null
+++ b/asn1c_defs/X2N_NRCGI.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRCGI_H_
+#define	_X2N_NRCGI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include "X2N_NRCellIdentifier.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_NRCGI */
+typedef struct X2N_NRCGI {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	X2N_NRCellIdentifier_t	 nRcellIdentifier;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRCGI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRCGI;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRCGI_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_NRCGI_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRCGI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRCellIdentifier.c b/asn1c_defs/X2N_NRCellIdentifier.c
new file mode 100644
index 0000000..c136b11
--- /dev/null
+++ b/asn1c_defs/X2N_NRCellIdentifier.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRCellIdentifier.h"
+
+int
+X2N_NRCellIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 36)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRCellIdentifier_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  36,  36 }	/* (SIZE(36..36)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRCellIdentifier_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRCellIdentifier = {
+	"NRCellIdentifier",
+	"NRCellIdentifier",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_NRCellIdentifier_tags_1,
+	sizeof(asn_DEF_X2N_NRCellIdentifier_tags_1)
+		/sizeof(asn_DEF_X2N_NRCellIdentifier_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRCellIdentifier_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRCellIdentifier_tags_1)
+		/sizeof(asn_DEF_X2N_NRCellIdentifier_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRCellIdentifier_constr_1, X2N_NRCellIdentifier_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRCellIdentifier.h b/asn1c_defs/X2N_NRCellIdentifier.h
new file mode 100644
index 0000000..e387014
--- /dev/null
+++ b/asn1c_defs/X2N_NRCellIdentifier.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRCellIdentifier_H_
+#define	_X2N_NRCellIdentifier_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_NRCellIdentifier */
+typedef BIT_STRING_t	 X2N_NRCellIdentifier_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRCellIdentifier_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRCellIdentifier;
+asn_struct_free_f X2N_NRCellIdentifier_free;
+asn_struct_print_f X2N_NRCellIdentifier_print;
+asn_constr_check_f X2N_NRCellIdentifier_constraint;
+ber_type_decoder_f X2N_NRCellIdentifier_decode_ber;
+der_type_encoder_f X2N_NRCellIdentifier_encode_der;
+xer_type_decoder_f X2N_NRCellIdentifier_decode_xer;
+xer_type_encoder_f X2N_NRCellIdentifier_encode_xer;
+per_type_decoder_f X2N_NRCellIdentifier_decode_uper;
+per_type_encoder_f X2N_NRCellIdentifier_encode_uper;
+per_type_decoder_f X2N_NRCellIdentifier_decode_aper;
+per_type_encoder_f X2N_NRCellIdentifier_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRCellIdentifier_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRFreqInfo.c b/asn1c_defs/X2N_NRFreqInfo.c
new file mode 100644
index 0000000..48be100
--- /dev/null
+++ b/asn1c_defs/X2N_NRFreqInfo.c
@@ -0,0 +1,188 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRFreqInfo.h"
+
+#include "X2N_SULInformation.h"
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_FreqBandNrItem.h"
+static int
+memb_X2N_nRARFCN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3279165)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_freqBandListNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size >= 1 && size <= 32)) {
+		/* Perform validation of the inner elements */
+		return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_freqBandListNr_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_nRARFCN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 22, -1,  0,  3279165 }	/* (0..3279165) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_freqBandListNr_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_freqBandListNr_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_FreqBandNrItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_freqBandListNr_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_freqBandListNr_specs_3 = {
+	sizeof(struct X2N_NRFreqInfo__freqBandListNr),
+	offsetof(struct X2N_NRFreqInfo__freqBandListNr, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_freqBandListNr_3 = {
+	"freqBandListNr",
+	"freqBandListNr",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_freqBandListNr_tags_3,
+	sizeof(asn_DEF_X2N_freqBandListNr_tags_3)
+		/sizeof(asn_DEF_X2N_freqBandListNr_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_freqBandListNr_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_freqBandListNr_tags_3)
+		/sizeof(asn_DEF_X2N_freqBandListNr_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_freqBandListNr_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_freqBandListNr_3,
+	1,	/* Single element */
+	&asn_SPC_X2N_freqBandListNr_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRFreqInfo_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRFreqInfo, nRARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_nRARFCN_constr_2,  memb_X2N_nRARFCN_constraint_1 },
+		0, 0, /* No default value */
+		"nRARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRFreqInfo, freqBandListNr),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		0,
+		&asn_DEF_X2N_freqBandListNr_3,
+		0,
+		{ 0, &asn_PER_memb_X2N_freqBandListNr_constr_3,  memb_X2N_freqBandListNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandListNr"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_NRFreqInfo, sULInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SULInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sULInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NRFreqInfo, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P173,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_NRFreqInfo_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_NRFreqInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRFreqInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* freqBandListNr */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sULInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRFreqInfo_specs_1 = {
+	sizeof(struct X2N_NRFreqInfo),
+	offsetof(struct X2N_NRFreqInfo, _asn_ctx),
+	asn_MAP_X2N_NRFreqInfo_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_NRFreqInfo_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRFreqInfo = {
+	"NRFreqInfo",
+	"NRFreqInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRFreqInfo_tags_1,
+	sizeof(asn_DEF_X2N_NRFreqInfo_tags_1)
+		/sizeof(asn_DEF_X2N_NRFreqInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRFreqInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRFreqInfo_tags_1)
+		/sizeof(asn_DEF_X2N_NRFreqInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRFreqInfo_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_NRFreqInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRFreqInfo.h b/asn1c_defs/X2N_NRFreqInfo.h
new file mode 100644
index 0000000..1fbe13f
--- /dev/null
+++ b/asn1c_defs/X2N_NRFreqInfo.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRFreqInfo_H_
+#define	_X2N_NRFreqInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_SULInformation;
+struct X2N_ProtocolExtensionContainer;
+struct X2N_FreqBandNrItem;
+
+/* X2N_NRFreqInfo */
+typedef struct X2N_NRFreqInfo {
+	long	 nRARFCN;
+	struct X2N_NRFreqInfo__freqBandListNr {
+		A_SEQUENCE_OF(struct X2N_FreqBandNrItem) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} freqBandListNr;
+	struct X2N_SULInformation	*sULInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRFreqInfo_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRFreqInfo;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRFreqInfo_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_NRFreqInfo_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRFreqInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRNRB.c b/asn1c_defs/X2N_NRNRB.c
new file mode 100644
index 0000000..ed86342
--- /dev/null
+++ b/asn1c_defs/X2N_NRNRB.c
@@ -0,0 +1,109 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRNRB.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRNRB_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  28 }	/* (0..28,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NRNRB_value2enum_1[] = {
+	{ 0,	5,	"nrb11" },
+	{ 1,	5,	"nrb18" },
+	{ 2,	5,	"nrb24" },
+	{ 3,	5,	"nrb25" },
+	{ 4,	5,	"nrb31" },
+	{ 5,	5,	"nrb32" },
+	{ 6,	5,	"nrb38" },
+	{ 7,	5,	"nrb51" },
+	{ 8,	5,	"nrb52" },
+	{ 9,	5,	"nrb65" },
+	{ 10,	5,	"nrb66" },
+	{ 11,	5,	"nrb78" },
+	{ 12,	5,	"nrb79" },
+	{ 13,	5,	"nrb93" },
+	{ 14,	6,	"nrb106" },
+	{ 15,	6,	"nrb107" },
+	{ 16,	6,	"nrb121" },
+	{ 17,	6,	"nrb132" },
+	{ 18,	6,	"nrb133" },
+	{ 19,	6,	"nrb135" },
+	{ 20,	6,	"nrb160" },
+	{ 21,	6,	"nrb162" },
+	{ 22,	6,	"nrb189" },
+	{ 23,	6,	"nrb216" },
+	{ 24,	6,	"nrb217" },
+	{ 25,	6,	"nrb245" },
+	{ 26,	6,	"nrb264" },
+	{ 27,	6,	"nrb270" },
+	{ 28,	6,	"nrb273" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NRNRB_enum2value_1[] = {
+	14,	/* nrb106(14) */
+	15,	/* nrb107(15) */
+	0,	/* nrb11(0) */
+	16,	/* nrb121(16) */
+	17,	/* nrb132(17) */
+	18,	/* nrb133(18) */
+	19,	/* nrb135(19) */
+	20,	/* nrb160(20) */
+	21,	/* nrb162(21) */
+	1,	/* nrb18(1) */
+	22,	/* nrb189(22) */
+	23,	/* nrb216(23) */
+	24,	/* nrb217(24) */
+	2,	/* nrb24(2) */
+	25,	/* nrb245(25) */
+	3,	/* nrb25(3) */
+	26,	/* nrb264(26) */
+	27,	/* nrb270(27) */
+	28,	/* nrb273(28) */
+	4,	/* nrb31(4) */
+	5,	/* nrb32(5) */
+	6,	/* nrb38(6) */
+	7,	/* nrb51(7) */
+	8,	/* nrb52(8) */
+	9,	/* nrb65(9) */
+	10,	/* nrb66(10) */
+	11,	/* nrb78(11) */
+	12,	/* nrb79(12) */
+	13	/* nrb93(13) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_NRNRB_specs_1 = {
+	asn_MAP_X2N_NRNRB_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NRNRB_enum2value_1,	/* N => "tag"; sorted by N */
+	29,	/* Number of elements in the maps */
+	30,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRNRB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRNRB = {
+	"NRNRB",
+	"NRNRB",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NRNRB_tags_1,
+	sizeof(asn_DEF_X2N_NRNRB_tags_1)
+		/sizeof(asn_DEF_X2N_NRNRB_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRNRB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRNRB_tags_1)
+		/sizeof(asn_DEF_X2N_NRNRB_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRNRB_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NRNRB_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRNRB.h b/asn1c_defs/X2N_NRNRB.h
new file mode 100644
index 0000000..e5874e3
--- /dev/null
+++ b/asn1c_defs/X2N_NRNRB.h
@@ -0,0 +1,81 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRNRB_H_
+#define	_X2N_NRNRB_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRNRB {
+	X2N_NRNRB_nrb11	= 0,
+	X2N_NRNRB_nrb18	= 1,
+	X2N_NRNRB_nrb24	= 2,
+	X2N_NRNRB_nrb25	= 3,
+	X2N_NRNRB_nrb31	= 4,
+	X2N_NRNRB_nrb32	= 5,
+	X2N_NRNRB_nrb38	= 6,
+	X2N_NRNRB_nrb51	= 7,
+	X2N_NRNRB_nrb52	= 8,
+	X2N_NRNRB_nrb65	= 9,
+	X2N_NRNRB_nrb66	= 10,
+	X2N_NRNRB_nrb78	= 11,
+	X2N_NRNRB_nrb79	= 12,
+	X2N_NRNRB_nrb93	= 13,
+	X2N_NRNRB_nrb106	= 14,
+	X2N_NRNRB_nrb107	= 15,
+	X2N_NRNRB_nrb121	= 16,
+	X2N_NRNRB_nrb132	= 17,
+	X2N_NRNRB_nrb133	= 18,
+	X2N_NRNRB_nrb135	= 19,
+	X2N_NRNRB_nrb160	= 20,
+	X2N_NRNRB_nrb162	= 21,
+	X2N_NRNRB_nrb189	= 22,
+	X2N_NRNRB_nrb216	= 23,
+	X2N_NRNRB_nrb217	= 24,
+	X2N_NRNRB_nrb245	= 25,
+	X2N_NRNRB_nrb264	= 26,
+	X2N_NRNRB_nrb270	= 27,
+	X2N_NRNRB_nrb273	= 28
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NRNRB;
+
+/* X2N_NRNRB */
+typedef long	 X2N_NRNRB_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRNRB_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRNRB;
+extern const asn_INTEGER_specifics_t asn_SPC_NRNRB_specs_1;
+asn_struct_free_f NRNRB_free;
+asn_struct_print_f NRNRB_print;
+asn_constr_check_f NRNRB_constraint;
+ber_type_decoder_f NRNRB_decode_ber;
+der_type_encoder_f NRNRB_encode_der;
+xer_type_decoder_f NRNRB_decode_xer;
+xer_type_encoder_f NRNRB_encode_xer;
+per_type_decoder_f NRNRB_decode_uper;
+per_type_encoder_f NRNRB_encode_uper;
+per_type_decoder_f NRNRB_decode_aper;
+per_type_encoder_f NRNRB_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRNRB_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRNeighbour-Information.c b/asn1c_defs/X2N_NRNeighbour-Information.c
new file mode 100644
index 0000000..8887634
--- /dev/null
+++ b/asn1c_defs/X2N_NRNeighbour-Information.c
@@ -0,0 +1,210 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRNeighbour-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_FDD-InfoNeighbourServedNRCell-Information.h"
+#include "X2N_TDD-InfoNeighbourServedNRCell-Information.h"
+static asn_per_constraints_t asn_PER_type_X2N_nRNeighbourModeInfo_constr_8 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_NRNeighbour_Information_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1024 }	/* (SIZE(1..1024)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_nRNeighbourModeInfo_8[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo, choice.fdd),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fdd"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo, choice.tdd),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tdd"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_nRNeighbourModeInfo_tag2el_8[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_nRNeighbourModeInfo_specs_8 = {
+	sizeof(struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo),
+	offsetof(struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo, _asn_ctx),
+	offsetof(struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo, present),
+	sizeof(((struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo *)0)->present),
+	asn_MAP_X2N_nRNeighbourModeInfo_tag2el_8,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_nRNeighbourModeInfo_8 = {
+	"nRNeighbourModeInfo",
+	"nRNeighbourModeInfo",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_nRNeighbourModeInfo_constr_8, CHOICE_constraint },
+	asn_MBR_X2N_nRNeighbourModeInfo_8,
+	2,	/* Elements count */
+	&asn_SPC_X2N_nRNeighbourModeInfo_specs_8	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information__Member, nrpCI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRPCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrpCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information__Member, nrCellID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrCellID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_NRNeighbour_Information__Member, fiveGS_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FiveGS_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGS-TAC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NRNeighbour_Information__Member, configured_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"configured-TAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information__Member, measurementTimingConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementTimingConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information__Member, nRNeighbourModeInfo),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_nRNeighbourModeInfo_8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRNeighbourModeInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NRNeighbour_Information__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P97,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2, 3, 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrpCI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fiveGS-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* configured-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* measurementTimingConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* nRNeighbourModeInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_NRNeighbour_Information__Member),
+	offsetof(struct X2N_NRNeighbour_Information__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	7,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRNeighbour_Information_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRNeighbour_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_NRNeighbour_Information_specs_1 = {
+	sizeof(struct X2N_NRNeighbour_Information),
+	offsetof(struct X2N_NRNeighbour_Information, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRNeighbour_Information = {
+	"NRNeighbour-Information",
+	"NRNeighbour-Information",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_NRNeighbour_Information_tags_1,
+	sizeof(asn_DEF_X2N_NRNeighbour_Information_tags_1)
+		/sizeof(asn_DEF_X2N_NRNeighbour_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRNeighbour_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRNeighbour_Information_tags_1)
+		/sizeof(asn_DEF_X2N_NRNeighbour_Information_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRNeighbour_Information_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_NRNeighbour_Information_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_NRNeighbour_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRNeighbour-Information.h b/asn1c_defs/X2N_NRNeighbour-Information.h
new file mode 100644
index 0000000..cc56994
--- /dev/null
+++ b/asn1c_defs/X2N_NRNeighbour-Information.h
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRNeighbour_Information_H_
+#define	_X2N_NRNeighbour_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_NRPCI.h"
+#include "X2N_NRCGI.h"
+#include "X2N_FiveGS-TAC.h"
+#include "X2N_TAC.h"
+#include <OCTET_STRING.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR {
+	X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_NOTHING,	/* No components present */
+	X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_fdd,
+	X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR_tdd
+	/* Extensions may appear below */
+	
+} X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_FDD_InfoNeighbourServedNRCell_Information;
+struct X2N_TDD_InfoNeighbourServedNRCell_Information;
+
+/* Forward definitions */
+typedef struct X2N_NRNeighbour_Information__Member {
+	X2N_NRPCI_t	 nrpCI;
+	X2N_NRCGI_t	 nrCellID;
+	X2N_FiveGS_TAC_t	*fiveGS_TAC;	/* OPTIONAL */
+	X2N_TAC_t	*configured_TAC;	/* OPTIONAL */
+	OCTET_STRING_t	 measurementTimingConfiguration;
+	struct X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo {
+		X2N_NRNeighbour_Information__Member__nRNeighbourModeInfo_PR present;
+		union X2N_NRNeighbour_Information__X2N_Member__X2N_nRNeighbourModeInfo_u {
+			struct X2N_FDD_InfoNeighbourServedNRCell_Information	*fdd;
+			struct X2N_TDD_InfoNeighbourServedNRCell_Information	*tdd;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} nRNeighbourModeInfo;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} NRNeighbour_Information__Member;
+
+/* X2N_NRNeighbour-Information */
+typedef struct X2N_NRNeighbour_Information {
+	A_SEQUENCE_OF(NRNeighbour_Information__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRNeighbour_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRNeighbour_Information;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_NRNeighbour_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_NRNeighbour_Information_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_NRNeighbour_Information_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRNeighbour_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRPCI.c b/asn1c_defs/X2N_NRPCI.c
new file mode 100644
index 0000000..8a977a3
--- /dev/null
+++ b/asn1c_defs/X2N_NRPCI.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRPCI.h"
+
+int
+X2N_NRPCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1007)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRPCI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  1007 }	/* (0..1007) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRPCI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRPCI = {
+	"NRPCI",
+	"NRPCI",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_NRPCI_tags_1,
+	sizeof(asn_DEF_X2N_NRPCI_tags_1)
+		/sizeof(asn_DEF_X2N_NRPCI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRPCI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRPCI_tags_1)
+		/sizeof(asn_DEF_X2N_NRPCI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRPCI_constr_1, X2N_NRPCI_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_NRPCI.h b/asn1c_defs/X2N_NRPCI.h
new file mode 100644
index 0000000..17b8b0d
--- /dev/null
+++ b/asn1c_defs/X2N_NRPCI.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRPCI_H_
+#define	_X2N_NRPCI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_NRPCI */
+typedef long	 X2N_NRPCI_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRPCI_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRPCI;
+asn_struct_free_f X2N_NRPCI_free;
+asn_struct_print_f X2N_NRPCI_print;
+asn_constr_check_f X2N_NRPCI_constraint;
+ber_type_decoder_f X2N_NRPCI_decode_ber;
+der_type_encoder_f X2N_NRPCI_encode_der;
+xer_type_decoder_f X2N_NRPCI_decode_xer;
+xer_type_encoder_f X2N_NRPCI_encode_xer;
+per_type_decoder_f X2N_NRPCI_decode_uper;
+per_type_encoder_f X2N_NRPCI_encode_uper;
+per_type_decoder_f X2N_NRPCI_decode_aper;
+per_type_encoder_f X2N_NRPCI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRPCI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRS-NSSS-PowerOffset.c b/asn1c_defs/X2N_NRS-NSSS-PowerOffset.c
new file mode 100644
index 0000000..620b79f
--- /dev/null
+++ b/asn1c_defs/X2N_NRS-NSSS-PowerOffset.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRS-NSSS-PowerOffset.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_NRS_NSSS_PowerOffset_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NRS_NSSS_PowerOffset_value2enum_1[] = {
+	{ 0,	10,	"minusThree" },
+	{ 1,	4,	"zero" },
+	{ 2,	5,	"three" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NRS_NSSS_PowerOffset_enum2value_1[] = {
+	0,	/* minusThree(0) */
+	2,	/* three(2) */
+	1	/* zero(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_NRS_NSSS_PowerOffset_specs_1 = {
+	asn_MAP_X2N_NRS_NSSS_PowerOffset_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NRS_NSSS_PowerOffset_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRS_NSSS_PowerOffset = {
+	"NRS-NSSS-PowerOffset",
+	"NRS-NSSS-PowerOffset",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1,
+	sizeof(asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1)
+		/sizeof(asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1)
+		/sizeof(asn_DEF_X2N_NRS_NSSS_PowerOffset_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRS_NSSS_PowerOffset_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NRS_NSSS_PowerOffset_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRS-NSSS-PowerOffset.h b/asn1c_defs/X2N_NRS-NSSS-PowerOffset.h
new file mode 100644
index 0000000..afd21f8
--- /dev/null
+++ b/asn1c_defs/X2N_NRS-NSSS-PowerOffset.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRS_NSSS_PowerOffset_H_
+#define	_X2N_NRS_NSSS_PowerOffset_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRS_NSSS_PowerOffset {
+	X2N_NRS_NSSS_PowerOffset_minusThree	= 0,
+	X2N_NRS_NSSS_PowerOffset_zero	= 1,
+	X2N_NRS_NSSS_PowerOffset_three	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NRS_NSSS_PowerOffset;
+
+/* X2N_NRS-NSSS-PowerOffset */
+typedef long	 X2N_NRS_NSSS_PowerOffset_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRS_NSSS_PowerOffset;
+asn_struct_free_f X2N_NRS_NSSS_PowerOffset_free;
+asn_struct_print_f X2N_NRS_NSSS_PowerOffset_print;
+asn_constr_check_f X2N_NRS_NSSS_PowerOffset_constraint;
+ber_type_decoder_f X2N_NRS_NSSS_PowerOffset_decode_ber;
+der_type_encoder_f X2N_NRS_NSSS_PowerOffset_encode_der;
+xer_type_decoder_f X2N_NRS_NSSS_PowerOffset_decode_xer;
+xer_type_encoder_f X2N_NRS_NSSS_PowerOffset_encode_xer;
+per_type_decoder_f X2N_NRS_NSSS_PowerOffset_decode_uper;
+per_type_encoder_f X2N_NRS_NSSS_PowerOffset_encode_uper;
+per_type_decoder_f X2N_NRS_NSSS_PowerOffset_decode_aper;
+per_type_encoder_f X2N_NRS_NSSS_PowerOffset_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRS_NSSS_PowerOffset_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRSCS.c b/asn1c_defs/X2N_NRSCS.c
new file mode 100644
index 0000000..b6f77b9
--- /dev/null
+++ b/asn1c_defs/X2N_NRSCS.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRSCS.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRSCS_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NRSCS_value2enum_1[] = {
+	{ 0,	5,	"scs15" },
+	{ 1,	5,	"scs30" },
+	{ 2,	5,	"scs60" },
+	{ 3,	6,	"scs120" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NRSCS_enum2value_1[] = {
+	3,	/* scs120(3) */
+	0,	/* scs15(0) */
+	1,	/* scs30(1) */
+	2	/* scs60(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_NRSCS_specs_1 = {
+	asn_MAP_X2N_NRSCS_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NRSCS_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRSCS_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRSCS = {
+	"NRSCS",
+	"NRSCS",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NRSCS_tags_1,
+	sizeof(asn_DEF_X2N_NRSCS_tags_1)
+		/sizeof(asn_DEF_X2N_NRSCS_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRSCS_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRSCS_tags_1)
+		/sizeof(asn_DEF_X2N_NRSCS_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRSCS_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NRSCS_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRSCS.h b/asn1c_defs/X2N_NRSCS.h
new file mode 100644
index 0000000..0f6fc55
--- /dev/null
+++ b/asn1c_defs/X2N_NRSCS.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRSCS_H_
+#define	_X2N_NRSCS_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRSCS {
+	X2N_NRSCS_scs15	= 0,
+	X2N_NRSCS_scs30	= 1,
+	X2N_NRSCS_scs60	= 2,
+	X2N_NRSCS_scs120	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NRSCS;
+
+/* X2N_NRSCS */
+typedef long	 X2N_NRSCS_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRSCS_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRSCS;
+extern const asn_INTEGER_specifics_t asn_SPC_NRSCS_specs_1;
+asn_struct_free_f NRSCS_free;
+asn_struct_print_f NRSCS_print;
+asn_constr_check_f NRSCS_constraint;
+ber_type_decoder_f NRSCS_decode_ber;
+der_type_encoder_f NRSCS_encode_der;
+xer_type_decoder_f NRSCS_decode_xer;
+xer_type_encoder_f NRSCS_encode_xer;
+per_type_decoder_f NRSCS_decode_uper;
+per_type_encoder_f NRSCS_encode_uper;
+per_type_decoder_f NRSCS_decode_aper;
+per_type_encoder_f NRSCS_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRSCS_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRUESecurityCapabilities.c b/asn1c_defs/X2N_NRUESecurityCapabilities.c
new file mode 100644
index 0000000..3b977ae
--- /dev/null
+++ b/asn1c_defs/X2N_NRUESecurityCapabilities.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRUESecurityCapabilities.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_NRUESecurityCapabilities_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRUESecurityCapabilities, nRencryptionAlgorithms),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRencryptionAlgorithms,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRencryptionAlgorithms"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRUESecurityCapabilities, nRintegrityProtectionAlgorithms),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRintegrityProtectionAlgorithms,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRintegrityProtectionAlgorithms"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_NRUESecurityCapabilities, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P176,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_NRUESecurityCapabilities_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_NRUESecurityCapabilities_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRUESecurityCapabilities_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRencryptionAlgorithms */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRintegrityProtectionAlgorithms */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRUESecurityCapabilities_specs_1 = {
+	sizeof(struct X2N_NRUESecurityCapabilities),
+	offsetof(struct X2N_NRUESecurityCapabilities, _asn_ctx),
+	asn_MAP_X2N_NRUESecurityCapabilities_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_NRUESecurityCapabilities_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRUESecurityCapabilities = {
+	"NRUESecurityCapabilities",
+	"NRUESecurityCapabilities",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRUESecurityCapabilities_tags_1,
+	sizeof(asn_DEF_X2N_NRUESecurityCapabilities_tags_1)
+		/sizeof(asn_DEF_X2N_NRUESecurityCapabilities_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRUESecurityCapabilities_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRUESecurityCapabilities_tags_1)
+		/sizeof(asn_DEF_X2N_NRUESecurityCapabilities_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRUESecurityCapabilities_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRUESecurityCapabilities_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRUESecurityCapabilities.h b/asn1c_defs/X2N_NRUESecurityCapabilities.h
new file mode 100644
index 0000000..5e50ec0
--- /dev/null
+++ b/asn1c_defs/X2N_NRUESecurityCapabilities.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRUESecurityCapabilities_H_
+#define	_X2N_NRUESecurityCapabilities_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRencryptionAlgorithms.h"
+#include "X2N_NRintegrityProtectionAlgorithms.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_NRUESecurityCapabilities */
+typedef struct X2N_NRUESecurityCapabilities {
+	X2N_NRencryptionAlgorithms_t	 nRencryptionAlgorithms;
+	X2N_NRintegrityProtectionAlgorithms_t	 nRintegrityProtectionAlgorithms;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRUESecurityCapabilities_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRUESecurityCapabilities;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRUESecurityCapabilities_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_NRUESecurityCapabilities_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRUESecurityCapabilities_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRencryptionAlgorithms.c b/asn1c_defs/X2N_NRencryptionAlgorithms.c
new file mode 100644
index 0000000..ea9a032
--- /dev/null
+++ b/asn1c_defs/X2N_NRencryptionAlgorithms.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRencryptionAlgorithms.h"
+
+int
+X2N_NRencryptionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRencryptionAlgorithms_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  16,  16 }	/* (SIZE(16..16,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRencryptionAlgorithms_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRencryptionAlgorithms = {
+	"NRencryptionAlgorithms",
+	"NRencryptionAlgorithms",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_NRencryptionAlgorithms_tags_1,
+	sizeof(asn_DEF_X2N_NRencryptionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_NRencryptionAlgorithms_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRencryptionAlgorithms_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRencryptionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_NRencryptionAlgorithms_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRencryptionAlgorithms_constr_1, X2N_NRencryptionAlgorithms_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRencryptionAlgorithms.h b/asn1c_defs/X2N_NRencryptionAlgorithms.h
new file mode 100644
index 0000000..1e4e938
--- /dev/null
+++ b/asn1c_defs/X2N_NRencryptionAlgorithms.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRencryptionAlgorithms_H_
+#define	_X2N_NRencryptionAlgorithms_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_NRencryptionAlgorithms */
+typedef BIT_STRING_t	 X2N_NRencryptionAlgorithms_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRencryptionAlgorithms_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRencryptionAlgorithms;
+asn_struct_free_f X2N_NRencryptionAlgorithms_free;
+asn_struct_print_f X2N_NRencryptionAlgorithms_print;
+asn_constr_check_f X2N_NRencryptionAlgorithms_constraint;
+ber_type_decoder_f X2N_NRencryptionAlgorithms_decode_ber;
+der_type_encoder_f X2N_NRencryptionAlgorithms_encode_der;
+xer_type_decoder_f X2N_NRencryptionAlgorithms_decode_xer;
+xer_type_encoder_f X2N_NRencryptionAlgorithms_encode_xer;
+per_type_decoder_f X2N_NRencryptionAlgorithms_decode_uper;
+per_type_encoder_f X2N_NRencryptionAlgorithms_encode_uper;
+per_type_decoder_f X2N_NRencryptionAlgorithms_decode_aper;
+per_type_encoder_f X2N_NRencryptionAlgorithms_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRencryptionAlgorithms_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.c b/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.c
new file mode 100644
index 0000000..c721b87
--- /dev/null
+++ b/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRintegrityProtectionAlgorithms.h"
+
+int
+X2N_NRintegrityProtectionAlgorithms_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NRintegrityProtectionAlgorithms_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  16,  16 }	/* (SIZE(16..16,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRintegrityProtectionAlgorithms = {
+	"NRintegrityProtectionAlgorithms",
+	"NRintegrityProtectionAlgorithms",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1,
+	sizeof(asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1)
+		/sizeof(asn_DEF_X2N_NRintegrityProtectionAlgorithms_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRintegrityProtectionAlgorithms_constr_1, X2N_NRintegrityProtectionAlgorithms_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.h b/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.h
new file mode 100644
index 0000000..d68a6b3
--- /dev/null
+++ b/asn1c_defs/X2N_NRintegrityProtectionAlgorithms.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRintegrityProtectionAlgorithms_H_
+#define	_X2N_NRintegrityProtectionAlgorithms_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_NRintegrityProtectionAlgorithms */
+typedef BIT_STRING_t	 X2N_NRintegrityProtectionAlgorithms_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NRintegrityProtectionAlgorithms_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRintegrityProtectionAlgorithms;
+asn_struct_free_f X2N_NRintegrityProtectionAlgorithms_free;
+asn_struct_print_f X2N_NRintegrityProtectionAlgorithms_print;
+asn_constr_check_f X2N_NRintegrityProtectionAlgorithms_constraint;
+ber_type_decoder_f X2N_NRintegrityProtectionAlgorithms_decode_ber;
+der_type_encoder_f X2N_NRintegrityProtectionAlgorithms_encode_der;
+xer_type_decoder_f X2N_NRintegrityProtectionAlgorithms_decode_xer;
+xer_type_encoder_f X2N_NRintegrityProtectionAlgorithms_encode_xer;
+per_type_decoder_f X2N_NRintegrityProtectionAlgorithms_decode_uper;
+per_type_encoder_f X2N_NRintegrityProtectionAlgorithms_encode_uper;
+per_type_decoder_f X2N_NRintegrityProtectionAlgorithms_decode_aper;
+per_type_encoder_f X2N_NRintegrityProtectionAlgorithms_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRintegrityProtectionAlgorithms_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRrestrictionin5GS.c b/asn1c_defs/X2N_NRrestrictionin5GS.c
new file mode 100644
index 0000000..51ce6b0
--- /dev/null
+++ b/asn1c_defs/X2N_NRrestrictionin5GS.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRrestrictionin5GS.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_NRrestrictionin5GS_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NRrestrictionin5GS_value2enum_1[] = {
+	{ 0,	17,	"nRrestrictedin5GS" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NRrestrictionin5GS_enum2value_1[] = {
+	0	/* nRrestrictedin5GS(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_NRrestrictionin5GS_specs_1 = {
+	asn_MAP_X2N_NRrestrictionin5GS_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NRrestrictionin5GS_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRrestrictionin5GS_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRrestrictionin5GS = {
+	"NRrestrictionin5GS",
+	"NRrestrictionin5GS",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NRrestrictionin5GS_tags_1,
+	sizeof(asn_DEF_X2N_NRrestrictionin5GS_tags_1)
+		/sizeof(asn_DEF_X2N_NRrestrictionin5GS_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRrestrictionin5GS_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRrestrictionin5GS_tags_1)
+		/sizeof(asn_DEF_X2N_NRrestrictionin5GS_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRrestrictionin5GS_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NRrestrictionin5GS_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRrestrictionin5GS.h b/asn1c_defs/X2N_NRrestrictionin5GS.h
new file mode 100644
index 0000000..b4b0590
--- /dev/null
+++ b/asn1c_defs/X2N_NRrestrictionin5GS.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRrestrictionin5GS_H_
+#define	_X2N_NRrestrictionin5GS_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRrestrictionin5GS {
+	X2N_NRrestrictionin5GS_nRrestrictedin5GS	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NRrestrictionin5GS;
+
+/* X2N_NRrestrictionin5GS */
+typedef long	 X2N_NRrestrictionin5GS_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRrestrictionin5GS;
+asn_struct_free_f X2N_NRrestrictionin5GS_free;
+asn_struct_print_f X2N_NRrestrictionin5GS_print;
+asn_constr_check_f X2N_NRrestrictionin5GS_constraint;
+ber_type_decoder_f X2N_NRrestrictionin5GS_decode_ber;
+der_type_encoder_f X2N_NRrestrictionin5GS_encode_der;
+xer_type_decoder_f X2N_NRrestrictionin5GS_decode_xer;
+xer_type_encoder_f X2N_NRrestrictionin5GS_encode_xer;
+per_type_decoder_f X2N_NRrestrictionin5GS_decode_uper;
+per_type_encoder_f X2N_NRrestrictionin5GS_encode_uper;
+per_type_decoder_f X2N_NRrestrictionin5GS_decode_aper;
+per_type_encoder_f X2N_NRrestrictionin5GS_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRrestrictionin5GS_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.c b/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.c
new file mode 100644
index 0000000..6721c52
--- /dev/null
+++ b/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NRrestrictioninEPSasSecondaryRAT.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_NRrestrictioninEPSasSecondaryRAT_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NRrestrictioninEPSasSecondaryRAT_value2enum_1[] = {
+	{ 0,	31,	"nRrestrictedinEPSasSecondaryRAT" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NRrestrictioninEPSasSecondaryRAT_enum2value_1[] = {
+	0	/* nRrestrictedinEPSasSecondaryRAT(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_NRrestrictioninEPSasSecondaryRAT_specs_1 = {
+	asn_MAP_X2N_NRrestrictioninEPSasSecondaryRAT_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NRrestrictioninEPSasSecondaryRAT_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT = {
+	"NRrestrictioninEPSasSecondaryRAT",
+	"NRrestrictioninEPSasSecondaryRAT",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1,
+	sizeof(asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1)
+		/sizeof(asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1)
+		/sizeof(asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NRrestrictioninEPSasSecondaryRAT_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NRrestrictioninEPSasSecondaryRAT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.h b/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.h
new file mode 100644
index 0000000..420138b
--- /dev/null
+++ b/asn1c_defs/X2N_NRrestrictioninEPSasSecondaryRAT.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NRrestrictioninEPSasSecondaryRAT_H_
+#define	_X2N_NRrestrictioninEPSasSecondaryRAT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NRrestrictioninEPSasSecondaryRAT {
+	X2N_NRrestrictioninEPSasSecondaryRAT_nRrestrictedinEPSasSecondaryRAT	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NRrestrictioninEPSasSecondaryRAT;
+
+/* X2N_NRrestrictioninEPSasSecondaryRAT */
+typedef long	 X2N_NRrestrictioninEPSasSecondaryRAT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT;
+asn_struct_free_f X2N_NRrestrictioninEPSasSecondaryRAT_free;
+asn_struct_print_f X2N_NRrestrictioninEPSasSecondaryRAT_print;
+asn_constr_check_f X2N_NRrestrictioninEPSasSecondaryRAT_constraint;
+ber_type_decoder_f X2N_NRrestrictioninEPSasSecondaryRAT_decode_ber;
+der_type_encoder_f X2N_NRrestrictioninEPSasSecondaryRAT_encode_der;
+xer_type_decoder_f X2N_NRrestrictioninEPSasSecondaryRAT_decode_xer;
+xer_type_encoder_f X2N_NRrestrictioninEPSasSecondaryRAT_encode_xer;
+per_type_decoder_f X2N_NRrestrictioninEPSasSecondaryRAT_decode_uper;
+per_type_encoder_f X2N_NRrestrictioninEPSasSecondaryRAT_encode_uper;
+per_type_decoder_f X2N_NRrestrictioninEPSasSecondaryRAT_decode_aper;
+per_type_encoder_f X2N_NRrestrictioninEPSasSecondaryRAT_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NRrestrictioninEPSasSecondaryRAT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.c b/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.c
new file mode 100644
index 0000000..3e0f39f
--- /dev/null
+++ b/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NSSS-NumOccasionDifferentPrecoder.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_NSSS_NumOccasionDifferentPrecoder_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NSSS_NumOccasionDifferentPrecoder_value2enum_1[] = {
+	{ 0,	3,	"two" },
+	{ 1,	4,	"four" },
+	{ 2,	5,	"eight" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NSSS_NumOccasionDifferentPrecoder_enum2value_1[] = {
+	2,	/* eight(2) */
+	1,	/* four(1) */
+	0	/* two(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_NSSS_NumOccasionDifferentPrecoder_specs_1 = {
+	asn_MAP_X2N_NSSS_NumOccasionDifferentPrecoder_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NSSS_NumOccasionDifferentPrecoder_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder = {
+	"NSSS-NumOccasionDifferentPrecoder",
+	"NSSS-NumOccasionDifferentPrecoder",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1,
+	sizeof(asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1)
+		/sizeof(asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1)
+		/sizeof(asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NSSS_NumOccasionDifferentPrecoder_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NSSS_NumOccasionDifferentPrecoder_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.h b/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.h
new file mode 100644
index 0000000..479734b
--- /dev/null
+++ b/asn1c_defs/X2N_NSSS-NumOccasionDifferentPrecoder.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NSSS_NumOccasionDifferentPrecoder_H_
+#define	_X2N_NSSS_NumOccasionDifferentPrecoder_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NSSS_NumOccasionDifferentPrecoder {
+	X2N_NSSS_NumOccasionDifferentPrecoder_two	= 0,
+	X2N_NSSS_NumOccasionDifferentPrecoder_four	= 1,
+	X2N_NSSS_NumOccasionDifferentPrecoder_eight	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NSSS_NumOccasionDifferentPrecoder;
+
+/* X2N_NSSS-NumOccasionDifferentPrecoder */
+typedef long	 X2N_NSSS_NumOccasionDifferentPrecoder_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder;
+asn_struct_free_f X2N_NSSS_NumOccasionDifferentPrecoder_free;
+asn_struct_print_f X2N_NSSS_NumOccasionDifferentPrecoder_print;
+asn_constr_check_f X2N_NSSS_NumOccasionDifferentPrecoder_constraint;
+ber_type_decoder_f X2N_NSSS_NumOccasionDifferentPrecoder_decode_ber;
+der_type_encoder_f X2N_NSSS_NumOccasionDifferentPrecoder_encode_der;
+xer_type_decoder_f X2N_NSSS_NumOccasionDifferentPrecoder_decode_xer;
+xer_type_encoder_f X2N_NSSS_NumOccasionDifferentPrecoder_encode_xer;
+per_type_decoder_f X2N_NSSS_NumOccasionDifferentPrecoder_decode_uper;
+per_type_encoder_f X2N_NSSS_NumOccasionDifferentPrecoder_encode_uper;
+per_type_decoder_f X2N_NSSS_NumOccasionDifferentPrecoder_decode_aper;
+per_type_encoder_f X2N_NSSS_NumOccasionDifferentPrecoder_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NSSS_NumOccasionDifferentPrecoder_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Neighbour-Information.c b/asn1c_defs/X2N_Neighbour-Information.c
new file mode 100644
index 0000000..a11caa1
--- /dev/null
+++ b/asn1c_defs/X2N_Neighbour-Information.c
@@ -0,0 +1,124 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Neighbour-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_per_constraints_t asn_PER_type_X2N_Neighbour_Information_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  0,  512 }	/* (SIZE(0..512)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information__Member, eCGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eCGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information__Member, pCI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information__Member, eARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eARFCN"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_Neighbour_Information__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P172,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eCGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pCI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_Neighbour_Information__Member),
+	offsetof(struct X2N_Neighbour_Information__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	4,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Neighbour_Information_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Neighbour_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_Neighbour_Information_specs_1 = {
+	sizeof(struct X2N_Neighbour_Information),
+	offsetof(struct X2N_Neighbour_Information, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Neighbour_Information = {
+	"Neighbour-Information",
+	"Neighbour-Information",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_Neighbour_Information_tags_1,
+	sizeof(asn_DEF_X2N_Neighbour_Information_tags_1)
+		/sizeof(asn_DEF_X2N_Neighbour_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Neighbour_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Neighbour_Information_tags_1)
+		/sizeof(asn_DEF_X2N_Neighbour_Information_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Neighbour_Information_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_Neighbour_Information_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_Neighbour_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Neighbour-Information.h b/asn1c_defs/X2N_Neighbour-Information.h
new file mode 100644
index 0000000..0bad091
--- /dev/null
+++ b/asn1c_defs/X2N_Neighbour-Information.h
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Neighbour_Information_H_
+#define	_X2N_Neighbour_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ECGI.h"
+#include "X2N_PCI.h"
+#include "X2N_EARFCN.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_Neighbour_Information__Member {
+	X2N_ECGI_t	 eCGI;
+	X2N_PCI_t	 pCI;
+	X2N_EARFCN_t	 eARFCN;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Neighbour_Information__Member;
+
+/* X2N_Neighbour-Information */
+typedef struct X2N_Neighbour_Information {
+	A_SEQUENCE_OF(Neighbour_Information__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Neighbour_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Neighbour_Information;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_Neighbour_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_Neighbour_Information_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_Neighbour_Information_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Neighbour_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NewDRBIDrequest.c b/asn1c_defs/X2N_NewDRBIDrequest.c
new file mode 100644
index 0000000..fe183bf
--- /dev/null
+++ b/asn1c_defs/X2N_NewDRBIDrequest.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NewDRBIDrequest.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_NewDRBIDrequest_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_NewDRBIDrequest_value2enum_1[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_NewDRBIDrequest_enum2value_1[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_NewDRBIDrequest_specs_1 = {
+	asn_MAP_X2N_NewDRBIDrequest_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_NewDRBIDrequest_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NewDRBIDrequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NewDRBIDrequest = {
+	"NewDRBIDrequest",
+	"NewDRBIDrequest",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_NewDRBIDrequest_tags_1,
+	sizeof(asn_DEF_X2N_NewDRBIDrequest_tags_1)
+		/sizeof(asn_DEF_X2N_NewDRBIDrequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NewDRBIDrequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NewDRBIDrequest_tags_1)
+		/sizeof(asn_DEF_X2N_NewDRBIDrequest_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NewDRBIDrequest_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_NewDRBIDrequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_NewDRBIDrequest.h b/asn1c_defs/X2N_NewDRBIDrequest.h
new file mode 100644
index 0000000..9f2db48
--- /dev/null
+++ b/asn1c_defs/X2N_NewDRBIDrequest.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NewDRBIDrequest_H_
+#define	_X2N_NewDRBIDrequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_NewDRBIDrequest {
+	X2N_NewDRBIDrequest_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_NewDRBIDrequest;
+
+/* X2N_NewDRBIDrequest */
+typedef long	 X2N_NewDRBIDrequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NewDRBIDrequest;
+asn_struct_free_f X2N_NewDRBIDrequest_free;
+asn_struct_print_f X2N_NewDRBIDrequest_print;
+asn_constr_check_f X2N_NewDRBIDrequest_constraint;
+ber_type_decoder_f X2N_NewDRBIDrequest_decode_ber;
+der_type_encoder_f X2N_NewDRBIDrequest_encode_der;
+xer_type_decoder_f X2N_NewDRBIDrequest_decode_xer;
+xer_type_encoder_f X2N_NewDRBIDrequest_encode_xer;
+per_type_decoder_f X2N_NewDRBIDrequest_decode_uper;
+per_type_encoder_f X2N_NewDRBIDrequest_encode_uper;
+per_type_decoder_f X2N_NewDRBIDrequest_decode_aper;
+per_type_encoder_f X2N_NewDRBIDrequest_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NewDRBIDrequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_NextHopChainingCount.c b/asn1c_defs/X2N_NextHopChainingCount.c
new file mode 100644
index 0000000..2c1b0b2
--- /dev/null
+++ b/asn1c_defs/X2N_NextHopChainingCount.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_NextHopChainingCount.h"
+
+int
+X2N_NextHopChainingCount_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_NextHopChainingCount_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 3,  3,  0,  7 }	/* (0..7) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NextHopChainingCount_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NextHopChainingCount = {
+	"NextHopChainingCount",
+	"NextHopChainingCount",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_NextHopChainingCount_tags_1,
+	sizeof(asn_DEF_X2N_NextHopChainingCount_tags_1)
+		/sizeof(asn_DEF_X2N_NextHopChainingCount_tags_1[0]), /* 1 */
+	asn_DEF_X2N_NextHopChainingCount_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_NextHopChainingCount_tags_1)
+		/sizeof(asn_DEF_X2N_NextHopChainingCount_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_NextHopChainingCount_constr_1, X2N_NextHopChainingCount_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_NextHopChainingCount.h b/asn1c_defs/X2N_NextHopChainingCount.h
new file mode 100644
index 0000000..7ae1ad5
--- /dev/null
+++ b/asn1c_defs/X2N_NextHopChainingCount.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_NextHopChainingCount_H_
+#define	_X2N_NextHopChainingCount_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_NextHopChainingCount */
+typedef long	 X2N_NextHopChainingCount_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_NextHopChainingCount_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NextHopChainingCount;
+asn_struct_free_f X2N_NextHopChainingCount_free;
+asn_struct_print_f X2N_NextHopChainingCount_print;
+asn_constr_check_f X2N_NextHopChainingCount_constraint;
+ber_type_decoder_f X2N_NextHopChainingCount_decode_ber;
+der_type_encoder_f X2N_NextHopChainingCount_encode_der;
+xer_type_decoder_f X2N_NextHopChainingCount_decode_xer;
+xer_type_encoder_f X2N_NextHopChainingCount_encode_xer;
+per_type_decoder_f X2N_NextHopChainingCount_decode_uper;
+per_type_encoder_f X2N_NextHopChainingCount_encode_uper;
+per_type_decoder_f X2N_NextHopChainingCount_decode_aper;
+per_type_encoder_f X2N_NextHopChainingCount_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_NextHopChainingCount_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Number-of-Antennaports.c b/asn1c_defs/X2N_Number-of-Antennaports.c
new file mode 100644
index 0000000..2efe47d
--- /dev/null
+++ b/asn1c_defs/X2N_Number-of-Antennaports.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Number-of-Antennaports.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Number_of_Antennaports_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Number_of_Antennaports_value2enum_1[] = {
+	{ 0,	3,	"an1" },
+	{ 1,	3,	"an2" },
+	{ 2,	3,	"an4" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Number_of_Antennaports_enum2value_1[] = {
+	0,	/* an1(0) */
+	1,	/* an2(1) */
+	2	/* an4(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_Number_of_Antennaports_specs_1 = {
+	asn_MAP_X2N_Number_of_Antennaports_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Number_of_Antennaports_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Number_of_Antennaports_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Number_of_Antennaports = {
+	"Number-of-Antennaports",
+	"Number-of-Antennaports",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Number_of_Antennaports_tags_1,
+	sizeof(asn_DEF_X2N_Number_of_Antennaports_tags_1)
+		/sizeof(asn_DEF_X2N_Number_of_Antennaports_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Number_of_Antennaports_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Number_of_Antennaports_tags_1)
+		/sizeof(asn_DEF_X2N_Number_of_Antennaports_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Number_of_Antennaports_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Number_of_Antennaports_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Number-of-Antennaports.h b/asn1c_defs/X2N_Number-of-Antennaports.h
new file mode 100644
index 0000000..c087f85
--- /dev/null
+++ b/asn1c_defs/X2N_Number-of-Antennaports.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Number_of_Antennaports_H_
+#define	_X2N_Number_of_Antennaports_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Number_of_Antennaports {
+	X2N_Number_of_Antennaports_an1	= 0,
+	X2N_Number_of_Antennaports_an2	= 1,
+	X2N_Number_of_Antennaports_an4	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Number_of_Antennaports;
+
+/* X2N_Number-of-Antennaports */
+typedef long	 X2N_Number_of_Antennaports_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Number_of_Antennaports;
+asn_struct_free_f X2N_Number_of_Antennaports_free;
+asn_struct_print_f X2N_Number_of_Antennaports_print;
+asn_constr_check_f X2N_Number_of_Antennaports_constraint;
+ber_type_decoder_f X2N_Number_of_Antennaports_decode_ber;
+der_type_encoder_f X2N_Number_of_Antennaports_encode_der;
+xer_type_decoder_f X2N_Number_of_Antennaports_decode_xer;
+xer_type_encoder_f X2N_Number_of_Antennaports_encode_xer;
+per_type_decoder_f X2N_Number_of_Antennaports_decode_uper;
+per_type_encoder_f X2N_Number_of_Antennaports_encode_uper;
+per_type_decoder_f X2N_Number_of_Antennaports_decode_aper;
+per_type_encoder_f X2N_Number_of_Antennaports_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Number_of_Antennaports_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.c b/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.c
new file mode 100644
index 0000000..e180ccd
--- /dev/null
+++ b/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_OffsetOfNbiotChannelNumberToEARFCN.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_OffsetOfNbiotChannelNumberToEARFCN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  20 }	/* (0..20,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_OffsetOfNbiotChannelNumberToEARFCN_value2enum_1[] = {
+	{ 0,	8,	"minusTen" },
+	{ 1,	9,	"minusNine" },
+	{ 2,	10,	"minusEight" },
+	{ 3,	10,	"minusSeven" },
+	{ 4,	8,	"minusSix" },
+	{ 5,	9,	"minusFive" },
+	{ 6,	9,	"minusFour" },
+	{ 7,	10,	"minusThree" },
+	{ 8,	8,	"minusTwo" },
+	{ 9,	8,	"minusOne" },
+	{ 10,	16,	"minusZeroDotFive" },
+	{ 11,	4,	"zero" },
+	{ 12,	3,	"one" },
+	{ 13,	3,	"two" },
+	{ 14,	5,	"three" },
+	{ 15,	4,	"four" },
+	{ 16,	4,	"five" },
+	{ 17,	3,	"six" },
+	{ 18,	5,	"seven" },
+	{ 19,	5,	"eight" },
+	{ 20,	4,	"nine" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_OffsetOfNbiotChannelNumberToEARFCN_enum2value_1[] = {
+	19,	/* eight(19) */
+	16,	/* five(16) */
+	15,	/* four(15) */
+	2,	/* minusEight(2) */
+	5,	/* minusFive(5) */
+	6,	/* minusFour(6) */
+	1,	/* minusNine(1) */
+	9,	/* minusOne(9) */
+	3,	/* minusSeven(3) */
+	4,	/* minusSix(4) */
+	0,	/* minusTen(0) */
+	7,	/* minusThree(7) */
+	8,	/* minusTwo(8) */
+	10,	/* minusZeroDotFive(10) */
+	20,	/* nine(20) */
+	12,	/* one(12) */
+	18,	/* seven(18) */
+	17,	/* six(17) */
+	14,	/* three(14) */
+	13,	/* two(13) */
+	11	/* zero(11) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_OffsetOfNbiotChannelNumberToEARFCN_specs_1 = {
+	asn_MAP_X2N_OffsetOfNbiotChannelNumberToEARFCN_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_OffsetOfNbiotChannelNumberToEARFCN_enum2value_1,	/* N => "tag"; sorted by N */
+	21,	/* Number of elements in the maps */
+	22,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN = {
+	"OffsetOfNbiotChannelNumberToEARFCN",
+	"OffsetOfNbiotChannelNumberToEARFCN",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1,
+	sizeof(asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1)
+		/sizeof(asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1[0]), /* 1 */
+	asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1)
+		/sizeof(asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_OffsetOfNbiotChannelNumberToEARFCN_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_OffsetOfNbiotChannelNumberToEARFCN_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.h b/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.h
new file mode 100644
index 0000000..7dcbffe
--- /dev/null
+++ b/asn1c_defs/X2N_OffsetOfNbiotChannelNumberToEARFCN.h
@@ -0,0 +1,71 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_OffsetOfNbiotChannelNumberToEARFCN_H_
+#define	_X2N_OffsetOfNbiotChannelNumberToEARFCN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_OffsetOfNbiotChannelNumberToEARFCN {
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusTen	= 0,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusNine	= 1,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusEight	= 2,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusSeven	= 3,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusSix	= 4,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusFive	= 5,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusFour	= 6,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusThree	= 7,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusTwo	= 8,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusOne	= 9,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_minusZeroDotFive	= 10,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_zero	= 11,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_one	= 12,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_two	= 13,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_three	= 14,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_four	= 15,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_five	= 16,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_six	= 17,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_seven	= 18,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_eight	= 19,
+	X2N_OffsetOfNbiotChannelNumberToEARFCN_nine	= 20
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_OffsetOfNbiotChannelNumberToEARFCN;
+
+/* X2N_OffsetOfNbiotChannelNumberToEARFCN */
+typedef long	 X2N_OffsetOfNbiotChannelNumberToEARFCN_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN;
+asn_struct_free_f X2N_OffsetOfNbiotChannelNumberToEARFCN_free;
+asn_struct_print_f X2N_OffsetOfNbiotChannelNumberToEARFCN_print;
+asn_constr_check_f X2N_OffsetOfNbiotChannelNumberToEARFCN_constraint;
+ber_type_decoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_decode_ber;
+der_type_encoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_encode_der;
+xer_type_decoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_decode_xer;
+xer_type_encoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_encode_xer;
+per_type_decoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_decode_uper;
+per_type_encoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_encode_uper;
+per_type_decoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_decode_aper;
+per_type_encoder_f X2N_OffsetOfNbiotChannelNumberToEARFCN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_OffsetOfNbiotChannelNumberToEARFCN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Old-ECGIs.c b/asn1c_defs/X2N_Old-ECGIs.c
new file mode 100644
index 0000000..7c16b70
--- /dev/null
+++ b/asn1c_defs/X2N_Old-ECGIs.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Old-ECGIs.h"
+
+#include "X2N_ECGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_Old_ECGIs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Old_ECGIs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Old_ECGIs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_Old_ECGIs_specs_1 = {
+	sizeof(struct X2N_Old_ECGIs),
+	offsetof(struct X2N_Old_ECGIs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Old_ECGIs = {
+	"Old-ECGIs",
+	"Old-ECGIs",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_Old_ECGIs_tags_1,
+	sizeof(asn_DEF_X2N_Old_ECGIs_tags_1)
+		/sizeof(asn_DEF_X2N_Old_ECGIs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Old_ECGIs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Old_ECGIs_tags_1)
+		/sizeof(asn_DEF_X2N_Old_ECGIs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Old_ECGIs_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_Old_ECGIs_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_Old_ECGIs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Old-ECGIs.h b/asn1c_defs/X2N_Old-ECGIs.h
new file mode 100644
index 0000000..5abc8fb
--- /dev/null
+++ b/asn1c_defs/X2N_Old-ECGIs.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Old_ECGIs_H_
+#define	_X2N_Old_ECGIs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_Old-ECGIs */
+typedef struct X2N_Old_ECGIs {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Old_ECGIs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Old_ECGIs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Old_ECGIs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Oneframe.c b/asn1c_defs/X2N_Oneframe.c
new file mode 100644
index 0000000..c2cfb65
--- /dev/null
+++ b/asn1c_defs/X2N_Oneframe.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Oneframe.h"
+
+int
+X2N_Oneframe_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 6)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Oneframe_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  6,  6 }	/* (SIZE(6..6)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Oneframe_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Oneframe = {
+	"Oneframe",
+	"Oneframe",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_Oneframe_tags_1,
+	sizeof(asn_DEF_X2N_Oneframe_tags_1)
+		/sizeof(asn_DEF_X2N_Oneframe_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Oneframe_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Oneframe_tags_1)
+		/sizeof(asn_DEF_X2N_Oneframe_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Oneframe_constr_1, X2N_Oneframe_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Oneframe.h b/asn1c_defs/X2N_Oneframe.h
new file mode 100644
index 0000000..a558259
--- /dev/null
+++ b/asn1c_defs/X2N_Oneframe.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Oneframe_H_
+#define	_X2N_Oneframe_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Oneframe */
+typedef BIT_STRING_t	 X2N_Oneframe_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Oneframe_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Oneframe;
+asn_struct_free_f X2N_Oneframe_free;
+asn_struct_print_f X2N_Oneframe_print;
+asn_constr_check_f X2N_Oneframe_constraint;
+ber_type_decoder_f X2N_Oneframe_decode_ber;
+der_type_encoder_f X2N_Oneframe_encode_der;
+xer_type_decoder_f X2N_Oneframe_decode_xer;
+xer_type_encoder_f X2N_Oneframe_encode_xer;
+per_type_decoder_f X2N_Oneframe_decode_uper;
+per_type_encoder_f X2N_Oneframe_encode_uper;
+per_type_decoder_f X2N_Oneframe_decode_aper;
+per_type_encoder_f X2N_Oneframe_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Oneframe_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PA-Values.c b/asn1c_defs/X2N_PA-Values.c
new file mode 100644
index 0000000..4857b0d
--- /dev/null
+++ b/asn1c_defs/X2N_PA-Values.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PA-Values.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PA_Values_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  7 }	/* (0..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_PA_Values_value2enum_1[] = {
+	{ 0,	4,	"dB-6" },
+	{ 1,	9,	"dB-4dot77" },
+	{ 2,	4,	"dB-3" },
+	{ 3,	9,	"dB-1dot77" },
+	{ 4,	3,	"dB0" },
+	{ 5,	3,	"dB1" },
+	{ 6,	3,	"dB2" },
+	{ 7,	3,	"dB3" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_PA_Values_enum2value_1[] = {
+	3,	/* dB-1dot77(3) */
+	2,	/* dB-3(2) */
+	1,	/* dB-4dot77(1) */
+	0,	/* dB-6(0) */
+	4,	/* dB0(4) */
+	5,	/* dB1(5) */
+	6,	/* dB2(6) */
+	7	/* dB3(7) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_PA_Values_specs_1 = {
+	asn_MAP_X2N_PA_Values_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_PA_Values_enum2value_1,	/* N => "tag"; sorted by N */
+	8,	/* Number of elements in the maps */
+	9,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PA_Values_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PA_Values = {
+	"PA-Values",
+	"PA-Values",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_PA_Values_tags_1,
+	sizeof(asn_DEF_X2N_PA_Values_tags_1)
+		/sizeof(asn_DEF_X2N_PA_Values_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PA_Values_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PA_Values_tags_1)
+		/sizeof(asn_DEF_X2N_PA_Values_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PA_Values_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_PA_Values_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PA-Values.h b/asn1c_defs/X2N_PA-Values.h
new file mode 100644
index 0000000..2ad7a5a
--- /dev/null
+++ b/asn1c_defs/X2N_PA-Values.h
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PA_Values_H_
+#define	_X2N_PA_Values_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PA_Values {
+	X2N_PA_Values_dB_6	= 0,
+	X2N_PA_Values_dB_4dot77	= 1,
+	X2N_PA_Values_dB_3	= 2,
+	X2N_PA_Values_dB_1dot77	= 3,
+	X2N_PA_Values_dB0	= 4,
+	X2N_PA_Values_dB1	= 5,
+	X2N_PA_Values_dB2	= 6,
+	X2N_PA_Values_dB3	= 7
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_PA_Values;
+
+/* X2N_PA-Values */
+typedef long	 X2N_PA_Values_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PA_Values_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PA_Values;
+extern const asn_INTEGER_specifics_t asn_SPC_PA_Values_specs_1;
+asn_struct_free_f PA_Values_free;
+asn_struct_print_f PA_Values_print;
+asn_constr_check_f PA_Values_constraint;
+ber_type_decoder_f PA_Values_decode_ber;
+der_type_encoder_f PA_Values_encode_der;
+xer_type_decoder_f PA_Values_decode_xer;
+xer_type_encoder_f PA_Values_encode_xer;
+per_type_decoder_f PA_Values_decode_uper;
+per_type_encoder_f PA_Values_encode_uper;
+per_type_decoder_f PA_Values_decode_aper;
+per_type_encoder_f PA_Values_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PA_Values_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PCI.c b/asn1c_defs/X2N_PCI.c
new file mode 100644
index 0000000..561c48c
--- /dev/null
+++ b/asn1c_defs/X2N_PCI.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PCI.h"
+
+int
+X2N_PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 503)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PCI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  0,  503 }	/* (0..503,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PCI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PCI = {
+	"PCI",
+	"PCI",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_PCI_tags_1,
+	sizeof(asn_DEF_X2N_PCI_tags_1)
+		/sizeof(asn_DEF_X2N_PCI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PCI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PCI_tags_1)
+		/sizeof(asn_DEF_X2N_PCI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PCI_constr_1, X2N_PCI_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_PCI.h b/asn1c_defs/X2N_PCI.h
new file mode 100644
index 0000000..153e544
--- /dev/null
+++ b/asn1c_defs/X2N_PCI.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PCI_H_
+#define	_X2N_PCI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PCI */
+typedef long	 X2N_PCI_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PCI_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PCI;
+asn_struct_free_f X2N_PCI_free;
+asn_struct_print_f X2N_PCI_print;
+asn_constr_check_f X2N_PCI_constraint;
+ber_type_decoder_f X2N_PCI_decode_ber;
+der_type_encoder_f X2N_PCI_encode_der;
+xer_type_decoder_f X2N_PCI_decode_xer;
+xer_type_encoder_f X2N_PCI_encode_xer;
+per_type_decoder_f X2N_PCI_decode_uper;
+per_type_encoder_f X2N_PCI_encode_uper;
+per_type_decoder_f X2N_PCI_decode_aper;
+per_type_encoder_f X2N_PCI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PCI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PDCP-SN.c b/asn1c_defs/X2N_PDCP-SN.c
new file mode 100644
index 0000000..78caea4
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SN.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PDCP-SN.h"
+
+int
+X2N_PDCP_SN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PDCP_SN_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PDCP_SN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SN = {
+	"PDCP-SN",
+	"PDCP-SN",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_PDCP_SN_tags_1,
+	sizeof(asn_DEF_X2N_PDCP_SN_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SN_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PDCP_SN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PDCP_SN_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SN_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PDCP_SN_constr_1, X2N_PDCP_SN_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_PDCP-SN.h b/asn1c_defs/X2N_PDCP-SN.h
new file mode 100644
index 0000000..fa7b2f9
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SN.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PDCP_SN_H_
+#define	_X2N_PDCP_SN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PDCP-SN */
+typedef long	 X2N_PDCP_SN_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PDCP_SN_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SN;
+asn_struct_free_f X2N_PDCP_SN_free;
+asn_struct_print_f X2N_PDCP_SN_print;
+asn_constr_check_f X2N_PDCP_SN_constraint;
+ber_type_decoder_f X2N_PDCP_SN_decode_ber;
+der_type_encoder_f X2N_PDCP_SN_encode_der;
+xer_type_decoder_f X2N_PDCP_SN_decode_xer;
+xer_type_encoder_f X2N_PDCP_SN_encode_xer;
+per_type_decoder_f X2N_PDCP_SN_decode_uper;
+per_type_encoder_f X2N_PDCP_SN_encode_uper;
+per_type_decoder_f X2N_PDCP_SN_decode_aper;
+per_type_encoder_f X2N_PDCP_SN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PDCP_SN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PDCP-SNExtended.c b/asn1c_defs/X2N_PDCP-SNExtended.c
new file mode 100644
index 0000000..2064185
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SNExtended.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PDCP-SNExtended.h"
+
+int
+X2N_PDCP_SNExtended_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 32767)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PDCP_SNExtended_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 15,  15,  0,  32767 }	/* (0..32767) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PDCP_SNExtended_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SNExtended = {
+	"PDCP-SNExtended",
+	"PDCP-SNExtended",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_PDCP_SNExtended_tags_1,
+	sizeof(asn_DEF_X2N_PDCP_SNExtended_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SNExtended_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PDCP_SNExtended_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PDCP_SNExtended_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SNExtended_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PDCP_SNExtended_constr_1, X2N_PDCP_SNExtended_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_PDCP-SNExtended.h b/asn1c_defs/X2N_PDCP-SNExtended.h
new file mode 100644
index 0000000..50dcd59
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SNExtended.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PDCP_SNExtended_H_
+#define	_X2N_PDCP_SNExtended_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PDCP-SNExtended */
+typedef long	 X2N_PDCP_SNExtended_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PDCP_SNExtended_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SNExtended;
+asn_struct_free_f X2N_PDCP_SNExtended_free;
+asn_struct_print_f X2N_PDCP_SNExtended_print;
+asn_constr_check_f X2N_PDCP_SNExtended_constraint;
+ber_type_decoder_f X2N_PDCP_SNExtended_decode_ber;
+der_type_encoder_f X2N_PDCP_SNExtended_encode_der;
+xer_type_decoder_f X2N_PDCP_SNExtended_decode_xer;
+xer_type_encoder_f X2N_PDCP_SNExtended_encode_xer;
+per_type_decoder_f X2N_PDCP_SNExtended_decode_uper;
+per_type_encoder_f X2N_PDCP_SNExtended_encode_uper;
+per_type_decoder_f X2N_PDCP_SNExtended_decode_aper;
+per_type_encoder_f X2N_PDCP_SNExtended_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PDCP_SNExtended_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PDCP-SNlength18.c b/asn1c_defs/X2N_PDCP-SNlength18.c
new file mode 100644
index 0000000..dc22b1c
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SNlength18.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PDCP-SNlength18.h"
+
+int
+X2N_PDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 262143)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PDCP_SNlength18_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 18, -1,  0,  262143 }	/* (0..262143) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PDCP_SNlength18_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SNlength18 = {
+	"PDCP-SNlength18",
+	"PDCP-SNlength18",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_PDCP_SNlength18_tags_1,
+	sizeof(asn_DEF_X2N_PDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SNlength18_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PDCP_SNlength18_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_PDCP_SNlength18_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PDCP_SNlength18_constr_1, X2N_PDCP_SNlength18_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_PDCP-SNlength18.h b/asn1c_defs/X2N_PDCP-SNlength18.h
new file mode 100644
index 0000000..85f21a4
--- /dev/null
+++ b/asn1c_defs/X2N_PDCP-SNlength18.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PDCP_SNlength18_H_
+#define	_X2N_PDCP_SNlength18_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PDCP-SNlength18 */
+typedef long	 X2N_PDCP_SNlength18_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PDCP_SNlength18_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PDCP_SNlength18;
+asn_struct_free_f X2N_PDCP_SNlength18_free;
+asn_struct_print_f X2N_PDCP_SNlength18_print;
+asn_constr_check_f X2N_PDCP_SNlength18_constraint;
+ber_type_decoder_f X2N_PDCP_SNlength18_decode_ber;
+der_type_encoder_f X2N_PDCP_SNlength18_encode_der;
+xer_type_decoder_f X2N_PDCP_SNlength18_decode_xer;
+xer_type_encoder_f X2N_PDCP_SNlength18_encode_xer;
+per_type_decoder_f X2N_PDCP_SNlength18_decode_uper;
+per_type_encoder_f X2N_PDCP_SNlength18_encode_uper;
+per_type_decoder_f X2N_PDCP_SNlength18_decode_aper;
+per_type_encoder_f X2N_PDCP_SNlength18_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PDCP_SNlength18_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PDCPChangeIndication.c b/asn1c_defs/X2N_PDCPChangeIndication.c
new file mode 100644
index 0000000..4774b30
--- /dev/null
+++ b/asn1c_defs/X2N_PDCPChangeIndication.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PDCPChangeIndication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_PDCPChangeIndication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_PDCPChangeIndication_value2enum_1[] = {
+	{ 0,	22,	"s-KgNB-update-required" },
+	{ 1,	27,	"pDCP-data-recovery-required" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_PDCPChangeIndication_enum2value_1[] = {
+	1,	/* pDCP-data-recovery-required(1) */
+	0	/* s-KgNB-update-required(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_PDCPChangeIndication_specs_1 = {
+	asn_MAP_X2N_PDCPChangeIndication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_PDCPChangeIndication_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PDCPChangeIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PDCPChangeIndication = {
+	"PDCPChangeIndication",
+	"PDCPChangeIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_PDCPChangeIndication_tags_1,
+	sizeof(asn_DEF_X2N_PDCPChangeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_PDCPChangeIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PDCPChangeIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PDCPChangeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_PDCPChangeIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PDCPChangeIndication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_PDCPChangeIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PDCPChangeIndication.h b/asn1c_defs/X2N_PDCPChangeIndication.h
new file mode 100644
index 0000000..de1b830
--- /dev/null
+++ b/asn1c_defs/X2N_PDCPChangeIndication.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PDCPChangeIndication_H_
+#define	_X2N_PDCPChangeIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PDCPChangeIndication {
+	X2N_PDCPChangeIndication_s_KgNB_update_required	= 0,
+	X2N_PDCPChangeIndication_pDCP_data_recovery_required	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_PDCPChangeIndication;
+
+/* X2N_PDCPChangeIndication */
+typedef long	 X2N_PDCPChangeIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PDCPChangeIndication;
+asn_struct_free_f X2N_PDCPChangeIndication_free;
+asn_struct_print_f X2N_PDCPChangeIndication_print;
+asn_constr_check_f X2N_PDCPChangeIndication_constraint;
+ber_type_decoder_f X2N_PDCPChangeIndication_decode_ber;
+der_type_encoder_f X2N_PDCPChangeIndication_encode_der;
+xer_type_decoder_f X2N_PDCPChangeIndication_decode_xer;
+xer_type_encoder_f X2N_PDCPChangeIndication_encode_xer;
+per_type_decoder_f X2N_PDCPChangeIndication_decode_uper;
+per_type_encoder_f X2N_PDCPChangeIndication_encode_uper;
+per_type_decoder_f X2N_PDCPChangeIndication_decode_aper;
+per_type_encoder_f X2N_PDCPChangeIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PDCPChangeIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PDCPSnLength.c b/asn1c_defs/X2N_PDCPSnLength.c
new file mode 100644
index 0000000..f166990
--- /dev/null
+++ b/asn1c_defs/X2N_PDCPSnLength.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PDCPSnLength.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_PDCPSnLength_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_PDCPSnLength_value2enum_1[] = {
+	{ 0,	11,	"twelve-bits" },
+	{ 1,	13,	"eighteen-bits" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_PDCPSnLength_enum2value_1[] = {
+	1,	/* eighteen-bits(1) */
+	0	/* twelve-bits(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_PDCPSnLength_specs_1 = {
+	asn_MAP_X2N_PDCPSnLength_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_PDCPSnLength_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PDCPSnLength_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PDCPSnLength = {
+	"PDCPSnLength",
+	"PDCPSnLength",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_PDCPSnLength_tags_1,
+	sizeof(asn_DEF_X2N_PDCPSnLength_tags_1)
+		/sizeof(asn_DEF_X2N_PDCPSnLength_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PDCPSnLength_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PDCPSnLength_tags_1)
+		/sizeof(asn_DEF_X2N_PDCPSnLength_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PDCPSnLength_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_PDCPSnLength_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PDCPSnLength.h b/asn1c_defs/X2N_PDCPSnLength.h
new file mode 100644
index 0000000..04f595e
--- /dev/null
+++ b/asn1c_defs/X2N_PDCPSnLength.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PDCPSnLength_H_
+#define	_X2N_PDCPSnLength_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PDCPSnLength {
+	X2N_PDCPSnLength_twelve_bits	= 0,
+	X2N_PDCPSnLength_eighteen_bits	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_PDCPSnLength;
+
+/* X2N_PDCPSnLength */
+typedef long	 X2N_PDCPSnLength_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PDCPSnLength;
+asn_struct_free_f X2N_PDCPSnLength_free;
+asn_struct_print_f X2N_PDCPSnLength_print;
+asn_constr_check_f X2N_PDCPSnLength_constraint;
+ber_type_decoder_f X2N_PDCPSnLength_decode_ber;
+der_type_encoder_f X2N_PDCPSnLength_encode_der;
+xer_type_decoder_f X2N_PDCPSnLength_decode_xer;
+xer_type_encoder_f X2N_PDCPSnLength_encode_xer;
+per_type_decoder_f X2N_PDCPSnLength_decode_uper;
+per_type_encoder_f X2N_PDCPSnLength_encode_uper;
+per_type_decoder_f X2N_PDCPSnLength_decode_aper;
+per_type_encoder_f X2N_PDCPSnLength_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PDCPSnLength_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PLMN-Identity.c b/asn1c_defs/X2N_PLMN-Identity.c
new file mode 100644
index 0000000..e3a1fd3
--- /dev/null
+++ b/asn1c_defs/X2N_PLMN-Identity.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PLMN-Identity.h"
+
+int
+X2N_PLMN_Identity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PLMN_Identity_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PLMN_Identity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PLMN_Identity = {
+	"PLMN-Identity",
+	"PLMN-Identity",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_PLMN_Identity_tags_1,
+	sizeof(asn_DEF_X2N_PLMN_Identity_tags_1)
+		/sizeof(asn_DEF_X2N_PLMN_Identity_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PLMN_Identity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PLMN_Identity_tags_1)
+		/sizeof(asn_DEF_X2N_PLMN_Identity_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PLMN_Identity_constr_1, X2N_PLMN_Identity_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PLMN-Identity.h b/asn1c_defs/X2N_PLMN-Identity.h
new file mode 100644
index 0000000..4daad5f
--- /dev/null
+++ b/asn1c_defs/X2N_PLMN-Identity.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PLMN_Identity_H_
+#define	_X2N_PLMN_Identity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PLMN-Identity */
+typedef OCTET_STRING_t	 X2N_PLMN_Identity_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PLMN_Identity_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PLMN_Identity;
+asn_struct_free_f X2N_PLMN_Identity_free;
+asn_struct_print_f X2N_PLMN_Identity_print;
+asn_constr_check_f X2N_PLMN_Identity_constraint;
+ber_type_decoder_f X2N_PLMN_Identity_decode_ber;
+der_type_encoder_f X2N_PLMN_Identity_encode_der;
+xer_type_decoder_f X2N_PLMN_Identity_decode_xer;
+xer_type_encoder_f X2N_PLMN_Identity_encode_xer;
+per_type_decoder_f X2N_PLMN_Identity_decode_uper;
+per_type_encoder_f X2N_PLMN_Identity_encode_uper;
+per_type_decoder_f X2N_PLMN_Identity_decode_aper;
+per_type_encoder_f X2N_PLMN_Identity_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PLMN_Identity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PLMNAreaBasedQMC.c b/asn1c_defs/X2N_PLMNAreaBasedQMC.c
new file mode 100644
index 0000000..84d7cc1
--- /dev/null
+++ b/asn1c_defs/X2N_PLMNAreaBasedQMC.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PLMNAreaBasedQMC.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_PLMNAreaBasedQMC_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PLMNAreaBasedQMC, plmnListforQMC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMNListforQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"plmnListforQMC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_PLMNAreaBasedQMC, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P178,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_PLMNAreaBasedQMC_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_PLMNAreaBasedQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PLMNAreaBasedQMC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmnListforQMC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_PLMNAreaBasedQMC_specs_1 = {
+	sizeof(struct X2N_PLMNAreaBasedQMC),
+	offsetof(struct X2N_PLMNAreaBasedQMC, _asn_ctx),
+	asn_MAP_X2N_PLMNAreaBasedQMC_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_PLMNAreaBasedQMC_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PLMNAreaBasedQMC = {
+	"PLMNAreaBasedQMC",
+	"PLMNAreaBasedQMC",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PLMNAreaBasedQMC_tags_1,
+	sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PLMNAreaBasedQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PLMNAreaBasedQMC_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_PLMNAreaBasedQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PLMNAreaBasedQMC.h b/asn1c_defs/X2N_PLMNAreaBasedQMC.h
new file mode 100644
index 0000000..b9e42f6
--- /dev/null
+++ b/asn1c_defs/X2N_PLMNAreaBasedQMC.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PLMNAreaBasedQMC_H_
+#define	_X2N_PLMNAreaBasedQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMNListforQMC.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_PLMNAreaBasedQMC */
+typedef struct X2N_PLMNAreaBasedQMC {
+	X2N_PLMNListforQMC_t	 plmnListforQMC;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PLMNAreaBasedQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PLMNAreaBasedQMC;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_PLMNAreaBasedQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PLMNAreaBasedQMC_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PLMNAreaBasedQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PLMNListforQMC.c b/asn1c_defs/X2N_PLMNListforQMC.c
new file mode 100644
index 0000000..fbdf070
--- /dev/null
+++ b/asn1c_defs/X2N_PLMNListforQMC.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PLMNListforQMC.h"
+
+asn_per_constraints_t asn_PER_type_X2N_PLMNListforQMC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_PLMNListforQMC_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PLMNListforQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_PLMNListforQMC_specs_1 = {
+	sizeof(struct X2N_PLMNListforQMC),
+	offsetof(struct X2N_PLMNListforQMC, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PLMNListforQMC = {
+	"PLMNListforQMC",
+	"PLMNListforQMC",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_PLMNListforQMC_tags_1,
+	sizeof(asn_DEF_X2N_PLMNListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_PLMNListforQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PLMNListforQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PLMNListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_PLMNListforQMC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PLMNListforQMC_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_PLMNListforQMC_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_PLMNListforQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PLMNListforQMC.h b/asn1c_defs/X2N_PLMNListforQMC.h
new file mode 100644
index 0000000..f3f0f73
--- /dev/null
+++ b/asn1c_defs/X2N_PLMNListforQMC.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PLMNListforQMC_H_
+#define	_X2N_PLMNListforQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PLMNListforQMC */
+typedef struct X2N_PLMNListforQMC {
+	A_SEQUENCE_OF(X2N_PLMN_Identity_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PLMNListforQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PLMNListforQMC;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_PLMNListforQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PLMNListforQMC_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_PLMNListforQMC_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PLMNListforQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PRACH-Configuration.c b/asn1c_defs/X2N_PRACH-Configuration.c
new file mode 100644
index 0000000..48fe93e
--- /dev/null
+++ b/asn1c_defs/X2N_PRACH-Configuration.c
@@ -0,0 +1,223 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PRACH-Configuration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_rootSequenceIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 837)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_zeroCorrelationIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_prach_FreqOffset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 94)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_prach_ConfigIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 63)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_rootSequenceIndex_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  837 }	/* (0..837) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_zeroCorrelationIndex_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 4,  4,  0,  15 }	/* (0..15) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_prach_FreqOffset_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  94 }	/* (0..94) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_prach_ConfigIndex_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6,  0,  63 }	/* (0..63) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_PRACH_Configuration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration, rootSequenceIndex),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_rootSequenceIndex_constr_2,  memb_X2N_rootSequenceIndex_constraint_1 },
+		0, 0, /* No default value */
+		"rootSequenceIndex"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration, zeroCorrelationIndex),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_zeroCorrelationIndex_constr_3,  memb_X2N_zeroCorrelationIndex_constraint_1 },
+		0, 0, /* No default value */
+		"zeroCorrelationIndex"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration, highSpeedFlag),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BOOLEAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"highSpeedFlag"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration, prach_FreqOffset),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_prach_FreqOffset_constr_5,  memb_X2N_prach_FreqOffset_constraint_1 },
+		0, 0, /* No default value */
+		"prach-FreqOffset"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_PRACH_Configuration, prach_ConfigIndex),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_prach_ConfigIndex_constr_6,  memb_X2N_prach_ConfigIndex_constraint_1 },
+		0, 0, /* No default value */
+		"prach-ConfigIndex"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_PRACH_Configuration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P177,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_PRACH_Configuration_oms_1[] = { 4, 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_PRACH_Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PRACH_Configuration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rootSequenceIndex */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* zeroCorrelationIndex */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* highSpeedFlag */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* prach-FreqOffset */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* prach-ConfigIndex */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_PRACH_Configuration_specs_1 = {
+	sizeof(struct X2N_PRACH_Configuration),
+	offsetof(struct X2N_PRACH_Configuration, _asn_ctx),
+	asn_MAP_X2N_PRACH_Configuration_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_PRACH_Configuration_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PRACH_Configuration = {
+	"PRACH-Configuration",
+	"PRACH-Configuration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PRACH_Configuration_tags_1,
+	sizeof(asn_DEF_X2N_PRACH_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_PRACH_Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PRACH_Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PRACH_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_PRACH_Configuration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PRACH_Configuration_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_PRACH_Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PRACH-Configuration.h b/asn1c_defs/X2N_PRACH-Configuration.h
new file mode 100644
index 0000000..e09aad4
--- /dev/null
+++ b/asn1c_defs/X2N_PRACH-Configuration.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PRACH_Configuration_H_
+#define	_X2N_PRACH_Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <BOOLEAN.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_PRACH-Configuration */
+typedef struct X2N_PRACH_Configuration {
+	long	 rootSequenceIndex;
+	long	 zeroCorrelationIndex;
+	BOOLEAN_t	 highSpeedFlag;
+	long	 prach_FreqOffset;
+	long	*prach_ConfigIndex;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PRACH_Configuration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PRACH_Configuration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PRACH_Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Packet-LossRate.c b/asn1c_defs/X2N_Packet-LossRate.c
new file mode 100644
index 0000000..93859dd
--- /dev/null
+++ b/asn1c_defs/X2N_Packet-LossRate.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Packet-LossRate.h"
+
+int
+X2N_Packet_LossRate_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1000)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Packet_LossRate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  1000 }	/* (0..1000) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Packet_LossRate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Packet_LossRate = {
+	"Packet-LossRate",
+	"Packet-LossRate",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Packet_LossRate_tags_1,
+	sizeof(asn_DEF_X2N_Packet_LossRate_tags_1)
+		/sizeof(asn_DEF_X2N_Packet_LossRate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Packet_LossRate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Packet_LossRate_tags_1)
+		/sizeof(asn_DEF_X2N_Packet_LossRate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Packet_LossRate_constr_1, X2N_Packet_LossRate_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Packet-LossRate.h b/asn1c_defs/X2N_Packet-LossRate.h
new file mode 100644
index 0000000..7451093
--- /dev/null
+++ b/asn1c_defs/X2N_Packet-LossRate.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Packet_LossRate_H_
+#define	_X2N_Packet_LossRate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Packet-LossRate */
+typedef long	 X2N_Packet_LossRate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Packet_LossRate;
+asn_struct_free_f X2N_Packet_LossRate_free;
+asn_struct_print_f X2N_Packet_LossRate_print;
+asn_constr_check_f X2N_Packet_LossRate_constraint;
+ber_type_decoder_f X2N_Packet_LossRate_decode_ber;
+der_type_encoder_f X2N_Packet_LossRate_encode_der;
+xer_type_decoder_f X2N_Packet_LossRate_decode_xer;
+xer_type_encoder_f X2N_Packet_LossRate_encode_xer;
+per_type_decoder_f X2N_Packet_LossRate_decode_uper;
+per_type_encoder_f X2N_Packet_LossRate_encode_uper;
+per_type_decoder_f X2N_Packet_LossRate_decode_aper;
+per_type_encoder_f X2N_Packet_LossRate_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Packet_LossRate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PartialSuccessIndicator.c b/asn1c_defs/X2N_PartialSuccessIndicator.c
new file mode 100644
index 0000000..0c882a5
--- /dev/null
+++ b/asn1c_defs/X2N_PartialSuccessIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PartialSuccessIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_PartialSuccessIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_PartialSuccessIndicator_value2enum_1[] = {
+	{ 0,	23,	"partial-success-allowed" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_PartialSuccessIndicator_enum2value_1[] = {
+	0	/* partial-success-allowed(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_PartialSuccessIndicator_specs_1 = {
+	asn_MAP_X2N_PartialSuccessIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_PartialSuccessIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PartialSuccessIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PartialSuccessIndicator = {
+	"PartialSuccessIndicator",
+	"PartialSuccessIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_PartialSuccessIndicator_tags_1,
+	sizeof(asn_DEF_X2N_PartialSuccessIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_PartialSuccessIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PartialSuccessIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PartialSuccessIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_PartialSuccessIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PartialSuccessIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_PartialSuccessIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PartialSuccessIndicator.h b/asn1c_defs/X2N_PartialSuccessIndicator.h
new file mode 100644
index 0000000..0d909a6
--- /dev/null
+++ b/asn1c_defs/X2N_PartialSuccessIndicator.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PartialSuccessIndicator_H_
+#define	_X2N_PartialSuccessIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PartialSuccessIndicator {
+	X2N_PartialSuccessIndicator_partial_success_allowed	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_PartialSuccessIndicator;
+
+/* X2N_PartialSuccessIndicator */
+typedef long	 X2N_PartialSuccessIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PartialSuccessIndicator;
+asn_struct_free_f X2N_PartialSuccessIndicator_free;
+asn_struct_print_f X2N_PartialSuccessIndicator_print;
+asn_constr_check_f X2N_PartialSuccessIndicator_constraint;
+ber_type_decoder_f X2N_PartialSuccessIndicator_decode_ber;
+der_type_encoder_f X2N_PartialSuccessIndicator_encode_der;
+xer_type_decoder_f X2N_PartialSuccessIndicator_decode_xer;
+xer_type_encoder_f X2N_PartialSuccessIndicator_encode_xer;
+per_type_decoder_f X2N_PartialSuccessIndicator_decode_uper;
+per_type_encoder_f X2N_PartialSuccessIndicator_encode_uper;
+per_type_decoder_f X2N_PartialSuccessIndicator_decode_aper;
+per_type_encoder_f X2N_PartialSuccessIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PartialSuccessIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PedestrianUE.c b/asn1c_defs/X2N_PedestrianUE.c
new file mode 100644
index 0000000..682fd79
--- /dev/null
+++ b/asn1c_defs/X2N_PedestrianUE.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PedestrianUE.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PedestrianUE_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_PedestrianUE_value2enum_1[] = {
+	{ 0,	10,	"authorized" },
+	{ 1,	14,	"not-authorized" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_PedestrianUE_enum2value_1[] = {
+	0,	/* authorized(0) */
+	1	/* not-authorized(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_PedestrianUE_specs_1 = {
+	asn_MAP_X2N_PedestrianUE_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_PedestrianUE_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PedestrianUE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PedestrianUE = {
+	"PedestrianUE",
+	"PedestrianUE",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_PedestrianUE_tags_1,
+	sizeof(asn_DEF_X2N_PedestrianUE_tags_1)
+		/sizeof(asn_DEF_X2N_PedestrianUE_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PedestrianUE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PedestrianUE_tags_1)
+		/sizeof(asn_DEF_X2N_PedestrianUE_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PedestrianUE_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_PedestrianUE_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PedestrianUE.h b/asn1c_defs/X2N_PedestrianUE.h
new file mode 100644
index 0000000..d9c2e15
--- /dev/null
+++ b/asn1c_defs/X2N_PedestrianUE.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PedestrianUE_H_
+#define	_X2N_PedestrianUE_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PedestrianUE {
+	X2N_PedestrianUE_authorized	= 0,
+	X2N_PedestrianUE_not_authorized	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_PedestrianUE;
+
+/* X2N_PedestrianUE */
+typedef long	 X2N_PedestrianUE_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PedestrianUE_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PedestrianUE;
+extern const asn_INTEGER_specifics_t asn_SPC_PedestrianUE_specs_1;
+asn_struct_free_f PedestrianUE_free;
+asn_struct_print_f PedestrianUE_print;
+asn_constr_check_f PedestrianUE_constraint;
+ber_type_decoder_f PedestrianUE_decode_ber;
+der_type_encoder_f PedestrianUE_encode_der;
+xer_type_decoder_f PedestrianUE_decode_xer;
+xer_type_encoder_f PedestrianUE_encode_xer;
+per_type_decoder_f PedestrianUE_decode_uper;
+per_type_encoder_f PedestrianUE_encode_uper;
+per_type_decoder_f PedestrianUE_decode_aper;
+per_type_encoder_f PedestrianUE_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PedestrianUE_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Port-Number.c b/asn1c_defs/X2N_Port-Number.c
new file mode 100644
index 0000000..f02e90b
--- /dev/null
+++ b/asn1c_defs/X2N_Port-Number.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Port-Number.h"
+
+int
+X2N_Port_Number_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Port_Number_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Port_Number_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Port_Number = {
+	"Port-Number",
+	"Port-Number",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_Port_Number_tags_1,
+	sizeof(asn_DEF_X2N_Port_Number_tags_1)
+		/sizeof(asn_DEF_X2N_Port_Number_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Port_Number_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Port_Number_tags_1)
+		/sizeof(asn_DEF_X2N_Port_Number_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Port_Number_constr_1, X2N_Port_Number_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Port-Number.h b/asn1c_defs/X2N_Port-Number.h
new file mode 100644
index 0000000..b44284d
--- /dev/null
+++ b/asn1c_defs/X2N_Port-Number.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Port_Number_H_
+#define	_X2N_Port_Number_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Port-Number */
+typedef OCTET_STRING_t	 X2N_Port_Number_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Port_Number_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Port_Number;
+asn_struct_free_f X2N_Port_Number_free;
+asn_struct_print_f X2N_Port_Number_print;
+asn_constr_check_f X2N_Port_Number_constraint;
+ber_type_decoder_f X2N_Port_Number_decode_ber;
+der_type_encoder_f X2N_Port_Number_encode_der;
+xer_type_decoder_f X2N_Port_Number_decode_xer;
+xer_type_encoder_f X2N_Port_Number_encode_xer;
+per_type_decoder_f X2N_Port_Number_decode_uper;
+per_type_encoder_f X2N_Port_Number_encode_uper;
+per_type_decoder_f X2N_Port_Number_decode_aper;
+per_type_encoder_f X2N_Port_Number_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Port_Number_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Pre-emptionCapability.c b/asn1c_defs/X2N_Pre-emptionCapability.c
new file mode 100644
index 0000000..f798c7c
--- /dev/null
+++ b/asn1c_defs/X2N_Pre-emptionCapability.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Pre-emptionCapability.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Pre_emptionCapability_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Pre_emptionCapability_value2enum_1[] = {
+	{ 0,	29,	"shall-not-trigger-pre-emption" },
+	{ 1,	23,	"may-trigger-pre-emption" }
+};
+static const unsigned int asn_MAP_X2N_Pre_emptionCapability_enum2value_1[] = {
+	1,	/* may-trigger-pre-emption(1) */
+	0	/* shall-not-trigger-pre-emption(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Pre_emptionCapability_specs_1 = {
+	asn_MAP_X2N_Pre_emptionCapability_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Pre_emptionCapability_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Pre_emptionCapability_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Pre_emptionCapability = {
+	"Pre-emptionCapability",
+	"Pre-emptionCapability",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Pre_emptionCapability_tags_1,
+	sizeof(asn_DEF_X2N_Pre_emptionCapability_tags_1)
+		/sizeof(asn_DEF_X2N_Pre_emptionCapability_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Pre_emptionCapability_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Pre_emptionCapability_tags_1)
+		/sizeof(asn_DEF_X2N_Pre_emptionCapability_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Pre_emptionCapability_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Pre_emptionCapability_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Pre-emptionCapability.h b/asn1c_defs/X2N_Pre-emptionCapability.h
new file mode 100644
index 0000000..52d7380
--- /dev/null
+++ b/asn1c_defs/X2N_Pre-emptionCapability.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Pre_emptionCapability_H_
+#define	_X2N_Pre_emptionCapability_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Pre_emptionCapability {
+	X2N_Pre_emptionCapability_shall_not_trigger_pre_emption	= 0,
+	X2N_Pre_emptionCapability_may_trigger_pre_emption	= 1
+} e_X2N_Pre_emptionCapability;
+
+/* X2N_Pre-emptionCapability */
+typedef long	 X2N_Pre_emptionCapability_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Pre_emptionCapability_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Pre_emptionCapability;
+extern const asn_INTEGER_specifics_t asn_SPC_Pre_emptionCapability_specs_1;
+asn_struct_free_f Pre_emptionCapability_free;
+asn_struct_print_f Pre_emptionCapability_print;
+asn_constr_check_f Pre_emptionCapability_constraint;
+ber_type_decoder_f Pre_emptionCapability_decode_ber;
+der_type_encoder_f Pre_emptionCapability_encode_der;
+xer_type_decoder_f Pre_emptionCapability_decode_xer;
+xer_type_encoder_f Pre_emptionCapability_encode_xer;
+per_type_decoder_f Pre_emptionCapability_decode_uper;
+per_type_encoder_f Pre_emptionCapability_encode_uper;
+per_type_decoder_f Pre_emptionCapability_decode_aper;
+per_type_encoder_f Pre_emptionCapability_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Pre_emptionCapability_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Pre-emptionVulnerability.c b/asn1c_defs/X2N_Pre-emptionVulnerability.c
new file mode 100644
index 0000000..d673cbd
--- /dev/null
+++ b/asn1c_defs/X2N_Pre-emptionVulnerability.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Pre-emptionVulnerability.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Pre_emptionVulnerability_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Pre_emptionVulnerability_value2enum_1[] = {
+	{ 0,	16,	"not-pre-emptable" },
+	{ 1,	12,	"pre-emptable" }
+};
+static const unsigned int asn_MAP_X2N_Pre_emptionVulnerability_enum2value_1[] = {
+	0,	/* not-pre-emptable(0) */
+	1	/* pre-emptable(1) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Pre_emptionVulnerability_specs_1 = {
+	asn_MAP_X2N_Pre_emptionVulnerability_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Pre_emptionVulnerability_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Pre_emptionVulnerability_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Pre_emptionVulnerability = {
+	"Pre-emptionVulnerability",
+	"Pre-emptionVulnerability",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Pre_emptionVulnerability_tags_1,
+	sizeof(asn_DEF_X2N_Pre_emptionVulnerability_tags_1)
+		/sizeof(asn_DEF_X2N_Pre_emptionVulnerability_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Pre_emptionVulnerability_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Pre_emptionVulnerability_tags_1)
+		/sizeof(asn_DEF_X2N_Pre_emptionVulnerability_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Pre_emptionVulnerability_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Pre_emptionVulnerability_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Pre-emptionVulnerability.h b/asn1c_defs/X2N_Pre-emptionVulnerability.h
new file mode 100644
index 0000000..8c7c4b6
--- /dev/null
+++ b/asn1c_defs/X2N_Pre-emptionVulnerability.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Pre_emptionVulnerability_H_
+#define	_X2N_Pre_emptionVulnerability_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Pre_emptionVulnerability {
+	X2N_Pre_emptionVulnerability_not_pre_emptable	= 0,
+	X2N_Pre_emptionVulnerability_pre_emptable	= 1
+} e_X2N_Pre_emptionVulnerability;
+
+/* X2N_Pre-emptionVulnerability */
+typedef long	 X2N_Pre_emptionVulnerability_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Pre_emptionVulnerability_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Pre_emptionVulnerability;
+extern const asn_INTEGER_specifics_t asn_SPC_Pre_emptionVulnerability_specs_1;
+asn_struct_free_f Pre_emptionVulnerability_free;
+asn_struct_print_f Pre_emptionVulnerability_print;
+asn_constr_check_f Pre_emptionVulnerability_constraint;
+ber_type_decoder_f Pre_emptionVulnerability_decode_ber;
+der_type_encoder_f Pre_emptionVulnerability_encode_der;
+xer_type_decoder_f Pre_emptionVulnerability_decode_xer;
+xer_type_encoder_f Pre_emptionVulnerability_encode_xer;
+per_type_decoder_f Pre_emptionVulnerability_decode_uper;
+per_type_encoder_f Pre_emptionVulnerability_encode_uper;
+per_type_decoder_f Pre_emptionVulnerability_decode_aper;
+per_type_encoder_f Pre_emptionVulnerability_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Pre_emptionVulnerability_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Presence.c b/asn1c_defs/X2N_Presence.c
new file mode 100644
index 0000000..bfdc9e8
--- /dev/null
+++ b/asn1c_defs/X2N_Presence.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Presence.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Presence_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Presence_value2enum_1[] = {
+	{ 0,	8,	"optional" },
+	{ 1,	11,	"conditional" },
+	{ 2,	9,	"mandatory" }
+};
+static const unsigned int asn_MAP_X2N_Presence_enum2value_1[] = {
+	1,	/* conditional(1) */
+	2,	/* mandatory(2) */
+	0	/* optional(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Presence_specs_1 = {
+	asn_MAP_X2N_Presence_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Presence_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Presence_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Presence = {
+	"Presence",
+	"Presence",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Presence_tags_1,
+	sizeof(asn_DEF_X2N_Presence_tags_1)
+		/sizeof(asn_DEF_X2N_Presence_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Presence_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Presence_tags_1)
+		/sizeof(asn_DEF_X2N_Presence_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Presence_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Presence_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Presence.h b/asn1c_defs/X2N_Presence.h
new file mode 100644
index 0000000..2c0a152
--- /dev/null
+++ b/asn1c_defs/X2N_Presence.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Presence_H_
+#define	_X2N_Presence_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Presence {
+	X2N_Presence_optional	= 0,
+	X2N_Presence_conditional	= 1,
+	X2N_Presence_mandatory	= 2
+} e_X2N_Presence;
+
+/* X2N_Presence */
+typedef long	 X2N_Presence_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Presence_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Presence;
+extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1;
+asn_struct_free_f Presence_free;
+asn_struct_print_f Presence_print;
+asn_constr_check_f Presence_constraint;
+ber_type_decoder_f Presence_decode_ber;
+der_type_encoder_f Presence_encode_der;
+xer_type_decoder_f Presence_decode_xer;
+xer_type_encoder_f Presence_encode_xer;
+per_type_decoder_f Presence_decode_uper;
+per_type_encoder_f Presence_encode_uper;
+per_type_decoder_f Presence_decode_aper;
+per_type_encoder_f Presence_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Presence_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PriorityLevel.c b/asn1c_defs/X2N_PriorityLevel.c
new file mode 100644
index 0000000..626ede5
--- /dev/null
+++ b/asn1c_defs/X2N_PriorityLevel.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PriorityLevel.h"
+
+int
+X2N_PriorityLevel_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_PriorityLevel_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 4,  4,  0,  15 }	/* (0..15) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PriorityLevel_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PriorityLevel = {
+	"PriorityLevel",
+	"PriorityLevel",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_PriorityLevel_tags_1,
+	sizeof(asn_DEF_X2N_PriorityLevel_tags_1)
+		/sizeof(asn_DEF_X2N_PriorityLevel_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PriorityLevel_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PriorityLevel_tags_1)
+		/sizeof(asn_DEF_X2N_PriorityLevel_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PriorityLevel_constr_1, X2N_PriorityLevel_constraint },
+	0, 0,	/* Defined elsewhere */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_PriorityLevel.h b/asn1c_defs/X2N_PriorityLevel.h
new file mode 100644
index 0000000..fd9188f
--- /dev/null
+++ b/asn1c_defs/X2N_PriorityLevel.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PriorityLevel_H_
+#define	_X2N_PriorityLevel_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PriorityLevel {
+	X2N_PriorityLevel_spare	= 0,
+	X2N_PriorityLevel_highest	= 1,
+	X2N_PriorityLevel_lowest	= 14,
+	X2N_PriorityLevel_no_priority	= 15
+} e_X2N_PriorityLevel;
+
+/* X2N_PriorityLevel */
+typedef long	 X2N_PriorityLevel_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_PriorityLevel_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PriorityLevel;
+asn_struct_free_f X2N_PriorityLevel_free;
+asn_struct_print_f X2N_PriorityLevel_print;
+asn_constr_check_f X2N_PriorityLevel_constraint;
+ber_type_decoder_f X2N_PriorityLevel_decode_ber;
+der_type_encoder_f X2N_PriorityLevel_encode_der;
+xer_type_decoder_f X2N_PriorityLevel_decode_xer;
+xer_type_encoder_f X2N_PriorityLevel_encode_xer;
+per_type_decoder_f X2N_PriorityLevel_decode_uper;
+per_type_encoder_f X2N_PriorityLevel_encode_uper;
+per_type_decoder_f X2N_PriorityLevel_decode_aper;
+per_type_encoder_f X2N_PriorityLevel_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PriorityLevel_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PrivateIE-Container.c b/asn1c_defs/X2N_PrivateIE-Container.c
new file mode 100644
index 0000000..6e847d9
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-Container.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PrivateIE-Container.h"
+
+#include "X2N_PrivateIE-Field.h"
+asn_per_constraints_t asn_PER_type_X2N_PrivateIE_Container_8247P0_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_PrivateIE_Container_8247P0_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_PrivateMessage_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_PrivateIE_Container_8247P0_specs_1 = {
+	sizeof(struct X2N_PrivateIE_Container_8247P0),
+	offsetof(struct X2N_PrivateIE_Container_8247P0, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PrivateIE_Container_8247P0 = {
+	"PrivateIE-Container",
+	"PrivateIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1,
+	sizeof(asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateIE_Container_8247P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_PrivateIE_Container_8247P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_PrivateIE_Container_8247P0_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_PrivateIE_Container_8247P0_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PrivateIE-Container.h b/asn1c_defs/X2N_PrivateIE-Container.h
new file mode 100644
index 0000000..c535382
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-Container.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PrivateIE_Container_H_
+#define	_X2N_PrivateIE_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_PrivateMessage_IEs;
+
+/* X2N_PrivateIE-Container */
+typedef struct X2N_PrivateIE_Container_8247P0 {
+	A_SEQUENCE_OF(struct X2N_PrivateMessage_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PrivateIE_Container_8247P0_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PrivateIE_Container_8247P0;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_PrivateIE_Container_8247P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PrivateIE_Container_8247P0_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_PrivateIE_Container_8247P0_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PrivateIE_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PrivateIE-Field.c b/asn1c_defs/X2N_PrivateIE-Field.c
new file mode 100644
index 0000000..7e51684
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-Field.c
@@ -0,0 +1,166 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PrivateIE-Field.h"
+
+static int
+memb_X2N_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_4 = {
+	sizeof(struct X2N_PrivateMessage_IEs__value),
+	offsetof(struct X2N_PrivateMessage_IEs__value, _asn_ctx),
+	offsetof(struct X2N_PrivateMessage_IEs__value, present),
+	sizeof(((struct X2N_PrivateMessage_IEs__value *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_PrivateMessage_IEs_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateMessage_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_PrivateIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_2,  memb_X2N_id_constraint_1 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateMessage_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateMessage_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_4,
+		0,
+		{ 0, &asn_PER_memb_X2N_value_constr_4,  memb_X2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PrivateMessage_IEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PrivateMessage_IEs_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_PrivateMessage_IEs_specs_1 = {
+	sizeof(struct X2N_PrivateMessage_IEs),
+	offsetof(struct X2N_PrivateMessage_IEs, _asn_ctx),
+	asn_MAP_X2N_PrivateMessage_IEs_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PrivateMessage_IEs = {
+	"PrivateMessage-IEs",
+	"PrivateMessage-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PrivateMessage_IEs_tags_1,
+	sizeof(asn_DEF_X2N_PrivateMessage_IEs_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateMessage_IEs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PrivateMessage_IEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PrivateMessage_IEs_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateMessage_IEs_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PrivateMessage_IEs_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_PrivateMessage_IEs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PrivateIE-Field.h b/asn1c_defs/X2N_PrivateIE-Field.h
new file mode 100644
index 0000000..e96d101
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-Field.h
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PrivateIE_Field_H_
+#define	_X2N_PrivateIE_Field_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PrivateIE-ID.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PrivateMessage_IEs__value_PR {
+	X2N_PrivateMessage_IEs__value_PR_NOTHING	/* No components present */
+	
+} X2N_PrivateMessage_IEs__value_PR;
+
+/* X2N_PrivateIE-Field */
+typedef struct X2N_PrivateMessage_IEs {
+	X2N_PrivateIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_PrivateMessage_IEs__value {
+		X2N_PrivateMessage_IEs__value_PR present;
+		union X2N_PrivateMessage_IEs__X2N_value_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PrivateMessage_IEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PrivateMessage_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_PrivateMessage_IEs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PrivateMessage_IEs_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PrivateIE_Field_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PrivateIE-ID.c b/asn1c_defs/X2N_PrivateIE-ID.c
new file mode 100644
index 0000000..efcf433
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-ID.c
@@ -0,0 +1,92 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PrivateIE-ID.h"
+
+static int
+memb_X2N_local_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_local_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_PrivateIE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 1,  1,  0,  1 }	/* (0..1) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_PrivateIE_ID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateIE_ID, choice.local),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_local_constr_2,  memb_X2N_local_constraint_1 },
+		0, 0, /* No default value */
+		"local"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateIE_ID, choice.global),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OBJECT_IDENTIFIER,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"global"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PrivateIE_ID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* local */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_PrivateIE_ID_specs_1 = {
+	sizeof(struct X2N_PrivateIE_ID),
+	offsetof(struct X2N_PrivateIE_ID, _asn_ctx),
+	offsetof(struct X2N_PrivateIE_ID, present),
+	sizeof(((struct X2N_PrivateIE_ID *)0)->present),
+	asn_MAP_X2N_PrivateIE_ID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PrivateIE_ID = {
+	"PrivateIE-ID",
+	"PrivateIE-ID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_PrivateIE_ID_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_PrivateIE_ID_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_PrivateIE_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PrivateIE-ID.h b/asn1c_defs/X2N_PrivateIE-ID.h
new file mode 100644
index 0000000..e5e11fb
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateIE-ID.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PrivateIE_ID_H_
+#define	_X2N_PrivateIE_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <OBJECT_IDENTIFIER.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_PrivateIE_ID_PR {
+	X2N_PrivateIE_ID_PR_NOTHING,	/* No components present */
+	X2N_PrivateIE_ID_PR_local,
+	X2N_PrivateIE_ID_PR_global
+} X2N_PrivateIE_ID_PR;
+
+/* X2N_PrivateIE-ID */
+typedef struct X2N_PrivateIE_ID {
+	X2N_PrivateIE_ID_PR present;
+	union X2N_PrivateIE_ID_u {
+		long	 local;
+		OBJECT_IDENTIFIER_t	 global;
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PrivateIE_ID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PrivateIE_ID;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_PrivateIE_ID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PrivateIE_ID_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_PrivateIE_ID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PrivateIE_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_PrivateMessage.c b/asn1c_defs/X2N_PrivateMessage.c
new file mode 100644
index 0000000..810c00f
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateMessage.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_PrivateMessage.h"
+
+asn_TYPE_member_t asn_MBR_X2N_PrivateMessage_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PrivateMessage, privateIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PrivateIE_Container_8247P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"privateIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PrivateMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PrivateMessage_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* privateIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_PrivateMessage_specs_1 = {
+	sizeof(struct X2N_PrivateMessage),
+	offsetof(struct X2N_PrivateMessage, _asn_ctx),
+	asn_MAP_X2N_PrivateMessage_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PrivateMessage = {
+	"PrivateMessage",
+	"PrivateMessage",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PrivateMessage_tags_1,
+	sizeof(asn_DEF_X2N_PrivateMessage_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateMessage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_PrivateMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_PrivateMessage_tags_1)
+		/sizeof(asn_DEF_X2N_PrivateMessage_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PrivateMessage_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_PrivateMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_PrivateMessage.h b/asn1c_defs/X2N_PrivateMessage.h
new file mode 100644
index 0000000..dbfa844
--- /dev/null
+++ b/asn1c_defs/X2N_PrivateMessage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_PrivateMessage_H_
+#define	_X2N_PrivateMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PrivateIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_PrivateMessage */
+typedef struct X2N_PrivateMessage {
+	X2N_PrivateIE_Container_8247P0_t	 privateIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PrivateMessage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PrivateMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_PrivateMessage_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_PrivateMessage_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_PrivateMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProSeAuthorized.c b/asn1c_defs/X2N_ProSeAuthorized.c
new file mode 100644
index 0000000..ac65319
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeAuthorized.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProSeAuthorized.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_ProSeAuthorized_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_ProSeAuthorized, proSeDirectDiscovery),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProSeDirectDiscovery,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"proSeDirectDiscovery"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ProSeAuthorized, proSeDirectCommunication),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProSeDirectCommunication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"proSeDirectCommunication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ProSeAuthorized, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P179,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ProSeAuthorized_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ProSeAuthorized_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProSeAuthorized_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* proSeDirectDiscovery */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* proSeDirectCommunication */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_ProSeAuthorized_specs_1 = {
+	sizeof(struct X2N_ProSeAuthorized),
+	offsetof(struct X2N_ProSeAuthorized, _asn_ctx),
+	asn_MAP_X2N_ProSeAuthorized_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ProSeAuthorized_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProSeAuthorized = {
+	"ProSeAuthorized",
+	"ProSeAuthorized",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProSeAuthorized_tags_1,
+	sizeof(asn_DEF_X2N_ProSeAuthorized_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeAuthorized_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProSeAuthorized_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProSeAuthorized_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeAuthorized_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProSeAuthorized_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProSeAuthorized_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProSeAuthorized.h b/asn1c_defs/X2N_ProSeAuthorized.h
new file mode 100644
index 0000000..8b06a6f
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeAuthorized.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProSeAuthorized_H_
+#define	_X2N_ProSeAuthorized_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProSeDirectDiscovery.h"
+#include "X2N_ProSeDirectCommunication.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ProSeAuthorized */
+typedef struct X2N_ProSeAuthorized {
+	X2N_ProSeDirectDiscovery_t	*proSeDirectDiscovery;	/* OPTIONAL */
+	X2N_ProSeDirectCommunication_t	*proSeDirectCommunication;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProSeAuthorized_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProSeAuthorized;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProSeAuthorized_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProSeDirectCommunication.c b/asn1c_defs/X2N_ProSeDirectCommunication.c
new file mode 100644
index 0000000..4286440
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeDirectCommunication.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProSeDirectCommunication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ProSeDirectCommunication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ProSeDirectCommunication_value2enum_1[] = {
+	{ 0,	10,	"authorized" },
+	{ 1,	14,	"not-authorized" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ProSeDirectCommunication_enum2value_1[] = {
+	0,	/* authorized(0) */
+	1	/* not-authorized(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ProSeDirectCommunication_specs_1 = {
+	asn_MAP_X2N_ProSeDirectCommunication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ProSeDirectCommunication_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProSeDirectCommunication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProSeDirectCommunication = {
+	"ProSeDirectCommunication",
+	"ProSeDirectCommunication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ProSeDirectCommunication_tags_1,
+	sizeof(asn_DEF_X2N_ProSeDirectCommunication_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeDirectCommunication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProSeDirectCommunication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProSeDirectCommunication_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeDirectCommunication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProSeDirectCommunication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ProSeDirectCommunication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProSeDirectCommunication.h b/asn1c_defs/X2N_ProSeDirectCommunication.h
new file mode 100644
index 0000000..b4a65a0
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeDirectCommunication.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProSeDirectCommunication_H_
+#define	_X2N_ProSeDirectCommunication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ProSeDirectCommunication {
+	X2N_ProSeDirectCommunication_authorized	= 0,
+	X2N_ProSeDirectCommunication_not_authorized	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ProSeDirectCommunication;
+
+/* X2N_ProSeDirectCommunication */
+typedef long	 X2N_ProSeDirectCommunication_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ProSeDirectCommunication_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProSeDirectCommunication;
+extern const asn_INTEGER_specifics_t asn_SPC_ProSeDirectCommunication_specs_1;
+asn_struct_free_f ProSeDirectCommunication_free;
+asn_struct_print_f ProSeDirectCommunication_print;
+asn_constr_check_f ProSeDirectCommunication_constraint;
+ber_type_decoder_f ProSeDirectCommunication_decode_ber;
+der_type_encoder_f ProSeDirectCommunication_encode_der;
+xer_type_decoder_f ProSeDirectCommunication_decode_xer;
+xer_type_encoder_f ProSeDirectCommunication_encode_xer;
+per_type_decoder_f ProSeDirectCommunication_decode_uper;
+per_type_encoder_f ProSeDirectCommunication_encode_uper;
+per_type_decoder_f ProSeDirectCommunication_decode_aper;
+per_type_encoder_f ProSeDirectCommunication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProSeDirectCommunication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProSeDirectDiscovery.c b/asn1c_defs/X2N_ProSeDirectDiscovery.c
new file mode 100644
index 0000000..d710e42
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeDirectDiscovery.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProSeDirectDiscovery.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ProSeDirectDiscovery_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ProSeDirectDiscovery_value2enum_1[] = {
+	{ 0,	10,	"authorized" },
+	{ 1,	14,	"not-authorized" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ProSeDirectDiscovery_enum2value_1[] = {
+	0,	/* authorized(0) */
+	1	/* not-authorized(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ProSeDirectDiscovery_specs_1 = {
+	asn_MAP_X2N_ProSeDirectDiscovery_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ProSeDirectDiscovery_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProSeDirectDiscovery_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProSeDirectDiscovery = {
+	"ProSeDirectDiscovery",
+	"ProSeDirectDiscovery",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ProSeDirectDiscovery_tags_1,
+	sizeof(asn_DEF_X2N_ProSeDirectDiscovery_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeDirectDiscovery_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProSeDirectDiscovery_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProSeDirectDiscovery_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeDirectDiscovery_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProSeDirectDiscovery_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ProSeDirectDiscovery_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProSeDirectDiscovery.h b/asn1c_defs/X2N_ProSeDirectDiscovery.h
new file mode 100644
index 0000000..3580f51
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeDirectDiscovery.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProSeDirectDiscovery_H_
+#define	_X2N_ProSeDirectDiscovery_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ProSeDirectDiscovery {
+	X2N_ProSeDirectDiscovery_authorized	= 0,
+	X2N_ProSeDirectDiscovery_not_authorized	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ProSeDirectDiscovery;
+
+/* X2N_ProSeDirectDiscovery */
+typedef long	 X2N_ProSeDirectDiscovery_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ProSeDirectDiscovery_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProSeDirectDiscovery;
+extern const asn_INTEGER_specifics_t asn_SPC_ProSeDirectDiscovery_specs_1;
+asn_struct_free_f ProSeDirectDiscovery_free;
+asn_struct_print_f ProSeDirectDiscovery_print;
+asn_constr_check_f ProSeDirectDiscovery_constraint;
+ber_type_decoder_f ProSeDirectDiscovery_decode_ber;
+der_type_encoder_f ProSeDirectDiscovery_encode_der;
+xer_type_decoder_f ProSeDirectDiscovery_decode_xer;
+xer_type_encoder_f ProSeDirectDiscovery_encode_xer;
+per_type_decoder_f ProSeDirectDiscovery_decode_uper;
+per_type_encoder_f ProSeDirectDiscovery_encode_uper;
+per_type_decoder_f ProSeDirectDiscovery_decode_aper;
+per_type_encoder_f ProSeDirectDiscovery_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProSeDirectDiscovery_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.c b/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.c
new file mode 100644
index 0000000..cb04829
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProSeUEtoNetworkRelaying.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ProSeUEtoNetworkRelaying_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ProSeUEtoNetworkRelaying_value2enum_1[] = {
+	{ 0,	10,	"authorized" },
+	{ 1,	14,	"not-authorized" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ProSeUEtoNetworkRelaying_enum2value_1[] = {
+	0,	/* authorized(0) */
+	1	/* not-authorized(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_ProSeUEtoNetworkRelaying_specs_1 = {
+	asn_MAP_X2N_ProSeUEtoNetworkRelaying_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ProSeUEtoNetworkRelaying_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProSeUEtoNetworkRelaying = {
+	"ProSeUEtoNetworkRelaying",
+	"ProSeUEtoNetworkRelaying",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1,
+	sizeof(asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1)
+		/sizeof(asn_DEF_X2N_ProSeUEtoNetworkRelaying_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProSeUEtoNetworkRelaying_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ProSeUEtoNetworkRelaying_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.h b/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.h
new file mode 100644
index 0000000..f2c18bc
--- /dev/null
+++ b/asn1c_defs/X2N_ProSeUEtoNetworkRelaying.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProSeUEtoNetworkRelaying_H_
+#define	_X2N_ProSeUEtoNetworkRelaying_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ProSeUEtoNetworkRelaying {
+	X2N_ProSeUEtoNetworkRelaying_authorized	= 0,
+	X2N_ProSeUEtoNetworkRelaying_not_authorized	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ProSeUEtoNetworkRelaying;
+
+/* X2N_ProSeUEtoNetworkRelaying */
+typedef long	 X2N_ProSeUEtoNetworkRelaying_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProSeUEtoNetworkRelaying;
+asn_struct_free_f X2N_ProSeUEtoNetworkRelaying_free;
+asn_struct_print_f X2N_ProSeUEtoNetworkRelaying_print;
+asn_constr_check_f X2N_ProSeUEtoNetworkRelaying_constraint;
+ber_type_decoder_f X2N_ProSeUEtoNetworkRelaying_decode_ber;
+der_type_encoder_f X2N_ProSeUEtoNetworkRelaying_encode_der;
+xer_type_decoder_f X2N_ProSeUEtoNetworkRelaying_decode_xer;
+xer_type_encoder_f X2N_ProSeUEtoNetworkRelaying_encode_xer;
+per_type_decoder_f X2N_ProSeUEtoNetworkRelaying_decode_uper;
+per_type_encoder_f X2N_ProSeUEtoNetworkRelaying_encode_uper;
+per_type_decoder_f X2N_ProSeUEtoNetworkRelaying_decode_aper;
+per_type_encoder_f X2N_ProSeUEtoNetworkRelaying_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProSeUEtoNetworkRelaying_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProcedureCode.c b/asn1c_defs/X2N_ProcedureCode.c
new file mode 100644
index 0000000..bfacf67
--- /dev/null
+++ b/asn1c_defs/X2N_ProcedureCode.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProcedureCode.h"
+
+int
+X2N_ProcedureCode_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ProcedureCode_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProcedureCode_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProcedureCode = {
+	"ProcedureCode",
+	"ProcedureCode",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_ProcedureCode_tags_1,
+	sizeof(asn_DEF_X2N_ProcedureCode_tags_1)
+		/sizeof(asn_DEF_X2N_ProcedureCode_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProcedureCode_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProcedureCode_tags_1)
+		/sizeof(asn_DEF_X2N_ProcedureCode_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProcedureCode_constr_1, X2N_ProcedureCode_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ProcedureCode.h b/asn1c_defs/X2N_ProcedureCode.h
new file mode 100644
index 0000000..788c07c
--- /dev/null
+++ b/asn1c_defs/X2N_ProcedureCode.h
@@ -0,0 +1,90 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProcedureCode_H_
+#define	_X2N_ProcedureCode_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ProcedureCode */
+typedef long	 X2N_ProcedureCode_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ProcedureCode_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProcedureCode;
+asn_struct_free_f X2N_ProcedureCode_free;
+asn_struct_print_f X2N_ProcedureCode_print;
+asn_constr_check_f X2N_ProcedureCode_constraint;
+ber_type_decoder_f X2N_ProcedureCode_decode_ber;
+der_type_encoder_f X2N_ProcedureCode_encode_der;
+xer_type_decoder_f X2N_ProcedureCode_decode_xer;
+xer_type_encoder_f X2N_ProcedureCode_encode_xer;
+per_type_decoder_f X2N_ProcedureCode_decode_uper;
+per_type_encoder_f X2N_ProcedureCode_encode_uper;
+per_type_decoder_f X2N_ProcedureCode_decode_aper;
+per_type_encoder_f X2N_ProcedureCode_encode_aper;
+#define X2N_ProcedureCode_id_handoverPreparation	((X2N_ProcedureCode_t)0)
+#define X2N_ProcedureCode_id_handoverCancel	((X2N_ProcedureCode_t)1)
+#define X2N_ProcedureCode_id_loadIndication	((X2N_ProcedureCode_t)2)
+#define X2N_ProcedureCode_id_errorIndication	((X2N_ProcedureCode_t)3)
+#define X2N_ProcedureCode_id_snStatusTransfer	((X2N_ProcedureCode_t)4)
+#define X2N_ProcedureCode_id_uEContextRelease	((X2N_ProcedureCode_t)5)
+#define X2N_ProcedureCode_id_x2Setup	((X2N_ProcedureCode_t)6)
+#define X2N_ProcedureCode_id_reset	((X2N_ProcedureCode_t)7)
+#define X2N_ProcedureCode_id_eNBConfigurationUpdate	((X2N_ProcedureCode_t)8)
+#define X2N_ProcedureCode_id_resourceStatusReportingInitiation	((X2N_ProcedureCode_t)9)
+#define X2N_ProcedureCode_id_resourceStatusReporting	((X2N_ProcedureCode_t)10)
+#define X2N_ProcedureCode_id_privateMessage	((X2N_ProcedureCode_t)11)
+#define X2N_ProcedureCode_id_mobilitySettingsChange	((X2N_ProcedureCode_t)12)
+#define X2N_ProcedureCode_id_rLFIndication	((X2N_ProcedureCode_t)13)
+#define X2N_ProcedureCode_id_handoverReport	((X2N_ProcedureCode_t)14)
+#define X2N_ProcedureCode_id_cellActivation	((X2N_ProcedureCode_t)15)
+#define X2N_ProcedureCode_id_x2Release	((X2N_ProcedureCode_t)16)
+#define X2N_ProcedureCode_id_x2APMessageTransfer	((X2N_ProcedureCode_t)17)
+#define X2N_ProcedureCode_id_x2Removal	((X2N_ProcedureCode_t)18)
+#define X2N_ProcedureCode_id_seNBAdditionPreparation	((X2N_ProcedureCode_t)19)
+#define X2N_ProcedureCode_id_seNBReconfigurationCompletion	((X2N_ProcedureCode_t)20)
+#define X2N_ProcedureCode_id_meNBinitiatedSeNBModificationPreparation	((X2N_ProcedureCode_t)21)
+#define X2N_ProcedureCode_id_seNBinitiatedSeNBModification	((X2N_ProcedureCode_t)22)
+#define X2N_ProcedureCode_id_meNBinitiatedSeNBRelease	((X2N_ProcedureCode_t)23)
+#define X2N_ProcedureCode_id_seNBinitiatedSeNBRelease	((X2N_ProcedureCode_t)24)
+#define X2N_ProcedureCode_id_seNBCounterCheck	((X2N_ProcedureCode_t)25)
+#define X2N_ProcedureCode_id_retrieveUEContext	((X2N_ProcedureCode_t)26)
+#define X2N_ProcedureCode_id_sgNBAdditionPreparation	((X2N_ProcedureCode_t)27)
+#define X2N_ProcedureCode_id_sgNBReconfigurationCompletion	((X2N_ProcedureCode_t)28)
+#define X2N_ProcedureCode_id_meNBinitiatedSgNBModificationPreparation	((X2N_ProcedureCode_t)29)
+#define X2N_ProcedureCode_id_sgNBinitiatedSgNBModification	((X2N_ProcedureCode_t)30)
+#define X2N_ProcedureCode_id_meNBinitiatedSgNBRelease	((X2N_ProcedureCode_t)31)
+#define X2N_ProcedureCode_id_sgNBinitiatedSgNBRelease	((X2N_ProcedureCode_t)32)
+#define X2N_ProcedureCode_id_sgNBCounterCheck	((X2N_ProcedureCode_t)33)
+#define X2N_ProcedureCode_id_sgNBChange	((X2N_ProcedureCode_t)34)
+#define X2N_ProcedureCode_id_rRCTransfer	((X2N_ProcedureCode_t)35)
+#define X2N_ProcedureCode_id_endcX2Setup	((X2N_ProcedureCode_t)36)
+#define X2N_ProcedureCode_id_endcConfigurationUpdate	((X2N_ProcedureCode_t)37)
+#define X2N_ProcedureCode_id_secondaryRATDataUsageReport	((X2N_ProcedureCode_t)38)
+#define X2N_ProcedureCode_id_endcCellActivation	((X2N_ProcedureCode_t)39)
+#define X2N_ProcedureCode_id_endcPartialReset	((X2N_ProcedureCode_t)40)
+#define X2N_ProcedureCode_id_eUTRANRCellResourceCoordination	((X2N_ProcedureCode_t)41)
+#define X2N_ProcedureCode_id_SgNBActivityNotification	((X2N_ProcedureCode_t)42)
+#define X2N_ProcedureCode_id_endcX2Removal	((X2N_ProcedureCode_t)43)
+#define X2N_ProcedureCode_id_dataForwardingAddressIndication	((X2N_ProcedureCode_t)44)
+#define X2N_ProcedureCode_id_gNBStatusIndication	((X2N_ProcedureCode_t)45)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProcedureCode_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.c b/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.c
new file mode 100644
index 0000000..a1fa1fe
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.c
@@ -0,0 +1,183 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtectedEUTRAResourceIndication.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_activationSFN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 1023)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_mBSFNControlRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_pDCCHRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_activationSFN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 10,  10,  0,  1023 }	/* (0..1023) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_mBSFNControlRegionLength_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (0..3) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_pDCCHRegionLength_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  1,  3 }	/* (1..3) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ProtectedEUTRAResourceIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedEUTRAResourceIndication, activationSFN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_activationSFN_constr_2,  memb_X2N_activationSFN_constraint_1 },
+		0, 0, /* No default value */
+		"activationSFN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedEUTRAResourceIndication, protectedResourceList),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtectedResourceList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protectedResourceList"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_ProtectedEUTRAResourceIndication, mBSFNControlRegionLength),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_mBSFNControlRegionLength_constr_4,  memb_X2N_mBSFNControlRegionLength_constraint_1 },
+		0, 0, /* No default value */
+		"mBSFNControlRegionLength"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ProtectedEUTRAResourceIndication, pDCCHRegionLength),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_pDCCHRegionLength_constr_5,  memb_X2N_pDCCHRegionLength_constraint_1 },
+		0, 0, /* No default value */
+		"pDCCHRegionLength"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ProtectedEUTRAResourceIndication, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P180,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ProtectedEUTRAResourceIndication_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedEUTRAResourceIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* activationSFN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* protectedResourceList */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mBSFNControlRegionLength */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pDCCHRegionLength */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedEUTRAResourceIndication_specs_1 = {
+	sizeof(struct X2N_ProtectedEUTRAResourceIndication),
+	offsetof(struct X2N_ProtectedEUTRAResourceIndication, _asn_ctx),
+	asn_MAP_X2N_ProtectedEUTRAResourceIndication_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_ProtectedEUTRAResourceIndication_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedEUTRAResourceIndication = {
+	"ProtectedEUTRAResourceIndication",
+	"ProtectedEUTRAResourceIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1,
+	sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedEUTRAResourceIndication_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_ProtectedEUTRAResourceIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.h b/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.h
new file mode 100644
index 0000000..3e8fdcc
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedEUTRAResourceIndication.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtectedEUTRAResourceIndication_H_
+#define	_X2N_ProtectedEUTRAResourceIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include "X2N_ProtectedResourceList.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ProtectedEUTRAResourceIndication */
+typedef struct X2N_ProtectedEUTRAResourceIndication {
+	long	 activationSFN;
+	X2N_ProtectedResourceList_t	 protectedResourceList;
+	long	*mBSFNControlRegionLength;	/* OPTIONAL */
+	long	*pDCCHRegionLength;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedEUTRAResourceIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedEUTRAResourceIndication;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtectedEUTRAResourceIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtectedFootprintTimePattern.c b/asn1c_defs/X2N_ProtectedFootprintTimePattern.c
new file mode 100644
index 0000000..21f777b
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedFootprintTimePattern.c
@@ -0,0 +1,133 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtectedFootprintTimePattern.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_protectedFootprintTimePeriodicity_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 320)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_protectedFootprintStartTime_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 20)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_protectedFootprintTimePeriodicity_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  9,  9,  1,  320 }	/* (1..320,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_protectedFootprintStartTime_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  1,  20 }	/* (1..20,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ProtectedFootprintTimePattern_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedFootprintTimePattern, protectedFootprintTimePeriodicity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_protectedFootprintTimePeriodicity_constr_2,  memb_X2N_protectedFootprintTimePeriodicity_constraint_1 },
+		0, 0, /* No default value */
+		"protectedFootprintTimePeriodicity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedFootprintTimePattern, protectedFootprintStartTime),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_protectedFootprintStartTime_constr_3,  memb_X2N_protectedFootprintStartTime_constraint_1 },
+		0, 0, /* No default value */
+		"protectedFootprintStartTime"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ProtectedFootprintTimePattern, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P181,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ProtectedFootprintTimePattern_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedFootprintTimePattern_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protectedFootprintTimePeriodicity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* protectedFootprintStartTime */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedFootprintTimePattern_specs_1 = {
+	sizeof(struct X2N_ProtectedFootprintTimePattern),
+	offsetof(struct X2N_ProtectedFootprintTimePattern, _asn_ctx),
+	asn_MAP_X2N_ProtectedFootprintTimePattern_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ProtectedFootprintTimePattern_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedFootprintTimePattern = {
+	"ProtectedFootprintTimePattern",
+	"ProtectedFootprintTimePattern",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1,
+	sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedFootprintTimePattern_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProtectedFootprintTimePattern_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtectedFootprintTimePattern.h b/asn1c_defs/X2N_ProtectedFootprintTimePattern.h
new file mode 100644
index 0000000..01d99b9
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedFootprintTimePattern.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtectedFootprintTimePattern_H_
+#define	_X2N_ProtectedFootprintTimePattern_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ProtectedFootprintTimePattern */
+typedef struct X2N_ProtectedFootprintTimePattern {
+	long	 protectedFootprintTimePeriodicity;
+	long	 protectedFootprintStartTime;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedFootprintTimePattern_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedFootprintTimePattern;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedFootprintTimePattern_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedFootprintTimePattern_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtectedFootprintTimePattern_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtectedResourceList-Item.c b/asn1c_defs/X2N_ProtectedResourceList-Item.c
new file mode 100644
index 0000000..83c7291
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedResourceList-Item.c
@@ -0,0 +1,165 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtectedResourceList-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_intraPRBProtectedResourceFootprint_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 84)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_protectedFootprintFrequencyPattern_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 110)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_intraPRBProtectedResourceFootprint_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  84,  84 }	/* (SIZE(84..84,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_protectedFootprintFrequencyPattern_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  6,  110 }	/* (SIZE(6..110,...)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item, resourceType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ResourceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"resourceType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item, intraPRBProtectedResourceFootprint),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_intraPRBProtectedResourceFootprint_constr_3,  memb_X2N_intraPRBProtectedResourceFootprint_constraint_1 },
+		0, 0, /* No default value */
+		"intraPRBProtectedResourceFootprint"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item, protectedFootprintFrequencyPattern),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_protectedFootprintFrequencyPattern_constr_4,  memb_X2N_protectedFootprintFrequencyPattern_constraint_1 },
+		0, 0, /* No default value */
+		"protectedFootprintFrequencyPattern"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item, protectedFootprintTimePattern),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtectedFootprintTimePattern,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protectedFootprintTimePattern"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ProtectedResourceList_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P182,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ProtectedResourceList_Item_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedResourceList_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedResourceList_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resourceType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* intraPRBProtectedResourceFootprint */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protectedFootprintFrequencyPattern */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* protectedFootprintTimePattern */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedResourceList_Item_specs_1 = {
+	sizeof(struct X2N_ProtectedResourceList_Item),
+	offsetof(struct X2N_ProtectedResourceList_Item, _asn_ctx),
+	asn_MAP_X2N_ProtectedResourceList_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_ProtectedResourceList_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList_Item = {
+	"ProtectedResourceList-Item",
+	"ProtectedResourceList-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedResourceList_Item_tags_1,
+	sizeof(asn_DEF_X2N_ProtectedResourceList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtectedResourceList_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedResourceList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedResourceList_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_ProtectedResourceList_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtectedResourceList-Item.h b/asn1c_defs/X2N_ProtectedResourceList-Item.h
new file mode 100644
index 0000000..d8d6271
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedResourceList-Item.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtectedResourceList_Item_H_
+#define	_X2N_ProtectedResourceList_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ResourceType.h"
+#include <BIT_STRING.h>
+#include "X2N_ProtectedFootprintTimePattern.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ProtectedResourceList-Item */
+typedef struct X2N_ProtectedResourceList_Item {
+	X2N_ResourceType_t	 resourceType;
+	BIT_STRING_t	 intraPRBProtectedResourceFootprint;
+	BIT_STRING_t	 protectedFootprintFrequencyPattern;
+	X2N_ProtectedFootprintTimePattern_t	 protectedFootprintTimePattern;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedResourceList_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedResourceList_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_Item_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtectedResourceList_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtectedResourceList.c b/asn1c_defs/X2N_ProtectedResourceList.c
new file mode 100644
index 0000000..37dde8d
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedResourceList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtectedResourceList.h"
+
+#include "X2N_ProtectedResourceList-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_ProtectedResourceList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtectedResourceList_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedResourceList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtectedResourceList_specs_1 = {
+	sizeof(struct X2N_ProtectedResourceList),
+	offsetof(struct X2N_ProtectedResourceList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList = {
+	"ProtectedResourceList",
+	"ProtectedResourceList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtectedResourceList_tags_1,
+	sizeof(asn_DEF_X2N_ProtectedResourceList_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtectedResourceList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedResourceList_tags_1)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtectedResourceList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtectedResourceList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtectedResourceList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtectedResourceList.h b/asn1c_defs/X2N_ProtectedResourceList.h
new file mode 100644
index 0000000..c8b7219
--- /dev/null
+++ b/asn1c_defs/X2N_ProtectedResourceList.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtectedResourceList_H_
+#define	_X2N_ProtectedResourceList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtectedResourceList_Item;
+
+/* X2N_ProtectedResourceList */
+typedef struct X2N_ProtectedResourceList {
+	A_SEQUENCE_OF(struct X2N_ProtectedResourceList_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedResourceList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtectedResourceList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtectedResourceList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtectedResourceList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolExtensionContainer.c b/asn1c_defs/X2N_ProtocolExtensionContainer.c
new file mode 100644
index 0000000..59c91cd
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolExtensionContainer.c
@@ -0,0 +1,8930 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolExtensionContainer.h"
+
+#include "X2N_ProtocolExtensionField.h"
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P0_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P1_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P2_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P3_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P4_constr_9 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P5_constr_11 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P6_constr_13 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P7_constr_15 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P8_constr_17 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P9_constr_19 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P10_constr_21 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P11_constr_23 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P12_constr_25 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P13_constr_27 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P14_constr_29 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P15_constr_31 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P16_constr_33 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P17_constr_35 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P18_constr_37 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P19_constr_39 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P20_constr_41 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P21_constr_43 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P22_constr_45 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P23_constr_47 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P24_constr_49 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P25_constr_51 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P26_constr_53 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P27_constr_55 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P28_constr_57 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P29_constr_59 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P30_constr_61 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P31_constr_63 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P32_constr_65 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P33_constr_67 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P34_constr_69 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P35_constr_71 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P36_constr_73 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P37_constr_75 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P38_constr_77 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P39_constr_79 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P40_constr_81 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P41_constr_83 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P42_constr_85 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P43_constr_87 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P44_constr_89 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P45_constr_91 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P46_constr_93 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P47_constr_95 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P48_constr_97 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P49_constr_99 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P50_constr_101 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P51_constr_103 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P52_constr_105 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P53_constr_107 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P54_constr_109 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P55_constr_111 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P56_constr_113 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P57_constr_115 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P58_constr_117 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P59_constr_119 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P60_constr_121 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P61_constr_123 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P62_constr_125 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P63_constr_127 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P64_constr_129 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P65_constr_131 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P66_constr_133 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P67_constr_135 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P68_constr_137 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P69_constr_139 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P70_constr_141 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P71_constr_143 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P72_constr_145 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P73_constr_147 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P74_constr_149 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P75_constr_151 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P76_constr_153 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P77_constr_155 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P78_constr_157 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P79_constr_159 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P80_constr_161 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P81_constr_163 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P82_constr_165 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P83_constr_167 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P84_constr_169 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P85_constr_171 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P86_constr_173 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P87_constr_175 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P88_constr_177 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P89_constr_179 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P90_constr_181 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P91_constr_183 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P92_constr_185 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P93_constr_187 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P94_constr_189 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P95_constr_191 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P96_constr_193 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P97_constr_195 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P98_constr_197 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P99_constr_199 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P100_constr_201 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P101_constr_203 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P102_constr_205 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P103_constr_207 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P104_constr_209 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P105_constr_211 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P106_constr_213 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P107_constr_215 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P108_constr_217 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P109_constr_219 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P110_constr_221 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P111_constr_223 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P112_constr_225 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P113_constr_227 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P114_constr_229 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P115_constr_231 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P116_constr_233 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P117_constr_235 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P118_constr_237 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P119_constr_239 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P120_constr_241 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P121_constr_243 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P122_constr_245 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P123_constr_247 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P124_constr_249 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P125_constr_251 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P126_constr_253 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P127_constr_255 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P128_constr_257 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P129_constr_259 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P130_constr_261 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P131_constr_263 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P132_constr_265 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P133_constr_267 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P134_constr_269 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P135_constr_271 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P136_constr_273 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P137_constr_275 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P138_constr_277 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P139_constr_279 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P140_constr_281 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P141_constr_283 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P142_constr_285 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P143_constr_287 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P144_constr_289 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P145_constr_291 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P146_constr_293 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P147_constr_295 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P148_constr_297 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P149_constr_299 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P150_constr_301 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P151_constr_303 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P152_constr_305 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P153_constr_307 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P154_constr_309 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P155_constr_311 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P156_constr_313 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P157_constr_315 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P158_constr_317 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P159_constr_319 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P160_constr_321 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P161_constr_323 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P162_constr_325 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P163_constr_327 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P164_constr_329 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P165_constr_331 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P166_constr_333 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P167_constr_335 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P168_constr_337 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P169_constr_339 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P170_constr_341 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P171_constr_343 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P172_constr_345 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P173_constr_347 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P174_constr_349 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P175_constr_351 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P176_constr_353 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P177_constr_355 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P178_constr_357 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P179_constr_359 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P180_constr_361 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P181_constr_363 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P182_constr_365 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P183_constr_367 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P184_constr_369 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P185_constr_371 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P186_constr_373 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P187_constr_375 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P188_constr_377 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P189_constr_379 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P190_constr_381 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P191_constr_383 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P192_constr_385 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P193_constr_387 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P194_constr_389 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P195_constr_391 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P196_constr_393 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P197_constr_395 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P198_constr_397 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P199_constr_399 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P200_constr_401 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P201_constr_403 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P202_constr_405 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P203_constr_407 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P204_constr_409 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P205_constr_411 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P206_constr_413 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P207_constr_415 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P208_constr_417 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P209_constr_419 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P210_constr_421 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P211_constr_423 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P212_constr_425 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P213_constr_427 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P214_constr_429 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P215_constr_431 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P216_constr_433 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P217_constr_435 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P218_constr_437 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P219_constr_439 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P220_constr_441 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P221_constr_443 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P222_constr_445 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1,  65535 }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P0_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P0_specs_1 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P0),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P0, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P0 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P0_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P0_specs_1	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P1_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P1_specs_3 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P1),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P1, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P1 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P1_tags_3[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P1_3,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P1_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P2_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P2_specs_5 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P2),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P2, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P2 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P2_tags_5[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P2_5,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P2_specs_5	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P3_7[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P3_specs_7 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P3),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P3, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P3 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P3_tags_7[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P3_7,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P3_specs_7	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P4_9[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P4_specs_9 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P4),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P4, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P4 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P4_tags_9[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P4_constr_9, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P4_9,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P4_specs_9	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P5_11[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P5_specs_11 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P5),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P5, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P5 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P5_tags_11[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P5_constr_11, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P5_11,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P5_specs_11	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P6_13[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P6_specs_13 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P6),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P6, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P6 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P6_tags_13[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P6_constr_13, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P6_13,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P6_specs_13	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P7_15[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellInformation_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P7_specs_15 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P7),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P7, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P7 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P7_tags_15[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P7_constr_15, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P7_15,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P7_specs_15	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P8_17[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P8_specs_17 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P8),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P8, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P8 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P8_tags_17[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P8_constr_17, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P8_17,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P8_specs_17	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P9_19[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellToReport_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P9_specs_19 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P9),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P9, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P9 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P9_tags_19[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P9_constr_19, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P9_19,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P9_specs_19	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P10_21[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P10_specs_21 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P10),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P10, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P10 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P10_tags_21[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P10_constr_21, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P10_21,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P10_specs_21	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P11_23[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P11_specs_23 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P11),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P11, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P11 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P11_tags_23[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P11_constr_23, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P11_23,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P11_specs_23	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P12_25[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P12_specs_25 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P12),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P12, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P12 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P12_tags_25[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P12_constr_25, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P12_25,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P12_specs_25	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P13_27[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P13_specs_27 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P13),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P13, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P13 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P13_tags_27[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P13_constr_27, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P13_27,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P13_specs_27	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P14_29[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P14_specs_29 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P14),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P14, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P14 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P14_tags_29[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P14_constr_29, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P14_29,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P14_specs_29	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P15_31[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedCellList_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P15_specs_31 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P15),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P15, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P15 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P15_tags_31[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P15_constr_31, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P15_31,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P15_specs_31	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P16_33[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RNL_Header_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P16_specs_33 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P16),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P16, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P16 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P16_tags_33[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P16_constr_33, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P16_33,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P16_specs_33	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P17_35[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P17_specs_35 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P17),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P17, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P17 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P17_tags_35[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P17_constr_35, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P17_35,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P17_specs_35	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P18_37[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P18_specs_37 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P18),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P18, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P18 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P18_tags_37[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P18_constr_37, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P18_37,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P18_specs_37	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P19_39[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P19_specs_39 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P19),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P19, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P19 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P19_tags_39[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P19_constr_39, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P19_39,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P19_specs_39	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P20_41[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P20_specs_41 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P20),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P20, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P20 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P20_tags_41[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P20_constr_41, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P20_41,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P20_specs_41	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P21_43[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P21_specs_43 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P21),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P21, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P21 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P21_tags_43[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P21_constr_43, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P21_43,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P21_specs_43	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P22_45[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P22_specs_45 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P22),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P22, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P22 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P22_tags_45[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P22_constr_45, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P22_45,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P22_specs_45	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P23_47[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P23_specs_47 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P23),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P23, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P23 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P23_tags_47[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P23_constr_47, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P23_47,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P23_specs_47	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P24_49[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P24_specs_49 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P24),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P24, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P24 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P24_tags_49[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P24_constr_49, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P24_49,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P24_specs_49	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P25_51[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P25_specs_51 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P25),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P25, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P25 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P25_tags_51[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P25_constr_51, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P25_51,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P25_specs_51	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P26_53[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P26_specs_53 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P26),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P26, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P26 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P26_tags_53[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P26_constr_53, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P26_53,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P26_specs_53	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P27_55[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P27_specs_55 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P27),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P27, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P27 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P27_tags_55[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P27_constr_55, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P27_55,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P27_specs_55	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P28_57[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P28_specs_57 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P28),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P28, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P28 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P28_tags_57[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P28_constr_57, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P28_57,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P28_specs_57	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P29_59[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P29_specs_59 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P29),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P29, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P29 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P29_tags_59[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P29_constr_59, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P29_59,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P29_specs_59	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P30_61[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P30_specs_61 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P30),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P30, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P30 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P30_tags_61[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P30_constr_61, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P30_61,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P30_specs_61	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P31_63[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P31_specs_63 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P31),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P31, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P31 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P31_tags_63[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P31_constr_63, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P31_63,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P31_specs_63	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P32_65[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P32_specs_65 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P32),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P32, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P32 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P32_tags_65[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P32_constr_65, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P32_65,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P32_specs_65	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P33_67[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P33_specs_67 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P33),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P33, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P33 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P33_tags_67[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P33_constr_67, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P33_67,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P33_specs_67	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P34_69[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P34_specs_69 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P34),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P34, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P34 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P34_tags_69[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P34_constr_69, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P34_69,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P34_specs_69	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P35_71[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P35_specs_71 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P35),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P35, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P35 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P35_tags_71[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P35_constr_71, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P35_71,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P35_specs_71	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P36_73[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P36_specs_73 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P36),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P36, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P36 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P36_tags_73[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P36_constr_73, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P36_73,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P36_specs_73	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P37_75[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P37_specs_75 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P37),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P37, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P37 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P37_tags_75[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P37_constr_75, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P37_75,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P37_specs_75	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P38_77[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P38_specs_77 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P38),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P38, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P38 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P38_tags_77[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P38_constr_77, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P38_77,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P38_specs_77	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P39_79[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P39_specs_79 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P39),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P39, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P39 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P39_tags_79[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P39_constr_79, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P39_79,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P39_specs_79	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P40_81[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P40_specs_81 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P40),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P40, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P40 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P40_tags_81[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P40_constr_81, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P40_81,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P40_specs_81	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P41_83[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P41_specs_83 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P41),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P41, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P41 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P41_tags_83[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P41_constr_83, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P41_83,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P41_specs_83	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P42_85[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P42_specs_85 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P42),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P42, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P42 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P42_tags_85[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P42_constr_85, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P42_85,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P42_specs_85	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P43_87[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P43_specs_87 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P43),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P43, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P43 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P43_tags_87[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P43_constr_87, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P43_87,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P43_specs_87	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P44_89[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P44_specs_89 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P44),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P44, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P44 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P44_tags_89[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P44_constr_89, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P44_89,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P44_specs_89	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P45_91[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P45_specs_91 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P45),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P45, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P45 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P45_tags_91[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P45_constr_91, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P45_91,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P45_specs_91	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P46_93[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P46_specs_93 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P46),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P46, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P46 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P46_tags_93[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P46_constr_93, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P46_93,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P46_specs_93	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P47_95[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P47_specs_95 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P47),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P47, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P47 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P47_tags_95[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P47_constr_95, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P47_95,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P47_specs_95	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P48_97[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P48_specs_97 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P48),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P48, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P48 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P48_tags_97[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P48_constr_97, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P48_97,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P48_specs_97	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P49_99[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P49_specs_99 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P49),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P49, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P49 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P49_tags_99[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P49_constr_99, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P49_99,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P49_specs_99	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P50_101[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P50_specs_101 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P50),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P50, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P50 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P50_tags_101[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P50_constr_101, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P50_101,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P50_specs_101	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P51_103[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P51_specs_103 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P51),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P51, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P51 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P51_tags_103[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P51_constr_103, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P51_103,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P51_specs_103	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P52_105[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P52_specs_105 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P52),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P52, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P52 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P52_tags_105[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P52_constr_105, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P52_105,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P52_specs_105	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P53_107[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P53_specs_107 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P53),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P53, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P53 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P53_tags_107[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P53_constr_107, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P53_107,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P53_specs_107	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P54_109[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P54_specs_109 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P54),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P54, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P54 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P54_tags_109[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P54_constr_109, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P54_109,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P54_specs_109	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P55_111[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P55_specs_111 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P55),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P55, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P55 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P55_tags_111[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P55_constr_111, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P55_111,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P55_specs_111	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P56_113[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P56_specs_113 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P56),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P56, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P56 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P56_tags_113[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P56_constr_113, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P56_113,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P56_specs_113	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P57_115[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P57_specs_115 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P57),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P57, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P57 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P57_tags_115[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P57_constr_115, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P57_115,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P57_specs_115	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P58_117[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P58_specs_117 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P58),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P58, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P58 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P58_tags_117[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P58_constr_117, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P58_117,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P58_specs_117	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P59_119[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P59_specs_119 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P59),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P59, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P59 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P59_tags_119[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P59_constr_119, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P59_119,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P59_specs_119	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P60_121[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P60_specs_121 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P60),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P60, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P60 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P60_tags_121[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P60_constr_121, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P60_121,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P60_specs_121	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P61_123[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P61_specs_123 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P61),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P61, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P61 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P61_tags_123[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P61_constr_123, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P61_123,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P61_specs_123	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P62_125[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P62_specs_125 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P62),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P62, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P62 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P62_tags_125[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P62_constr_125, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P62_125,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P62_specs_125	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P63_127[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P63_specs_127 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P63),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P63, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P63 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P63_tags_127[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P63_constr_127, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P63_127,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P63_specs_127	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P64_129[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P64_specs_129 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P64),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P64, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P64 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P64_tags_129[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P64_constr_129, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P64_129,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P64_specs_129	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P65_131[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P65_specs_131 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P65),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P65, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P65 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P65_tags_131[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P65_constr_131, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P65_131,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P65_specs_131	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P66_133[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P66_specs_133 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P66),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P66, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P66 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P66_tags_133[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P66_constr_133, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P66_133,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P66_specs_133	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P67_135[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P67_specs_135 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P67),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P67, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P67 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P67_tags_135[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P67_constr_135, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P67_135,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P67_specs_135	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P68_137[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P68_specs_137 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P68),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P68, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P68 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P68_tags_137[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P68_constr_137, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P68_137,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P68_specs_137	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P69_139[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P69_specs_139 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P69),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P69, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P69 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P69_tags_139[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P69_constr_139, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P69_139,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P69_specs_139	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P70_141[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P70_specs_141 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P70),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P70, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P70 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P70_tags_141[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P70_constr_141, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P70_141,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P70_specs_141	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P71_143[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P71_specs_143 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P71),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P71, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P71 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P71_tags_143[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P71_constr_143, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P71_143,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P71_specs_143	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P72_145[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P72_specs_145 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P72),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P72, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P72 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P72_tags_145[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P72_constr_145, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P72_145,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P72_specs_145	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P73_147[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P73_specs_147 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P73),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P73, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P73 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P73_tags_147[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P73_constr_147, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P73_147,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P73_specs_147	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P74_149[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P74_specs_149 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P74),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P74, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P74 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P74_tags_149[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P74_constr_149, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P74_149,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P74_specs_149	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P75_151[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P75_specs_151 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P75),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P75, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P75 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P75_tags_151[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P75_constr_151, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P75_151,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P75_specs_151	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P76_153[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P76_specs_153 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P76),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P76, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P76 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P76_tags_153[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P76_constr_153, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P76_153,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P76_specs_153	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P77_155[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P77_specs_155 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P77),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P77, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P77 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P77_tags_155[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P77_constr_155, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P77_155,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P77_specs_155	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P78_157[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P78_specs_157 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P78),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P78, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P78 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P78_tags_157[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P78_constr_157, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P78_157,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P78_specs_157	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P79_159[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P79_specs_159 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P79),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P79, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P79 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P79_tags_159[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P79_constr_159, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P79_159,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P79_specs_159	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P80_161[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P80_specs_161 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P80),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P80, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P80 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P80_tags_161[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P80_constr_161, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P80_161,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P80_specs_161	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P81_163[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P81_specs_163 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P81),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P81, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P81 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P81_tags_163[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P81_constr_163, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P81_163,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P81_specs_163	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P82_165[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P82_specs_165 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P82),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P82, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P82 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P82_tags_165[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P82_constr_165, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P82_165,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P82_specs_165	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P83_167[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P83_specs_167 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P83),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P83, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P83 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P83_tags_167[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P83_constr_167, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P83_167,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P83_specs_167	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P84_169[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P84_specs_169 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P84),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P84, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P84 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P84_tags_169[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P84_constr_169, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P84_169,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P84_specs_169	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P85_171[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P85_specs_171 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P85),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P85, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P85 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P85_tags_171[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P85_constr_171, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P85_171,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P85_specs_171	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P86_173[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P86_specs_173 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P86),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P86, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P86 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P86_tags_173[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P86_constr_173, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P86_173,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P86_specs_173	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P87_175[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P87_specs_175 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P87),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P87, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P87 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P87_tags_175[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P87_constr_175, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P87_175,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P87_specs_175	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P88_177[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P88_specs_177 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P88),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P88, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P88 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P88_tags_177[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P88_constr_177, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P88_177,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P88_specs_177	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P89_179[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P89_specs_179 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P89),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P89, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P89 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P89_tags_179[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P89_constr_179, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P89_179,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P89_specs_179	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P90_181[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P90_specs_181 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P90),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P90, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P90 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P90_tags_181[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P90_constr_181, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P90_181,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P90_specs_181	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P91_183[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNBServedCells_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P91_specs_183 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P91),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P91, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P91 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P91_tags_183[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P91_constr_183, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P91_183,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P91_specs_183	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P92_185[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P92_specs_185 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P92),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P92, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P92 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P92_tags_185[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P92_constr_185, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P92_185,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P92_specs_185	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P93_187[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P93_specs_187 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P93),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P93, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P93 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P93_tags_187[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P93_constr_187, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P93_187,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P93_specs_187	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P94_189[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P94_specs_189 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P94),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P94, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P94 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P94_tags_189[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P94_constr_189, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P94_189,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P94_specs_189	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P95_191[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P95_specs_191 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P95),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P95, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P95 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P95_tags_191[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P95_constr_191, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P95_191,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P95_specs_191	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P96_193[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P96_specs_193 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P96),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P96, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P96 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P96_tags_193[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P96_constr_193, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P96_193,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P96_specs_193	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P97_195[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRNeighbour_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P97_specs_195 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P97),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P97, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P97 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P97_tags_195[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P97_constr_195, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P97_195,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P97_specs_195	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P98_197[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Limited_list_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P98_specs_197 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P98),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P98, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P98 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P98_tags_197[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P98_constr_197, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P98_197,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P98_specs_197	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P99_199[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P99_specs_199 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P99),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P99, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P99 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P99_tags_199[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P99_constr_199, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P99_199,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P99_specs_199	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P100_201[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P100_specs_201 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P100),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P100, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P100 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P100_tags_201[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P100_constr_201, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P100_201,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P100_specs_201	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P101_203[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P101_specs_203 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P101),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P101, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P101 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P101_tags_203[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P101_constr_203, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P101_203,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P101_specs_203	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P102_205[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P102_specs_205 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P102),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P102, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P102 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P102_tags_205[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P102_constr_205, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P102_205,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P102_specs_205	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P103_207[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P103_specs_207 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P103),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P103, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P103 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P103_tags_207[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P103_constr_207, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P103_207,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P103_specs_207	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P104_209[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ABSInformationFDD_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P104_specs_209 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P104),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P104, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P104 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P104_tags_209[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P104_constr_209, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P104_209,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P104_specs_209	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P105_211[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ABSInformationTDD_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P105_specs_211 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P105),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P105, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P105 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P105_tags_211[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P105_constr_211, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P105_211,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P105_specs_211	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P106_213[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ABS_Status_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P106_specs_213 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P106),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P106, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P106 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P106_tags_213[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P106_constr_213, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P106_213,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P106_specs_213	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P107_215[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P107_specs_215 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P107),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P107, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P107 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P107_tags_215[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P107_constr_215, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P107_215,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P107_specs_215	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P108_217[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P108_specs_217 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P108),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P108, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P108 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P108_tags_217[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P108_constr_217, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P108_217,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P108_specs_217	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P109_219[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P109_specs_219 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P109),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P109, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P109 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P109_tags_219[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P109_constr_219, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P109_219,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P109_specs_219	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P110_221[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AS_SecurityInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P110_specs_221 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P110),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P110, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P110 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P110_tags_221[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P110_constr_221, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P110_221,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P110_specs_221	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P111_223[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P111_specs_223 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P111),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P111, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P111 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P111_tags_223[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P111_constr_223, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P111_223,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P111_specs_223	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P112_225[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellBasedMDT_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P112_specs_225 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P112),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P112, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P112 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P112_tags_225[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P112_constr_225, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P112_225,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P112_specs_225	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P113_227[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellBasedQMC_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P113_specs_227 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P113),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P113, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P113 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P113_tags_227[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P113_constr_227, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P113_227,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P113_specs_227	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P114_229[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellReplacingInfo_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P114_specs_229 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P114),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P114, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P114 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P114_tags_229[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P114_constr_229, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P114_229,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P114_specs_229	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P115_231[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellType_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P115_specs_231 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P115),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P115, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P115 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P115_tags_231[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P115_constr_231, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P115_231,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P115_specs_231	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P116_233[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P116_specs_233 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P116),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P116, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P116 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P116_tags_233[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P116_constr_233, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P116_233,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P116_specs_233	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P117_235[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P117_specs_235 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P117),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P117, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P117 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P117_tags_235[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P117_constr_235, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P117_235,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P117_specs_235	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P118_237[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P118_specs_237 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P118),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P118, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P118 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P118_tags_237[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P118_constr_237, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P118_237,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P118_specs_237	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P119_239[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPInformationItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P119_specs_239 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P119),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P119, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P119 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P119_tags_239[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P119_constr_239, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P119_239,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P119_specs_239	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P120_241[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPInformationStartTime_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P120_specs_241 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P120),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P120, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P120 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P120_tags_241[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P120_constr_241, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P120_241,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P120_specs_241	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P121_243[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P121_specs_243 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P121),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P121, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P121 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P121_tags_243[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P121_constr_243, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P121_243,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P121_specs_243	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P122_245[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P122_specs_245 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P122),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P122, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P122 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P122_tags_245[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P122_constr_245, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P122_245,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P122_specs_245	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P123_247[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_COUNTvalue_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P123_specs_247 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P123),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P123, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P123 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P123_tags_247[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P123_constr_247, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P123_247,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P123_specs_247	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P124_249[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_COUNTValueExtended_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P124_specs_249 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P124),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P124, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P124 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P124_tags_249[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P124_constr_249, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P124_249,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P124_specs_249	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P125_251[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P125_specs_251 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P125),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P125, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P125 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P125_tags_251[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P125_constr_251, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P125_251,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P125_specs_251	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P126_253[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P126_specs_253 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P126),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P126, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P126 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P126_tags_253[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P126_constr_253, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P126_253,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P126_specs_253	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P127_255[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P127_specs_255 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P127),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P127, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P127 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P127_tags_255[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P127_constr_255, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P127_255,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P127_specs_255	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P128_257[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CSIReportList_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P128_specs_257 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P128),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P128, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P128 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P128_tags_257[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P128_constr_257, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P128_257,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P128_specs_257	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P129_259[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P129_specs_259 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P129),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P129, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P129 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P129_tags_259[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P129_constr_259, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P129_259,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P129_specs_259	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P130_261[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P130_specs_261 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P130),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P130, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P130 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P130_tags_261[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P130_constr_261, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P130_261,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P130_specs_261	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P131_263[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P131_specs_263 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P131),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P131, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P131 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P131_tags_263[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P131_constr_263, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P131_263,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P131_specs_263	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P132_265[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DeliveryStatus_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P132_specs_265 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P132),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P132, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P132 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P132_tags_265[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P132_constr_265, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P132_265,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P132_specs_265	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P133_267[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DynamicNAICSInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P133_specs_267 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P133),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P133, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P133 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P133_tags_267[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P133_constr_267, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P133_267,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P133_specs_267	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P134_269[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P134_specs_269 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P134),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P134, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P134 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P134_tags_269[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P134_constr_269, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P134_269,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P134_specs_269	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P135_271[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EnhancedRNTP_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P135_specs_271 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P135),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P135, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P135 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P135_tags_271[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P135_constr_271, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P135_271,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P135_specs_271	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P136_273[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P136_specs_273 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P136),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P136, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P136 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P136_tags_273[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P136_constr_273, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P136_273,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P136_specs_273	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P137_275[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P137_specs_275 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P137),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P137, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P137 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P137_tags_275[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P137_constr_275, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P137_275,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P137_specs_275	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P138_277[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P138_specs_277 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P138),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P138, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P138 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P138_tags_277[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P138_constr_277, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P138_277,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P138_specs_277	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P139_279[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P139_specs_279 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P139),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P139, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P139 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P139_tags_279[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P139_constr_279, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P139_279,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P139_specs_279	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P140_281[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P140_specs_281 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P140),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P140, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P140 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P140_tags_281[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P140_constr_281, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P140_281,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P140_specs_281	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P141_283[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P141_specs_283 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P141),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P141, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P141 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P141_tags_283[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P141_constr_283, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P141_283,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P141_specs_283	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P142_285[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P142_specs_285 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P142),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P142, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P142 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P142_tags_285[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P142_constr_285, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P142_285,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P142_specs_285	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P143_287[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P143_specs_287 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P143),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P143, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P143 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P143_tags_287[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P143_constr_287, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P143_287,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P143_specs_287	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P144_289[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P144_specs_289 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P144),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P144, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P144 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P144_tags_289[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P144_constr_289, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P144_289,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P144_specs_289	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P145_291[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_FDD_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P145_specs_291 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P145),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P145, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P145 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P145_tags_291[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P145_constr_291, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P145_291,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P145_specs_291	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P146_293[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P146_specs_293 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P146),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P146, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P146 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P146_tags_293[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P146_constr_293, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P146_293,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P146_specs_293	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P147_295[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P147_specs_295 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P147),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P147, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P147 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P147_tags_295[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P147_constr_295, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P147_295,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P147_specs_295	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P148_297[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_FreqBandNrItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P148_specs_297 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P148),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P148, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P148 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P148_tags_297[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P148_constr_297, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P148_297,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P148_specs_297	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P149_299[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GBR_QosInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P149_specs_299 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P149),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P149, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P149 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P149_tags_299[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P149_constr_299, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P149_299,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P149_specs_299	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P150_301[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P150_specs_301 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P150),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P150, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P150 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P150_tags_301[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P150_constr_301, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P150_301,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P150_specs_301	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P151_303[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P151_specs_303 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P151),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P151, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P151 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P151_tags_303[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P151_constr_303, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P151_303,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P151_specs_303	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P152_305[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P152_specs_305 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P152),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P152, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P152 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P152_tags_305[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P152_constr_305, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P152_305,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P152_specs_305	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P153_307[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GU_Group_ID_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P153_specs_307 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P153),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P153, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P153 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P153_tags_307[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P153_constr_307, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P153_307,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P153_specs_307	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P154_309[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUMMEI_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P154_specs_309 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P154),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P154, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P154 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P154_tags_309[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P154_constr_309, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P154_309,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P154_specs_309	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P155_311[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRestrictionList_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P155_specs_311 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P155),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P155, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P155 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P155_tags_311[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P155_constr_311, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P155_311,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P155_specs_311	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P156_313[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HWLoadIndicator_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P156_specs_313 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P156),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P156, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P156 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P156_tags_313[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P156_constr_313, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P156_313,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P156_specs_313	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P157_315[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P157_specs_315 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P157),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P157, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P157 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P157_tags_315[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P157_constr_315, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P157_315,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P157_specs_315	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P158_317[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_LocationReportingInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P158_specs_317 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P158),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P158, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P158 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P158_tags_317[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P158_constr_317, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P158_317,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P158_specs_317	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P159_319[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M1PeriodicReporting_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P159_specs_319 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P159),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P159, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P159 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P159_tags_319[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P159_constr_319, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P159_319,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P159_specs_319	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P160_321[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M1ThresholdEventA2_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P160_specs_321 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P160),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P160, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P160 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P160_tags_321[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P160_constr_321, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P160_321,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P160_specs_321	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P161_323[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M3Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P161_specs_323 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P161),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P161, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P161 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P161_tags_323[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P161_constr_323, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P161_323,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P161_specs_323	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P162_325[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M4Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P162_specs_325 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P162),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P162, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P162 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P162_tags_325[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P162_constr_325, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P162_325,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P162_specs_325	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P163_327[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M5Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P163_specs_327 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P163),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P163, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P163 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P163_tags_327[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P163_constr_327, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P163_327,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P163_specs_327	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P164_329[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M6Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P164_specs_329 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P164),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P164, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P164 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P164_tags_329[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P164_constr_329, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P164_329,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P164_specs_329	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P165_331[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M7Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P165_specs_331 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P165),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P165, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P165 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P165_tags_331[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P165_constr_331, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P165_331,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P165_specs_331	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P166_333[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MDT_Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P166_specs_333 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P166),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P166, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P166 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P166_tags_333[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P166_constr_333, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P166_333,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P166_specs_333	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P167_335[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P167_specs_335 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P167),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P167, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P167 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P167_tags_335[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P167_constr_335, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P167_335,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P167_specs_335	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P168_337[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P168_specs_337 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P168),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P168, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P168 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P168_tags_337[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P168_constr_337, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P168_337,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P168_specs_337	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P169_339[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_BandInfo_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P169_specs_339 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P169),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P169, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P169 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P169_tags_339[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P169_constr_339, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P169_339,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P169_specs_339	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P170_341[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRB_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P170_specs_341 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P170),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P170, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P170 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P170_tags_341[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P170_constr_341, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P170_341,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P170_specs_341	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P171_343[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UENRMeasurement_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P171_specs_343 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P171),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P171, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P171 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P171_tags_343[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P171_constr_343, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P171_343,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P171_specs_343	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P172_345[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Neighbour_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P172_specs_345 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P172),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P172, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P172 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P172_tags_345[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P172_constr_345, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P172_345,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P172_specs_345	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P173_347[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRFreqInfo_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P173_specs_347 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P173),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P173, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P173 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P173_tags_347[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P173_constr_347, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P173_347,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P173_specs_347	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P174_349[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRCGI_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P174_specs_349 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P174),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P174, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P174 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P174_tags_349[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P174_constr_349, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P174_349,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P174_specs_349	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P175_351[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NR_TxBW_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P175_specs_351 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P175),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P175, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P175 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P175_tags_351[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P175_constr_351, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P175_351,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P175_specs_351	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P176_353[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P176_specs_353 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P176),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P176, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P176 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P176_tags_353[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P176_constr_353, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P176_353,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P176_specs_353	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P177_355[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_PRACH_Configuration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P177_specs_355 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P177),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P177, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P177 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P177_tags_355[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P177_constr_355, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P177_355,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P177_specs_355	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P178_357[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P178_specs_357 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P178),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P178, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P178 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P178_tags_357[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P178_constr_357, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P178_357,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P178_specs_357	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P179_359[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProSeAuthorized_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P179_specs_359 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P179),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P179, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P179 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P179_tags_359[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P179_constr_359, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P179_359,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P179_specs_359	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P180_361[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P180_specs_361 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P180),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P180, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P180 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P180_tags_361[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P180_constr_361, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P180_361,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P180_specs_361	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P181_363[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P181_specs_363 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P181),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P181, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P181 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P181_tags_363[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P181_constr_363, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P181_363,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P181_specs_363	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P182_365[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P182_specs_365 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P182),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P182, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P182 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P182_tags_365[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P182_constr_365, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P182_365,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P182_specs_365	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P183_367[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RadioResourceStatus_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P183_specs_367 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P183),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P183, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P183 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P183_tags_367[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P183_constr_367, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P183_367,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P183_specs_367	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P184_369[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P184_specs_369 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P184),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P184, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P184 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P184_tags_369[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P184_constr_369, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P184_369,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P184_specs_369	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P185_371[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ReservedSubframePattern_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P185_specs_371 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P185),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P185, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P185 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P185_tags_371[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P185_constr_371, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P185_371,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P185_specs_371	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P186_373[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLC_Status_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P186_specs_373 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P186),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P186, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P186 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P186_tags_373[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P186_constr_373, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P186_373,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P186_specs_373	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P187_375[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RSRPMeasurementResult_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P187_specs_375 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P187),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P187, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P187 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P187_tags_375[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P187_constr_375, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P187_375,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P187_specs_375	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P188_377[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RSRPMRList_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P188_specs_377 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P188),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P188, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P188 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P188_tags_377[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P188_constr_377, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P188_377,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P188_specs_377	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P189_379[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P189_specs_379 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P189),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P189, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P189 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P189_tags_379[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P189_constr_379, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P189_379,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P189_specs_379	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P190_381[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P190_specs_381 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P190),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P190, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P190 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P190_tags_381[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P190_constr_381, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P190_381,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P190_specs_381	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P191_383[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCell_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P191_specs_383 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P191),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P191, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P191 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P191_tags_383[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P191_constr_383, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P191_383,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P191_specs_383	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P192_385[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCell_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P192_specs_385 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P192),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P192, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P192 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P192_tags_385[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P192_constr_385, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P192_385,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P192_specs_385	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P193_387[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P193_specs_387 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P193),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P193, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P193 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P193_tags_387[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P193_constr_387, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P193_387,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P193_specs_387	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P194_389[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SpecialSubframe_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P194_specs_389 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P194),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P194, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P194 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P194_tags_389[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P194_constr_389, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P194_389,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P194_specs_389	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P195_391[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SubbandCQI_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P195_specs_391 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P195),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P195, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P195 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P195_tags_391[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P195_constr_391, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P195_391,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P195_specs_391	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P196_393[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P196_specs_393 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P196),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P196, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P196 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P196_tags_393[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P196_constr_393, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P196_393,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P196_specs_393	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P197_395[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P197_specs_395 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P197),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P197, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P197 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P197_tags_395[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P197_constr_395, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P197_395,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P197_specs_395	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P198_397[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SubbandCQIItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P198_specs_397 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P198),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P198, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P198 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P198_tags_397[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P198_constr_397, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P198_397,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P198_specs_397	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P199_399[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SULInformation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P199_specs_399 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P199),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P199, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P199 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P199_tags_399[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P199_constr_399, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P199_399,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P199_specs_399	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P200_401[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P200_specs_401 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P200),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P200, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P200 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P200_tags_401[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P200_constr_401, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P200_401,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P200_specs_401	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P201_403[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TABasedMDT_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P201_specs_403 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P201),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P201, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P201 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P201_tags_403[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P201_constr_403, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P201_403,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P201_specs_403	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P202_405[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TAIBasedMDT_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P202_specs_405 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P202),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P202, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P202 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P202_tags_405[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P202_constr_405, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P202_405,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P202_specs_405	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P203_407[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TAI_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P203_specs_407 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P203),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P203, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P203 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P203_tags_407[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P203_constr_407, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P203_407,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P203_specs_407	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P204_409[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TABasedQMC_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P204_specs_409 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P204),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P204, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P204 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P204_tags_409[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P204_constr_409, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P204_409,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P204_specs_409	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P205_411[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TAIBasedQMC_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P205_specs_411 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P205),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P205, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P205 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P205_tags_411[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P205_constr_411, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P205_411,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P205_specs_411	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P206_413[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TDD_Info_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P206_specs_413 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P206),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P206, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P206 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P206_tags_413[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P206_constr_413, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P206_413,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P206_specs_413	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P207_415[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TraceActivation_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P207_specs_415 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P207),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P207, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P207 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P207_tags_415[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P207_constr_415, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P207_415,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P207_specs_415	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P208_417[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Tunnel_Information_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P208_specs_417 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P208),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P208, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P208 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P208_tags_417[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P208_constr_417, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P208_417,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P208_specs_417	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P209_419[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P209_specs_419 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P209),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P209, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P209 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P209_tags_419[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P209_constr_419, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P209_419,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P209_specs_419	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P210_421[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P210_specs_421 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P210),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P210, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P210 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P210_tags_421[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P210_constr_421, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P210_421,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P210_specs_421	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P211_423[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UESecurityCapabilities_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P211_specs_423 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P211),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P211, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P211 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P211_tags_423[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P211_constr_423, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P211_423,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P211_specs_423	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P212_425[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P212_specs_425 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P212),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P212, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P212 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P212_tags_425[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P212_constr_425, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P212_425,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P212_specs_425	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P213_427[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P213_specs_427 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P213),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P213, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P213 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P213_tags_427[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P213_constr_427, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P213_427,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P213_specs_427	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P214_429[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ULandDLSharing_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P214_specs_429 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P214),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P214, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P214 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P214_tags_429[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P214_constr_429, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P214_429,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P214_specs_429	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P215_431[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ULConfiguration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P215_specs_431 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P215),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P215, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P215 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P215_tags_431[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P215_constr_431, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P215_431,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P215_specs_431	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P216_433[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P216_specs_433 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P216),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P216, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P216 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P216_tags_433[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P216_constr_433, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P216_433,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P216_specs_433	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P217_435[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ULOnlySharing_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P217_specs_435 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P217),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P217, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P217 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P217_tags_435[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P217_constr_435, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P217_435,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P217_specs_435	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P218_437[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UsableABSInformationFDD_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P218_specs_437 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P218),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P218, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P218 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P218_tags_437[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P218_constr_437, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P218_437,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P218_specs_437	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P219_439[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UsableABSInformationTDD_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P219_specs_439 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P219),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P219, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P219 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P219_tags_439[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P219_constr_439, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P219_439,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P219_specs_439	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P220_441[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_V2XServicesAuthorized_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P220_specs_441 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P220),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P220, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P220 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P220_tags_441[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P220_constr_441, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P220_441,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P220_specs_441	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P221_443[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_WidebandCQI_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P221_specs_443 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P221),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P221, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P221 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P221_tags_443[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P221_constr_443, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P221_443,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P221_specs_443	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P222_445[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P222_specs_445 = {
+	sizeof(struct X2N_ProtocolExtensionContainer_8231P222),
+	offsetof(struct X2N_ProtocolExtensionContainer_8231P222, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P222 = {
+	"ProtocolExtensionContainer",
+	"ProtocolExtensionContainer",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445,
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445[0]), /* 1 */
+	asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445)
+		/sizeof(asn_DEF_X2N_ProtocolExtensionContainer_8231P222_tags_445[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolExtensionContainer_8231P222_constr_445, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolExtensionContainer_8231P222_445,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolExtensionContainer_8231P222_specs_445	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolExtensionContainer.h b/asn1c_defs/X2N_ProtocolExtensionContainer.h
new file mode 100644
index 0000000..fdc0976
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolExtensionContainer.h
@@ -0,0 +1,2486 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolExtensionContainer_H_
+#define	_X2N_ProtocolExtensionContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_UE_ContextInformation_ExtIEs;
+struct X2N_E_RABs_ToBeSetup_ItemExtIEs;
+struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs;
+struct X2N_UE_ContextReferenceAtWT_ItemExtIEs;
+struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs;
+struct X2N_E_RABs_Admitted_Item_ExtIEs;
+struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs;
+struct X2N_CellInformation_Item_ExtIEs;
+struct X2N_ServedCellsToModify_Item_ExtIEs;
+struct X2N_CellToReport_Item_ExtIEs;
+struct X2N_MeasurementInitiationResult_Item_ExtIEs;
+struct X2N_MeasurementFailureCause_Item_ExtIEs;
+struct X2N_CompleteFailureCauseInformation_Item_ExtIEs;
+struct X2N_CellMeasurementResult_Item_ExtIEs;
+struct X2N_ServedCellsToActivate_Item_ExtIEs;
+struct X2N_ActivatedCellList_Item_ExtIEs;
+struct X2N_RNL_Header_Item_ExtIEs;
+struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs;
+struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs;
+struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs;
+struct X2N_UE_ContextInformationSeNBModReqExtIEs;
+struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs;
+struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs;
+struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs;
+struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs;
+struct X2N_UE_ContextInformationRetrieve_ExtIEs;
+struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs;
+struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs;
+struct X2N_UE_ContextInformationSgNBModReqExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs;
+struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs;
+struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs;
+struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs;
+struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs;
+struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs;
+struct X2N_En_gNBServedCells_ExtIEs;
+struct X2N_ServedNRCell_Information_ExtIEs;
+struct X2N_FDD_InfoServedNRCell_Information_ExtIEs;
+struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs;
+struct X2N_TDD_InfoServedNRCell_Information_ExtIEs;
+struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs;
+struct X2N_NRNeighbour_Information_ExtIEs;
+struct X2N_Limited_list_ExtIEs;
+struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs;
+struct X2N_ServedNRCellsToModify_Item_ExtIEs;
+struct X2N_ServedNRCellsToActivate_Item_ExtIEs;
+struct X2N_ActivatedNRCellList_Item_ExtIEs;
+struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs;
+struct X2N_ABSInformationFDD_ExtIEs;
+struct X2N_ABSInformationTDD_ExtIEs;
+struct X2N_ABS_Status_ExtIEs;
+struct X2N_AdditionalSpecialSubframe_Info_ExtIEs;
+struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs;
+struct X2N_AllocationAndRetentionPriority_ExtIEs;
+struct X2N_AS_SecurityInformation_ExtIEs;
+struct X2N_BluetoothMeasurementConfiguration_ExtIEs;
+struct X2N_CellBasedMDT_ExtIEs;
+struct X2N_CellBasedQMC_ExtIEs;
+struct X2N_CellReplacingInfo_ExtIEs;
+struct X2N_CellType_ExtIEs;
+struct X2N_CNTypeRestrictionsItem_ExtIEs;
+struct X2N_CoMPHypothesisSetItem_ExtIEs;
+struct X2N_CoMPInformation_ExtIEs;
+struct X2N_CoMPInformationItem_ExtIEs;
+struct X2N_CoMPInformationStartTime_ExtIEs;
+struct X2N_CompositeAvailableCapacity_ExtIEs;
+struct X2N_CompositeAvailableCapacityGroup_ExtIEs;
+struct X2N_COUNTvalue_ExtIEs;
+struct X2N_COUNTValueExtended_ExtIEs;
+struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs;
+struct X2N_CriticalityDiagnostics_ExtIEs;
+struct X2N_CriticalityDiagnostics_IE_List_ExtIEs;
+struct X2N_CSIReportList_ExtIEs;
+struct X2N_CSIReportPerCSIProcess_ExtIEs;
+struct X2N_CSIReportPerCSIProcessItem_ExtIEs;
+struct X2N_DataTrafficResourceIndication_ExtIEs;
+struct X2N_DeliveryStatus_ExtIEs;
+struct X2N_DynamicNAICSInformation_ExtIEs;
+struct X2N_ECGI_ExtIEs;
+struct X2N_EnhancedRNTP_ExtIEs;
+struct X2N_EnhancedRNTPStartTime_ExtIEs;
+struct X2N_EN_DC_ResourceConfigurationExtIEs;
+struct X2N_ERABActivityNotifyItem_ExtIEs;
+struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs;
+struct X2N_E_RAB_Item_ExtIEs;
+struct X2N_E_RABUsageReport_Item_ExtIEs;
+struct X2N_ExpectedUEBehaviour_ExtIEs;
+struct X2N_ExpectedUEActivityBehaviour_ExtIEs;
+struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs;
+struct X2N_FDD_Info_ExtIEs;
+struct X2N_ForbiddenTAs_Item_ExtIEs;
+struct X2N_ForbiddenLAs_Item_ExtIEs;
+struct X2N_FreqBandNrItem_ExtIEs;
+struct X2N_GBR_QosInformation_ExtIEs;
+struct X2N_GlobalENB_ID_ExtIEs;
+struct X2N_GlobalGNB_ID_ExtIEs;
+struct X2N_GTPtunnelEndpoint_ExtIEs;
+struct X2N_GU_Group_ID_ExtIEs;
+struct X2N_GUMMEI_ExtIEs;
+struct X2N_HandoverRestrictionList_ExtIEs;
+struct X2N_HWLoadIndicator_ExtIEs;
+struct X2N_LastVisitedEUTRANCellInformation_ExtIEs;
+struct X2N_LocationReportingInformation_ExtIEs;
+struct X2N_M1PeriodicReporting_ExtIEs;
+struct X2N_M1ThresholdEventA2_ExtIEs;
+struct X2N_M3Configuration_ExtIEs;
+struct X2N_M4Configuration_ExtIEs;
+struct X2N_M5Configuration_ExtIEs;
+struct X2N_M6Configuration_ExtIEs;
+struct X2N_M7Configuration_ExtIEs;
+struct X2N_MDT_Configuration_ExtIEs;
+struct X2N_MeNBResourceCoordinationInformationExtIEs;
+struct X2N_MBSFN_Subframe_Info_ExtIEs;
+struct X2N_BandInfo_ExtIEs;
+struct X2N_SplitSRB_ExtIEs;
+struct X2N_UENRMeasurement_ExtIEs;
+struct X2N_Neighbour_Information_ExtIEs;
+struct X2N_NRFreqInfo_ExtIEs;
+struct X2N_NRCGI_ExtIEs;
+struct X2N_NR_TxBW_ExtIEs;
+struct X2N_NRUESecurityCapabilities_ExtIEs;
+struct X2N_PRACH_Configuration_ExtIEs;
+struct X2N_PLMNAreaBasedQMC_ExtIEs;
+struct X2N_ProSeAuthorized_ExtIEs;
+struct X2N_ProtectedEUTRAResourceIndication_ExtIEs;
+struct X2N_ProtectedFootprintTimePattern_ExtIEs;
+struct X2N_ProtectedResourceList_Item_ExtIEs;
+struct X2N_RadioResourceStatus_ExtIEs;
+struct X2N_RelativeNarrowbandTxPower_ExtIEs;
+struct X2N_ReservedSubframePattern_ExtIEs;
+struct X2N_RLC_Status_ExtIEs;
+struct X2N_RSRPMeasurementResult_ExtIEs;
+struct X2N_RSRPMRList_ExtIEs;
+struct X2N_S1TNLLoadIndicator_ExtIEs;
+struct X2N_SecondaryRATUsageReport_Item_ExtIEs;
+struct X2N_ServedCell_ExtIEs;
+struct X2N_ServedCell_Information_ExtIEs;
+struct X2N_SgNBResourceCoordinationInformationExtIEs;
+struct X2N_SpecialSubframe_Info_ExtIEs;
+struct X2N_SubbandCQI_ExtIEs;
+struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs;
+struct X2N_ScheduledCommunicationTime_ExtIEs;
+struct X2N_SubbandCQIItem_ExtIEs;
+struct X2N_SULInformation_ExtIEs;
+struct X2N_SupportedSULFreqBandItem_ExtIEs;
+struct X2N_TABasedMDT_ExtIEs;
+struct X2N_TAIBasedMDT_ExtIEs;
+struct X2N_TAI_Item_ExtIEs;
+struct X2N_TABasedQMC_ExtIEs;
+struct X2N_TAIBasedQMC_ExtIEs;
+struct X2N_TDD_Info_ExtIEs;
+struct X2N_TraceActivation_ExtIEs;
+struct X2N_Tunnel_Information_ExtIEs;
+struct X2N_UEAggregate_MaximumBitrate_ExtIEs;
+struct X2N_UEAppLayerMeasConfig_ExtIEs;
+struct X2N_UESecurityCapabilities_ExtIEs;
+struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs;
+struct X2N_UEsToBeResetList_Item_ExtIEs;
+struct X2N_ULandDLSharing_ExtIEs;
+struct X2N_ULConfiguration_ExtIEs;
+struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs;
+struct X2N_ULOnlySharing_ExtIEs;
+struct X2N_UsableABSInformationFDD_ExtIEs;
+struct X2N_UsableABSInformationTDD_ExtIEs;
+struct X2N_V2XServicesAuthorized_ExtIEs;
+struct X2N_WidebandCQI_ExtIEs;
+struct X2N_WLANMeasurementConfiguration_ExtIEs;
+
+/* X2N_ProtocolExtensionContainer */
+typedef struct X2N_ProtocolExtensionContainer_8231P0 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P0_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P1 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeSetup_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P1_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P2 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P2_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P3 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P3_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P4 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P4_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P5 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P5_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P6 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P6_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P7 {
+	A_SEQUENCE_OF(struct X2N_CellInformation_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P7_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P8 {
+	A_SEQUENCE_OF(struct X2N_ServedCellsToModify_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P8_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P9 {
+	A_SEQUENCE_OF(struct X2N_CellToReport_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P9_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P10 {
+	A_SEQUENCE_OF(struct X2N_MeasurementInitiationResult_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P10_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P11 {
+	A_SEQUENCE_OF(struct X2N_MeasurementFailureCause_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P11_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P12 {
+	A_SEQUENCE_OF(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P12_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P13 {
+	A_SEQUENCE_OF(struct X2N_CellMeasurementResult_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P13_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P14 {
+	A_SEQUENCE_OF(struct X2N_ServedCellsToActivate_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P14_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P15 {
+	A_SEQUENCE_OF(struct X2N_ActivatedCellList_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P15_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P16 {
+	A_SEQUENCE_OF(struct X2N_RNL_Header_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P16_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P17 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P17_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P18 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P18_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P19 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P19_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P20 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P20_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P21 {
+	A_SEQUENCE_OF(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P21_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P22 {
+	A_SEQUENCE_OF(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P22_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P23 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextInformationSeNBModReqExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P23_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P24 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P24_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P25 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P25_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P26 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P26_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P27 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P27_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P28 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P28_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P29 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P29_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P30 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P30_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P31 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P31_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P32 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P32_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P33 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P33_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P34 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P34_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P35 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P35_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P36 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P36_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P37 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P37_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P38 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P38_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P39 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P39_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P40 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P40_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P41 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P41_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P42 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextInformationRetrieve_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P42_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P43 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P43_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P44 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P44_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P45 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P45_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P46 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P46_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P47 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P47_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P48 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P48_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P49 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P49_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P50 {
+	A_SEQUENCE_OF(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P50_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P51 {
+	A_SEQUENCE_OF(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P51_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P52 {
+	A_SEQUENCE_OF(struct X2N_UE_ContextInformationSgNBModReqExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P52_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P53 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P53_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P54 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P54_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P55 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P55_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P56 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P56_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P57 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P57_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P58 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P58_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P59 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P59_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P60 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P60_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P61 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P61_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P62 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P62_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P63 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P63_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P64 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P64_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P65 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P65_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P66 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P66_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P67 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P67_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P68 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P68_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P69 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P69_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P70 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P70_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P71 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P71_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P72 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P72_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P73 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P73_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P74 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P74_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P75 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P75_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P76 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P76_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P77 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P77_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P78 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P78_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P79 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P79_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P80 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P80_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P81 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P81_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P82 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P82_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P83 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P83_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P84 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P84_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P85 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P85_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P86 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P86_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P87 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P87_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P88 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P88_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P89 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P89_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P90 {
+	A_SEQUENCE_OF(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P90_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P91 {
+	A_SEQUENCE_OF(struct X2N_En_gNBServedCells_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P91_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P92 {
+	A_SEQUENCE_OF(struct X2N_ServedNRCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P92_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P93 {
+	A_SEQUENCE_OF(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P93_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P94 {
+	A_SEQUENCE_OF(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P94_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P95 {
+	A_SEQUENCE_OF(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P95_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P96 {
+	A_SEQUENCE_OF(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P96_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P97 {
+	A_SEQUENCE_OF(struct X2N_NRNeighbour_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P97_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P98 {
+	A_SEQUENCE_OF(struct X2N_Limited_list_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P98_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P99 {
+	A_SEQUENCE_OF(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P99_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P100 {
+	A_SEQUENCE_OF(struct X2N_ServedNRCellsToModify_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P100_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P101 {
+	A_SEQUENCE_OF(struct X2N_ServedNRCellsToActivate_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P101_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P102 {
+	A_SEQUENCE_OF(struct X2N_ActivatedNRCellList_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P102_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P103 {
+	A_SEQUENCE_OF(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P103_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P104 {
+	A_SEQUENCE_OF(struct X2N_ABSInformationFDD_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P104_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P105 {
+	A_SEQUENCE_OF(struct X2N_ABSInformationTDD_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P105_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P106 {
+	A_SEQUENCE_OF(struct X2N_ABS_Status_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P106_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P107 {
+	A_SEQUENCE_OF(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P107_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P108 {
+	A_SEQUENCE_OF(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P108_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P109 {
+	A_SEQUENCE_OF(struct X2N_AllocationAndRetentionPriority_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P109_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P110 {
+	A_SEQUENCE_OF(struct X2N_AS_SecurityInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P110_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P111 {
+	A_SEQUENCE_OF(struct X2N_BluetoothMeasurementConfiguration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P111_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P112 {
+	A_SEQUENCE_OF(struct X2N_CellBasedMDT_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P112_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P113 {
+	A_SEQUENCE_OF(struct X2N_CellBasedQMC_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P113_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P114 {
+	A_SEQUENCE_OF(struct X2N_CellReplacingInfo_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P114_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P115 {
+	A_SEQUENCE_OF(struct X2N_CellType_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P115_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P116 {
+	A_SEQUENCE_OF(struct X2N_CNTypeRestrictionsItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P116_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P117 {
+	A_SEQUENCE_OF(struct X2N_CoMPHypothesisSetItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P117_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P118 {
+	A_SEQUENCE_OF(struct X2N_CoMPInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P118_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P119 {
+	A_SEQUENCE_OF(struct X2N_CoMPInformationItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P119_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P120 {
+	A_SEQUENCE_OF(struct X2N_CoMPInformationStartTime_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P120_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P121 {
+	A_SEQUENCE_OF(struct X2N_CompositeAvailableCapacity_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P121_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P122 {
+	A_SEQUENCE_OF(struct X2N_CompositeAvailableCapacityGroup_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P122_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P123 {
+	A_SEQUENCE_OF(struct X2N_COUNTvalue_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P123_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P124 {
+	A_SEQUENCE_OF(struct X2N_COUNTValueExtended_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P124_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P125 {
+	A_SEQUENCE_OF(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P125_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P126 {
+	A_SEQUENCE_OF(struct X2N_CriticalityDiagnostics_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P126_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P127 {
+	A_SEQUENCE_OF(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P127_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P128 {
+	A_SEQUENCE_OF(struct X2N_CSIReportList_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P128_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P129 {
+	A_SEQUENCE_OF(struct X2N_CSIReportPerCSIProcess_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P129_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P130 {
+	A_SEQUENCE_OF(struct X2N_CSIReportPerCSIProcessItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P130_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P131 {
+	A_SEQUENCE_OF(struct X2N_DataTrafficResourceIndication_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P131_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P132 {
+	A_SEQUENCE_OF(struct X2N_DeliveryStatus_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P132_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P133 {
+	A_SEQUENCE_OF(struct X2N_DynamicNAICSInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P133_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P134 {
+	A_SEQUENCE_OF(struct X2N_ECGI_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P134_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P135 {
+	A_SEQUENCE_OF(struct X2N_EnhancedRNTP_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P135_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P136 {
+	A_SEQUENCE_OF(struct X2N_EnhancedRNTPStartTime_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P136_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P137 {
+	A_SEQUENCE_OF(struct X2N_EN_DC_ResourceConfigurationExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P137_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P138 {
+	A_SEQUENCE_OF(struct X2N_ERABActivityNotifyItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P138_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P139 {
+	A_SEQUENCE_OF(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P139_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P140 {
+	A_SEQUENCE_OF(struct X2N_E_RAB_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P140_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P141 {
+	A_SEQUENCE_OF(struct X2N_E_RABUsageReport_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P141_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P142 {
+	A_SEQUENCE_OF(struct X2N_ExpectedUEBehaviour_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P142_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P143 {
+	A_SEQUENCE_OF(struct X2N_ExpectedUEActivityBehaviour_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P143_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P144 {
+	A_SEQUENCE_OF(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P144_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P145 {
+	A_SEQUENCE_OF(struct X2N_FDD_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P145_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P146 {
+	A_SEQUENCE_OF(struct X2N_ForbiddenTAs_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P146_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P147 {
+	A_SEQUENCE_OF(struct X2N_ForbiddenLAs_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P147_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P148 {
+	A_SEQUENCE_OF(struct X2N_FreqBandNrItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P148_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P149 {
+	A_SEQUENCE_OF(struct X2N_GBR_QosInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P149_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P150 {
+	A_SEQUENCE_OF(struct X2N_GlobalENB_ID_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P150_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P151 {
+	A_SEQUENCE_OF(struct X2N_GlobalGNB_ID_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P151_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P152 {
+	A_SEQUENCE_OF(struct X2N_GTPtunnelEndpoint_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P152_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P153 {
+	A_SEQUENCE_OF(struct X2N_GU_Group_ID_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P153_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P154 {
+	A_SEQUENCE_OF(struct X2N_GUMMEI_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P154_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P155 {
+	A_SEQUENCE_OF(struct X2N_HandoverRestrictionList_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P155_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P156 {
+	A_SEQUENCE_OF(struct X2N_HWLoadIndicator_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P156_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P157 {
+	A_SEQUENCE_OF(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P157_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P158 {
+	A_SEQUENCE_OF(struct X2N_LocationReportingInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P158_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P159 {
+	A_SEQUENCE_OF(struct X2N_M1PeriodicReporting_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P159_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P160 {
+	A_SEQUENCE_OF(struct X2N_M1ThresholdEventA2_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P160_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P161 {
+	A_SEQUENCE_OF(struct X2N_M3Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P161_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P162 {
+	A_SEQUENCE_OF(struct X2N_M4Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P162_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P163 {
+	A_SEQUENCE_OF(struct X2N_M5Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P163_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P164 {
+	A_SEQUENCE_OF(struct X2N_M6Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P164_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P165 {
+	A_SEQUENCE_OF(struct X2N_M7Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P165_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P166 {
+	A_SEQUENCE_OF(struct X2N_MDT_Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P166_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P167 {
+	A_SEQUENCE_OF(struct X2N_MeNBResourceCoordinationInformationExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P167_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P168 {
+	A_SEQUENCE_OF(struct X2N_MBSFN_Subframe_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P168_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P169 {
+	A_SEQUENCE_OF(struct X2N_BandInfo_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P169_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P170 {
+	A_SEQUENCE_OF(struct X2N_SplitSRB_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P170_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P171 {
+	A_SEQUENCE_OF(struct X2N_UENRMeasurement_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P171_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P172 {
+	A_SEQUENCE_OF(struct X2N_Neighbour_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P172_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P173 {
+	A_SEQUENCE_OF(struct X2N_NRFreqInfo_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P173_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P174 {
+	A_SEQUENCE_OF(struct X2N_NRCGI_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P174_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P175 {
+	A_SEQUENCE_OF(struct X2N_NR_TxBW_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P175_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P176 {
+	A_SEQUENCE_OF(struct X2N_NRUESecurityCapabilities_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P176_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P177 {
+	A_SEQUENCE_OF(struct X2N_PRACH_Configuration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P177_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P178 {
+	A_SEQUENCE_OF(struct X2N_PLMNAreaBasedQMC_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P178_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P179 {
+	A_SEQUENCE_OF(struct X2N_ProSeAuthorized_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P179_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P180 {
+	A_SEQUENCE_OF(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P180_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P181 {
+	A_SEQUENCE_OF(struct X2N_ProtectedFootprintTimePattern_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P181_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P182 {
+	A_SEQUENCE_OF(struct X2N_ProtectedResourceList_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P182_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P183 {
+	A_SEQUENCE_OF(struct X2N_RadioResourceStatus_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P183_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P184 {
+	A_SEQUENCE_OF(struct X2N_RelativeNarrowbandTxPower_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P184_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P185 {
+	A_SEQUENCE_OF(struct X2N_ReservedSubframePattern_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P185_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P186 {
+	A_SEQUENCE_OF(struct X2N_RLC_Status_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P186_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P187 {
+	A_SEQUENCE_OF(struct X2N_RSRPMeasurementResult_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P187_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P188 {
+	A_SEQUENCE_OF(struct X2N_RSRPMRList_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P188_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P189 {
+	A_SEQUENCE_OF(struct X2N_S1TNLLoadIndicator_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P189_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P190 {
+	A_SEQUENCE_OF(struct X2N_SecondaryRATUsageReport_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P190_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P191 {
+	A_SEQUENCE_OF(struct X2N_ServedCell_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P191_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P192 {
+	A_SEQUENCE_OF(struct X2N_ServedCell_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P192_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P193 {
+	A_SEQUENCE_OF(struct X2N_SgNBResourceCoordinationInformationExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P193_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P194 {
+	A_SEQUENCE_OF(struct X2N_SpecialSubframe_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P194_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P195 {
+	A_SEQUENCE_OF(struct X2N_SubbandCQI_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P195_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P196 {
+	A_SEQUENCE_OF(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P196_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P197 {
+	A_SEQUENCE_OF(struct X2N_ScheduledCommunicationTime_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P197_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P198 {
+	A_SEQUENCE_OF(struct X2N_SubbandCQIItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P198_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P199 {
+	A_SEQUENCE_OF(struct X2N_SULInformation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P199_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P200 {
+	A_SEQUENCE_OF(struct X2N_SupportedSULFreqBandItem_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P200_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P201 {
+	A_SEQUENCE_OF(struct X2N_TABasedMDT_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P201_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P202 {
+	A_SEQUENCE_OF(struct X2N_TAIBasedMDT_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P202_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P203 {
+	A_SEQUENCE_OF(struct X2N_TAI_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P203_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P204 {
+	A_SEQUENCE_OF(struct X2N_TABasedQMC_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P204_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P205 {
+	A_SEQUENCE_OF(struct X2N_TAIBasedQMC_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P205_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P206 {
+	A_SEQUENCE_OF(struct X2N_TDD_Info_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P206_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P207 {
+	A_SEQUENCE_OF(struct X2N_TraceActivation_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P207_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P208 {
+	A_SEQUENCE_OF(struct X2N_Tunnel_Information_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P208_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P209 {
+	A_SEQUENCE_OF(struct X2N_UEAggregate_MaximumBitrate_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P209_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P210 {
+	A_SEQUENCE_OF(struct X2N_UEAppLayerMeasConfig_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P210_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P211 {
+	A_SEQUENCE_OF(struct X2N_UESecurityCapabilities_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P211_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P212 {
+	A_SEQUENCE_OF(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P212_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P213 {
+	A_SEQUENCE_OF(struct X2N_UEsToBeResetList_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P213_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P214 {
+	A_SEQUENCE_OF(struct X2N_ULandDLSharing_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P214_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P215 {
+	A_SEQUENCE_OF(struct X2N_ULConfiguration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P215_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P216 {
+	A_SEQUENCE_OF(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P216_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P217 {
+	A_SEQUENCE_OF(struct X2N_ULOnlySharing_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P217_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P218 {
+	A_SEQUENCE_OF(struct X2N_UsableABSInformationFDD_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P218_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P219 {
+	A_SEQUENCE_OF(struct X2N_UsableABSInformationTDD_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P219_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P220 {
+	A_SEQUENCE_OF(struct X2N_V2XServicesAuthorized_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P220_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P221 {
+	A_SEQUENCE_OF(struct X2N_WidebandCQI_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P221_t;
+typedef struct X2N_ProtocolExtensionContainer_8231P222 {
+	A_SEQUENCE_OF(struct X2N_WLANMeasurementConfiguration_ExtIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolExtensionContainer_8231P222_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P0;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P0_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P1;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P1_3[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P1_constr_3;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P2;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P2_specs_5;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P2_5[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P2_constr_5;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P3;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P3_specs_7;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P3_7[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P3_constr_7;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P4;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P4_specs_9;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P4_9[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P4_constr_9;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P5;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P5_specs_11;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P5_11[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P5_constr_11;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P6;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P6_specs_13;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P6_13[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P6_constr_13;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P7;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P7_specs_15;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P7_15[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P7_constr_15;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P8;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P8_specs_17;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P8_17[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P8_constr_17;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P9;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P9_specs_19;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P9_19[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P9_constr_19;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P10;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P10_specs_21;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P10_21[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P10_constr_21;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P11;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P11_specs_23;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P11_23[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P11_constr_23;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P12;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P12_specs_25;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P12_25[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P12_constr_25;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P13;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P13_specs_27;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P13_27[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P13_constr_27;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P14;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P14_specs_29;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P14_29[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P14_constr_29;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P15;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P15_specs_31;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P15_31[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P15_constr_31;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P16;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P16_specs_33;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P16_33[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P16_constr_33;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P17;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P17_specs_35;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P17_35[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P17_constr_35;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P18;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P18_specs_37;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P18_37[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P18_constr_37;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P19;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P19_specs_39;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P19_39[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P19_constr_39;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P20;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P20_specs_41;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P20_41[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P20_constr_41;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P21;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P21_specs_43;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P21_43[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P21_constr_43;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P22;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P22_specs_45;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P22_45[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P22_constr_45;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P23;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P23_specs_47;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P23_47[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P23_constr_47;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P24;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P24_specs_49;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P24_49[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P24_constr_49;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P25;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P25_specs_51;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P25_51[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P25_constr_51;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P26;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P26_specs_53;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P26_53[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P26_constr_53;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P27;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P27_specs_55;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P27_55[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P27_constr_55;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P28;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P28_specs_57;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P28_57[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P28_constr_57;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P29;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P29_specs_59;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P29_59[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P29_constr_59;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P30;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P30_specs_61;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P30_61[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P30_constr_61;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P31;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P31_specs_63;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P31_63[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P31_constr_63;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P32;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P32_specs_65;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P32_65[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P32_constr_65;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P33;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P33_specs_67;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P33_67[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P33_constr_67;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P34;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P34_specs_69;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P34_69[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P34_constr_69;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P35;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P35_specs_71;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P35_71[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P35_constr_71;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P36;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P36_specs_73;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P36_73[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P36_constr_73;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P37;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P37_specs_75;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P37_75[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P37_constr_75;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P38;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P38_specs_77;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P38_77[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P38_constr_77;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P39;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P39_specs_79;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P39_79[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P39_constr_79;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P40;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P40_specs_81;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P40_81[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P40_constr_81;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P41;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P41_specs_83;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P41_83[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P41_constr_83;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P42;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P42_specs_85;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P42_85[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P42_constr_85;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P43;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P43_specs_87;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P43_87[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P43_constr_87;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P44;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P44_specs_89;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P44_89[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P44_constr_89;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P45;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P45_specs_91;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P45_91[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P45_constr_91;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P46;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P46_specs_93;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P46_93[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P46_constr_93;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P47;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P47_specs_95;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P47_95[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P47_constr_95;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P48;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P48_specs_97;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P48_97[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P48_constr_97;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P49;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P49_specs_99;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P49_99[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P49_constr_99;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P50;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P50_specs_101;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P50_101[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P50_constr_101;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P51;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P51_specs_103;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P51_103[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P51_constr_103;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P52;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P52_specs_105;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P52_105[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P52_constr_105;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P53;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P53_specs_107;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P53_107[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P53_constr_107;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P54;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P54_specs_109;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P54_109[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P54_constr_109;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P55;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P55_specs_111;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P55_111[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P55_constr_111;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P56;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P56_specs_113;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P56_113[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P56_constr_113;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P57;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P57_specs_115;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P57_115[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P57_constr_115;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P58;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P58_specs_117;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P58_117[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P58_constr_117;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P59;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P59_specs_119;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P59_119[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P59_constr_119;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P60;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P60_specs_121;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P60_121[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P60_constr_121;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P61;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P61_specs_123;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P61_123[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P61_constr_123;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P62;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P62_specs_125;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P62_125[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P62_constr_125;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P63;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P63_specs_127;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P63_127[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P63_constr_127;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P64;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P64_specs_129;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P64_129[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P64_constr_129;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P65;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P65_specs_131;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P65_131[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P65_constr_131;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P66;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P66_specs_133;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P66_133[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P66_constr_133;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P67;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P67_specs_135;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P67_135[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P67_constr_135;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P68;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P68_specs_137;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P68_137[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P68_constr_137;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P69;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P69_specs_139;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P69_139[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P69_constr_139;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P70;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P70_specs_141;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P70_141[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P70_constr_141;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P71;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P71_specs_143;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P71_143[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P71_constr_143;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P72;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P72_specs_145;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P72_145[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P72_constr_145;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P73;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P73_specs_147;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P73_147[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P73_constr_147;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P74;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P74_specs_149;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P74_149[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P74_constr_149;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P75;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P75_specs_151;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P75_151[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P75_constr_151;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P76;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P76_specs_153;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P76_153[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P76_constr_153;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P77;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P77_specs_155;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P77_155[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P77_constr_155;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P78;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P78_specs_157;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P78_157[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P78_constr_157;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P79;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P79_specs_159;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P79_159[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P79_constr_159;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P80;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P80_specs_161;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P80_161[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P80_constr_161;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P81;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P81_specs_163;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P81_163[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P81_constr_163;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P82;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P82_specs_165;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P82_165[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P82_constr_165;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P83;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P83_specs_167;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P83_167[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P83_constr_167;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P84;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P84_specs_169;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P84_169[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P84_constr_169;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P85;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P85_specs_171;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P85_171[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P85_constr_171;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P86;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P86_specs_173;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P86_173[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P86_constr_173;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P87;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P87_specs_175;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P87_175[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P87_constr_175;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P88;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P88_specs_177;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P88_177[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P88_constr_177;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P89;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P89_specs_179;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P89_179[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P89_constr_179;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P90;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P90_specs_181;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P90_181[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P90_constr_181;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P91;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P91_specs_183;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P91_183[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P91_constr_183;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P92;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P92_specs_185;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P92_185[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P92_constr_185;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P93;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P93_specs_187;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P93_187[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P93_constr_187;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P94;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P94_specs_189;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P94_189[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P94_constr_189;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P95;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P95_specs_191;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P95_191[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P95_constr_191;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P96;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P96_specs_193;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P96_193[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P96_constr_193;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P97;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P97_specs_195;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P97_195[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P97_constr_195;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P98;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P98_specs_197;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P98_197[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P98_constr_197;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P99;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P99_specs_199;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P99_199[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P99_constr_199;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P100;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P100_specs_201;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P100_201[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P100_constr_201;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P101;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P101_specs_203;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P101_203[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P101_constr_203;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P102;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P102_specs_205;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P102_205[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P102_constr_205;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P103;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P103_specs_207;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P103_207[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P103_constr_207;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P104;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P104_specs_209;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P104_209[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P104_constr_209;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P105;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P105_specs_211;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P105_211[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P105_constr_211;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P106;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P106_specs_213;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P106_213[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P106_constr_213;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P107;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P107_specs_215;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P107_215[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P107_constr_215;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P108;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P108_specs_217;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P108_217[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P108_constr_217;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P109;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P109_specs_219;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P109_219[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P109_constr_219;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P110;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P110_specs_221;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P110_221[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P110_constr_221;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P111;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P111_specs_223;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P111_223[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P111_constr_223;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P112;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P112_specs_225;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P112_225[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P112_constr_225;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P113;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P113_specs_227;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P113_227[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P113_constr_227;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P114;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P114_specs_229;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P114_229[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P114_constr_229;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P115;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P115_specs_231;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P115_231[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P115_constr_231;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P116;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P116_specs_233;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P116_233[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P116_constr_233;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P117;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P117_specs_235;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P117_235[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P117_constr_235;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P118;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P118_specs_237;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P118_237[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P118_constr_237;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P119;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P119_specs_239;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P119_239[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P119_constr_239;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P120;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P120_specs_241;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P120_241[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P120_constr_241;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P121;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P121_specs_243;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P121_243[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P121_constr_243;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P122;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P122_specs_245;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P122_245[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P122_constr_245;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P123;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P123_specs_247;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P123_247[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P123_constr_247;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P124;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P124_specs_249;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P124_249[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P124_constr_249;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P125;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P125_specs_251;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P125_251[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P125_constr_251;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P126;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P126_specs_253;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P126_253[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P126_constr_253;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P127;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P127_specs_255;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P127_255[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P127_constr_255;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P128;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P128_specs_257;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P128_257[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P128_constr_257;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P129;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P129_specs_259;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P129_259[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P129_constr_259;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P130;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P130_specs_261;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P130_261[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P130_constr_261;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P131;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P131_specs_263;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P131_263[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P131_constr_263;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P132;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P132_specs_265;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P132_265[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P132_constr_265;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P133;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P133_specs_267;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P133_267[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P133_constr_267;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P134;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P134_specs_269;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P134_269[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P134_constr_269;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P135;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P135_specs_271;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P135_271[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P135_constr_271;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P136;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P136_specs_273;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P136_273[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P136_constr_273;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P137;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P137_specs_275;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P137_275[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P137_constr_275;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P138;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P138_specs_277;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P138_277[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P138_constr_277;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P139;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P139_specs_279;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P139_279[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P139_constr_279;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P140;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P140_specs_281;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P140_281[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P140_constr_281;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P141;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P141_specs_283;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P141_283[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P141_constr_283;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P142;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P142_specs_285;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P142_285[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P142_constr_285;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P143;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P143_specs_287;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P143_287[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P143_constr_287;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P144;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P144_specs_289;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P144_289[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P144_constr_289;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P145;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P145_specs_291;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P145_291[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P145_constr_291;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P146;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P146_specs_293;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P146_293[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P146_constr_293;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P147;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P147_specs_295;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P147_295[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P147_constr_295;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P148;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P148_specs_297;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P148_297[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P148_constr_297;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P149;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P149_specs_299;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P149_299[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P149_constr_299;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P150;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P150_specs_301;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P150_301[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P150_constr_301;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P151;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P151_specs_303;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P151_303[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P151_constr_303;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P152;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P152_specs_305;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P152_305[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P152_constr_305;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P153;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P153_specs_307;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P153_307[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P153_constr_307;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P154;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P154_specs_309;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P154_309[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P154_constr_309;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P155;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P155_specs_311;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P155_311[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P155_constr_311;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P156;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P156_specs_313;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P156_313[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P156_constr_313;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P157;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P157_specs_315;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P157_315[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P157_constr_315;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P158;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P158_specs_317;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P158_317[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P158_constr_317;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P159;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P159_specs_319;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P159_319[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P159_constr_319;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P160;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P160_specs_321;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P160_321[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P160_constr_321;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P161;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P161_specs_323;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P161_323[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P161_constr_323;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P162;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P162_specs_325;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P162_325[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P162_constr_325;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P163;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P163_specs_327;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P163_327[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P163_constr_327;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P164;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P164_specs_329;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P164_329[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P164_constr_329;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P165;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P165_specs_331;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P165_331[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P165_constr_331;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P166;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P166_specs_333;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P166_333[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P166_constr_333;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P167;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P167_specs_335;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P167_335[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P167_constr_335;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P168;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P168_specs_337;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P168_337[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P168_constr_337;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P169;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P169_specs_339;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P169_339[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P169_constr_339;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P170;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P170_specs_341;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P170_341[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P170_constr_341;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P171;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P171_specs_343;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P171_343[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P171_constr_343;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P172;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P172_specs_345;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P172_345[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P172_constr_345;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P173;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P173_specs_347;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P173_347[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P173_constr_347;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P174;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P174_specs_349;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P174_349[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P174_constr_349;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P175;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P175_specs_351;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P175_351[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P175_constr_351;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P176;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P176_specs_353;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P176_353[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P176_constr_353;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P177;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P177_specs_355;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P177_355[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P177_constr_355;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P178;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P178_specs_357;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P178_357[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P178_constr_357;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P179;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P179_specs_359;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P179_359[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P179_constr_359;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P180;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P180_specs_361;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P180_361[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P180_constr_361;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P181;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P181_specs_363;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P181_363[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P181_constr_363;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P182;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P182_specs_365;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P182_365[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P182_constr_365;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P183;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P183_specs_367;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P183_367[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P183_constr_367;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P184;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P184_specs_369;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P184_369[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P184_constr_369;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P185;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P185_specs_371;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P185_371[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P185_constr_371;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P186;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P186_specs_373;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P186_373[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P186_constr_373;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P187;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P187_specs_375;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P187_375[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P187_constr_375;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P188;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P188_specs_377;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P188_377[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P188_constr_377;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P189;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P189_specs_379;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P189_379[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P189_constr_379;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P190;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P190_specs_381;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P190_381[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P190_constr_381;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P191;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P191_specs_383;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P191_383[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P191_constr_383;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P192;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P192_specs_385;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P192_385[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P192_constr_385;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P193;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P193_specs_387;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P193_387[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P193_constr_387;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P194;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P194_specs_389;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P194_389[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P194_constr_389;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P195;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P195_specs_391;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P195_391[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P195_constr_391;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P196;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P196_specs_393;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P196_393[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P196_constr_393;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P197;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P197_specs_395;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P197_395[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P197_constr_395;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P198;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P198_specs_397;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P198_397[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P198_constr_397;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P199;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P199_specs_399;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P199_399[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P199_constr_399;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P200;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P200_specs_401;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P200_401[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P200_constr_401;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P201;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P201_specs_403;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P201_403[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P201_constr_403;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P202;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P202_specs_405;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P202_405[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P202_constr_405;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P203;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P203_specs_407;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P203_407[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P203_constr_407;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P204;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P204_specs_409;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P204_409[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P204_constr_409;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P205;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P205_specs_411;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P205_411[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P205_constr_411;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P206;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P206_specs_413;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P206_413[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P206_constr_413;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P207;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P207_specs_415;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P207_415[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P207_constr_415;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P208;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P208_specs_417;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P208_417[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P208_constr_417;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P209;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P209_specs_419;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P209_419[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P209_constr_419;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P210;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P210_specs_421;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P210_421[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P210_constr_421;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P211;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P211_specs_423;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P211_423[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P211_constr_423;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P212;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P212_specs_425;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P212_425[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P212_constr_425;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P213;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P213_specs_427;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P213_427[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P213_constr_427;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P214;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P214_specs_429;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P214_429[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P214_constr_429;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P215;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P215_specs_431;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P215_431[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P215_constr_431;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P216;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P216_specs_433;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P216_433[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P216_constr_433;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P217;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P217_specs_435;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P217_435[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P217_constr_435;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P218;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P218_specs_437;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P218_437[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P218_constr_437;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P219;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P219_specs_439;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P219_439[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P219_constr_439;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P220;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P220_specs_441;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P220_441[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P220_constr_441;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P221;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P221_specs_443;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P221_443[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P221_constr_443;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolExtensionContainer_8231P222;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolExtensionContainer_8231P222_specs_445;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolExtensionContainer_8231P222_445[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolExtensionContainer_8231P222_constr_445;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolExtensionContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolExtensionField.c b/asn1c_defs/X2N_ProtocolExtensionField.c
new file mode 100644
index 0000000..ab0490c
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolExtensionField.c
@@ -0,0 +1,41117 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolExtensionField.h"
+
+static const long asn_VAL_1_X2N_id_ManagementBasedMDTallowed = 74;
+static const long asn_VAL_1_X2N_ignore = 1;
+static const long asn_VAL_1_X2N_optional = 0;
+static const long asn_VAL_2_X2N_id_ManagementBasedMDTPLMNList = 89;
+static const long asn_VAL_2_X2N_ignore = 1;
+static const long asn_VAL_2_X2N_optional = 0;
+static const long asn_VAL_3_X2N_id_UESidelinkAggregateMaximumBitRate = 184;
+static const long asn_VAL_3_X2N_ignore = 1;
+static const long asn_VAL_3_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UE_ContextInformation_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_1_X2N_id_ManagementBasedMDTallowed },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_1_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ManagementBasedMDTallowed },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_1_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_2_X2N_id_ManagementBasedMDTPLMNList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_2_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MDTPLMNList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_2_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_3_X2N_id_UESidelinkAggregateMaximumBitRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_3_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_UESidelinkAggregateMaximumBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_3_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UE_ContextInformation_ExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_UE_ContextInformation_ExtIEs_1_rows }
+};
+static const long asn_VAL_4_X2N_id_BearerType = 171;
+static const long asn_VAL_4_X2N_reject = 0;
+static const long asn_VAL_4_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeSetup_ItemExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_4_X2N_id_BearerType },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_4_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_BearerType },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_4_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeSetup_ItemExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeSetup_ItemExtIEs_1_rows }
+};
+static const long asn_VAL_5_X2N_id_ReceiveStatusOfULPDCPSDUsExtended = 91;
+static const long asn_VAL_5_X2N_ignore = 1;
+static const long asn_VAL_5_X2N_optional = 0;
+static const long asn_VAL_6_X2N_id_ULCOUNTValueExtended = 92;
+static const long asn_VAL_6_X2N_ignore = 1;
+static const long asn_VAL_6_X2N_optional = 0;
+static const long asn_VAL_7_X2N_id_DLCOUNTValueExtended = 93;
+static const long asn_VAL_7_X2N_ignore = 1;
+static const long asn_VAL_7_X2N_optional = 0;
+static const long asn_VAL_8_X2N_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = 150;
+static const long asn_VAL_8_X2N_ignore = 1;
+static const long asn_VAL_8_X2N_optional = 0;
+static const long asn_VAL_9_X2N_id_ULCOUNTValuePDCP_SNlength18 = 151;
+static const long asn_VAL_9_X2N_ignore = 1;
+static const long asn_VAL_9_X2N_optional = 0;
+static const long asn_VAL_10_X2N_id_DLCOUNTValuePDCP_SNlength18 = 152;
+static const long asn_VAL_10_X2N_ignore = 1;
+static const long asn_VAL_10_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_5_X2N_id_ReceiveStatusOfULPDCPSDUsExtended },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_5_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_5_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_6_X2N_id_ULCOUNTValueExtended },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_6_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_COUNTValueExtended },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_6_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_7_X2N_id_DLCOUNTValueExtended },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_7_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_COUNTValueExtended },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_7_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_8_X2N_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_8_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_8_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_9_X2N_id_ULCOUNTValuePDCP_SNlength18 },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_9_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_COUNTvaluePDCP_SNlength18 },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_9_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_10_X2N_id_DLCOUNTValuePDCP_SNlength18 },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_10_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_COUNTvaluePDCP_SNlength18 },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_10_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1_rows }
+};
+static const long asn_VAL_11_X2N_id_ABSInformation = 61;
+static const long asn_VAL_11_X2N_ignore = 1;
+static const long asn_VAL_11_X2N_optional = 0;
+static const long asn_VAL_12_X2N_id_InvokeIndication = 62;
+static const long asn_VAL_12_X2N_ignore = 1;
+static const long asn_VAL_12_X2N_optional = 0;
+static const long asn_VAL_13_X2N_id_IntendedULDLConfiguration = 99;
+static const long asn_VAL_13_X2N_ignore = 1;
+static const long asn_VAL_13_X2N_optional = 0;
+static const long asn_VAL_14_X2N_id_ExtendedULInterferenceOverloadInfo = 100;
+static const long asn_VAL_14_X2N_ignore = 1;
+static const long asn_VAL_14_X2N_optional = 0;
+static const long asn_VAL_15_X2N_id_CoMPInformation = 108;
+static const long asn_VAL_15_X2N_ignore = 1;
+static const long asn_VAL_15_X2N_optional = 0;
+static const long asn_VAL_16_X2N_id_DynamicDLTransmissionInformation = 106;
+static const long asn_VAL_16_X2N_ignore = 1;
+static const long asn_VAL_16_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_CellInformation_Item_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_11_X2N_id_ABSInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_11_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ABSInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_11_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_12_X2N_id_InvokeIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_12_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_InvokeIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_12_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_13_X2N_id_IntendedULDLConfiguration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_13_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_SubframeAssignment },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_13_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_14_X2N_id_ExtendedULInterferenceOverloadInfo },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_14_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedULInterferenceOverloadInfo },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_14_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_15_X2N_id_CoMPInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_15_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CoMPInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_15_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_16_X2N_id_DynamicDLTransmissionInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_16_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DynamicDLTransmissionInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_16_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellInformation_Item_ExtIEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_CellInformation_Item_ExtIEs_1_rows }
+};
+static const long asn_VAL_17_X2N_id_DeactivationIndication = 59;
+static const long asn_VAL_17_X2N_ignore = 1;
+static const long asn_VAL_17_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ServedCellsToModify_Item_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_17_X2N_id_DeactivationIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_17_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DeactivationIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_17_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ServedCellsToModify_Item_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ServedCellsToModify_Item_ExtIEs_1_rows }
+};
+static const long asn_VAL_18_X2N_id_CompositeAvailableCapacityGroup = 42;
+static const long asn_VAL_18_X2N_ignore = 1;
+static const long asn_VAL_18_X2N_optional = 0;
+static const long asn_VAL_19_X2N_id_ABS_Status = 63;
+static const long asn_VAL_19_X2N_ignore = 1;
+static const long asn_VAL_19_X2N_optional = 0;
+static const long asn_VAL_20_X2N_id_RSRPMRList = 110;
+static const long asn_VAL_20_X2N_ignore = 1;
+static const long asn_VAL_20_X2N_optional = 0;
+static const long asn_VAL_21_X2N_id_CSIReportList = 146;
+static const long asn_VAL_21_X2N_ignore = 1;
+static const long asn_VAL_21_X2N_optional = 0;
+static const long asn_VAL_22_X2N_id_CellReportingIndicator = 170;
+static const long asn_VAL_22_X2N_ignore = 1;
+static const long asn_VAL_22_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_CellMeasurementResult_Item_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_18_X2N_id_CompositeAvailableCapacityGroup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_18_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CompositeAvailableCapacityGroup },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_18_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_19_X2N_id_ABS_Status },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_19_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ABS_Status },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_19_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_20_X2N_id_RSRPMRList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_20_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RSRPMRList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_20_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_21_X2N_id_CSIReportList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_21_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CSIReportList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_21_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_22_X2N_id_CellReportingIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_22_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CellReportingIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_22_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellMeasurementResult_Item_ExtIEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_CellMeasurementResult_Item_ExtIEs_1_rows }
+};
+static const long asn_VAL_23_X2N_id_Correlation_ID = 166;
+static const long asn_VAL_23_X2N_ignore = 1;
+static const long asn_VAL_23_X2N_optional = 0;
+static const long asn_VAL_24_X2N_id_SIPTO_Correlation_ID = 167;
+static const long asn_VAL_24_X2N_ignore = 1;
+static const long asn_VAL_24_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_23_X2N_id_Correlation_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_23_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Correlation_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_23_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_24_X2N_id_SIPTO_Correlation_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_24_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Correlation_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_24_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1_rows }
+};
+static const long asn_VAL_25_X2N_id_Correlation_ID = 166;
+static const long asn_VAL_25_X2N_ignore = 1;
+static const long asn_VAL_25_X2N_optional = 0;
+static const long asn_VAL_26_X2N_id_SIPTO_Correlation_ID = 167;
+static const long asn_VAL_26_X2N_ignore = 1;
+static const long asn_VAL_26_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_25_X2N_id_Correlation_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_25_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Correlation_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_25_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_26_X2N_id_SIPTO_Correlation_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_26_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Correlation_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_26_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1_rows }
+};
+static const long asn_VAL_27_X2N_id_UESidelinkAggregateMaximumBitRate = 184;
+static const long asn_VAL_27_X2N_ignore = 1;
+static const long asn_VAL_27_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UE_ContextInformationRetrieve_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_27_X2N_id_UESidelinkAggregateMaximumBitRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_27_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_UESidelinkAggregateMaximumBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_27_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UE_ContextInformationRetrieve_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_UE_ContextInformationRetrieve_ExtIEs_1_rows }
+};
+static const long asn_VAL_28_X2N_id_uL_GTPtunnelEndpoint = 185;
+static const long asn_VAL_28_X2N_reject = 0;
+static const long asn_VAL_28_X2N_mandatory = 2;
+static const long asn_VAL_29_X2N_id_dL_Forwarding = 306;
+static const long asn_VAL_29_X2N_ignore = 1;
+static const long asn_VAL_29_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_28_X2N_id_uL_GTPtunnelEndpoint },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_28_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_GTPtunnelEndpoint },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_28_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_29_X2N_id_dL_Forwarding },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_29_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DL_Forwarding },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_29_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1_rows }
+};
+static const long asn_VAL_30_X2N_id_RLCMode_transferred = 317;
+static const long asn_VAL_30_X2N_ignore = 1;
+static const long asn_VAL_30_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_30_X2N_id_RLCMode_transferred },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_30_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLCMode },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_30_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_31_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_31_X2N_ignore = 1;
+static const long asn_VAL_31_X2N_optional = 0;
+static const long asn_VAL_32_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_32_X2N_ignore = 1;
+static const long asn_VAL_32_X2N_optional = 0;
+static const long asn_VAL_33_X2N_id_duplicationActivation = 315;
+static const long asn_VAL_33_X2N_ignore = 1;
+static const long asn_VAL_33_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_31_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_31_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_31_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_32_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_32_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_32_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_33_X2N_id_duplicationActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_33_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DuplicationActivation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_33_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_34_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_34_X2N_ignore = 1;
+static const long asn_VAL_34_X2N_optional = 0;
+static const long asn_VAL_35_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_35_X2N_ignore = 1;
+static const long asn_VAL_35_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_34_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_34_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_34_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_35_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_35_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_35_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_36_X2N_id_lCID = 314;
+static const long asn_VAL_36_X2N_ignore = 1;
+static const long asn_VAL_36_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_36_X2N_id_lCID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_36_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_LCID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_36_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_37_X2N_id_SubscriberProfileIDforRFP = 275;
+static const long asn_VAL_37_X2N_ignore = 1;
+static const long asn_VAL_37_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UE_ContextInformationSgNBModReqExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_37_X2N_id_SubscriberProfileIDforRFP },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_37_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_SubscriberProfileIDforRFP },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_37_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UE_ContextInformationSgNBModReqExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_UE_ContextInformationSgNBModReqExtIEs_1_rows }
+};
+static const long asn_VAL_38_X2N_id_RLCMode_transferred = 317;
+static const long asn_VAL_38_X2N_ignore = 1;
+static const long asn_VAL_38_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_38_X2N_id_RLCMode_transferred },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_38_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLCMode },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_38_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_39_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_39_X2N_ignore = 1;
+static const long asn_VAL_39_X2N_optional = 0;
+static const long asn_VAL_40_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_40_X2N_ignore = 1;
+static const long asn_VAL_40_X2N_optional = 0;
+static const long asn_VAL_41_X2N_id_duplicationActivation = 315;
+static const long asn_VAL_41_X2N_ignore = 1;
+static const long asn_VAL_41_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_39_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_39_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_39_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_40_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_40_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_40_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_41_X2N_id_duplicationActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_41_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DuplicationActivation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_41_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_42_X2N_id_RLC_Status = 300;
+static const long asn_VAL_42_X2N_ignore = 1;
+static const long asn_VAL_42_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_42_X2N_id_RLC_Status },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_42_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLC_Status },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_42_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_43_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_43_X2N_ignore = 1;
+static const long asn_VAL_43_X2N_optional = 0;
+static const long asn_VAL_44_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_44_X2N_ignore = 1;
+static const long asn_VAL_44_X2N_optional = 0;
+static const long asn_VAL_45_X2N_id_secondarymeNBULGTPTEIDatPDCP = 313;
+static const long asn_VAL_45_X2N_ignore = 1;
+static const long asn_VAL_45_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_43_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_43_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_43_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_44_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_44_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_44_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_45_X2N_id_secondarymeNBULGTPTEIDatPDCP },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_45_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_GTPtunnelEndpoint },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_45_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_46_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_46_X2N_ignore = 1;
+static const long asn_VAL_46_X2N_optional = 0;
+static const long asn_VAL_47_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_47_X2N_ignore = 1;
+static const long asn_VAL_47_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_46_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_46_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_46_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_47_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_47_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_47_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_48_X2N_id_lCID = 314;
+static const long asn_VAL_48_X2N_ignore = 1;
+static const long asn_VAL_48_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_48_X2N_id_lCID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_48_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_LCID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_48_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_49_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_49_X2N_ignore = 1;
+static const long asn_VAL_49_X2N_optional = 0;
+static const long asn_VAL_50_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_50_X2N_ignore = 1;
+static const long asn_VAL_50_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_49_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_49_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_49_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_50_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_50_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_50_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_51_X2N_id_secondarysgNBDLGTPTEIDatPDCP = 312;
+static const long asn_VAL_51_X2N_ignore = 1;
+static const long asn_VAL_51_X2N_optional = 0;
+static const long asn_VAL_52_X2N_id_RLC_Status = 300;
+static const long asn_VAL_52_X2N_ignore = 1;
+static const long asn_VAL_52_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_51_X2N_id_secondarysgNBDLGTPTEIDatPDCP },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_51_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_GTPtunnelEndpoint },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_51_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_52_X2N_id_RLC_Status },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_52_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLC_Status },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_52_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_53_X2N_id_RLCMode_transferred = 317;
+static const long asn_VAL_53_X2N_ignore = 1;
+static const long asn_VAL_53_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_53_X2N_id_RLCMode_transferred },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_53_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLCMode },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_53_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1_rows }
+};
+static const long asn_VAL_54_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_54_X2N_ignore = 1;
+static const long asn_VAL_54_X2N_optional = 0;
+static const long asn_VAL_55_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_55_X2N_ignore = 1;
+static const long asn_VAL_55_X2N_optional = 0;
+static const long asn_VAL_56_X2N_id_new_drb_ID_req = 325;
+static const long asn_VAL_56_X2N_ignore = 1;
+static const long asn_VAL_56_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_54_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_54_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_54_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_55_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_55_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_55_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_56_X2N_id_new_drb_ID_req },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_56_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NewDRBIDrequest },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_56_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1_rows }
+};
+static const long asn_VAL_57_X2N_id_RLC_Status = 300;
+static const long asn_VAL_57_X2N_ignore = 1;
+static const long asn_VAL_57_X2N_optional = 0;
+static const long asn_VAL_58_X2N_id_lCID = 314;
+static const long asn_VAL_58_X2N_ignore = 1;
+static const long asn_VAL_58_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_57_X2N_id_RLC_Status },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_57_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_RLC_Status },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_57_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_58_X2N_id_lCID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_58_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_LCID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_58_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_59_X2N_id_uLpDCPSnLength = 302;
+static const long asn_VAL_59_X2N_ignore = 1;
+static const long asn_VAL_59_X2N_optional = 0;
+static const long asn_VAL_60_X2N_id_dLPDCPSnLength = 311;
+static const long asn_VAL_60_X2N_ignore = 1;
+static const long asn_VAL_60_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_59_X2N_id_uLpDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_59_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_59_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_60_X2N_id_dLPDCPSnLength },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_60_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PDCPSnLength },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_60_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1_rows }
+};
+static const long asn_VAL_61_X2N_id_DownlinkPacketLossRate = 273;
+static const long asn_VAL_61_X2N_ignore = 1;
+static const long asn_VAL_61_X2N_optional = 0;
+static const long asn_VAL_62_X2N_id_UplinkPacketLossRate = 274;
+static const long asn_VAL_62_X2N_ignore = 1;
+static const long asn_VAL_62_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_61_X2N_id_DownlinkPacketLossRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_61_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Packet_LossRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_61_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_62_X2N_id_UplinkPacketLossRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_62_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Packet_LossRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_62_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_1_rows }
+};
+static const long asn_VAL_63_X2N_id_UL_EARFCNExtension = 95;
+static const long asn_VAL_63_X2N_reject = 0;
+static const long asn_VAL_63_X2N_optional = 0;
+static const long asn_VAL_64_X2N_id_DL_EARFCNExtension = 96;
+static const long asn_VAL_64_X2N_reject = 0;
+static const long asn_VAL_64_X2N_optional = 0;
+static const long asn_VAL_65_X2N_id_OffsetOfNbiotChannelNumberToDL_EARFCN = 177;
+static const long asn_VAL_65_X2N_reject = 0;
+static const long asn_VAL_65_X2N_optional = 0;
+static const long asn_VAL_66_X2N_id_OffsetOfNbiotChannelNumberToUL_EARFCN = 178;
+static const long asn_VAL_66_X2N_reject = 0;
+static const long asn_VAL_66_X2N_optional = 0;
+static const long asn_VAL_67_X2N_id_NRS_NSSS_PowerOffset = 282;
+static const long asn_VAL_67_X2N_ignore = 1;
+static const long asn_VAL_67_X2N_optional = 0;
+static const long asn_VAL_68_X2N_id_NSSS_NumOccasionDifferentPrecoder = 283;
+static const long asn_VAL_68_X2N_ignore = 1;
+static const long asn_VAL_68_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_FDD_Info_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_63_X2N_id_UL_EARFCNExtension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_63_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_EARFCNExtension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_63_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_64_X2N_id_DL_EARFCNExtension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_64_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_EARFCNExtension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_64_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_65_X2N_id_OffsetOfNbiotChannelNumberToDL_EARFCN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_65_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_65_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_66_X2N_id_OffsetOfNbiotChannelNumberToUL_EARFCN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_66_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_66_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_67_X2N_id_NRS_NSSS_PowerOffset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_67_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NRS_NSSS_PowerOffset },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_67_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_68_X2N_id_NSSS_NumOccasionDifferentPrecoder },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_68_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_68_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_FDD_Info_ExtIEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_FDD_Info_ExtIEs_1_rows }
+};
+static const long asn_VAL_69_X2N_id_extended_e_RAB_MaximumBitrateDL = 196;
+static const long asn_VAL_69_X2N_ignore = 1;
+static const long asn_VAL_69_X2N_optional = 0;
+static const long asn_VAL_70_X2N_id_extended_e_RAB_MaximumBitrateUL = 197;
+static const long asn_VAL_70_X2N_ignore = 1;
+static const long asn_VAL_70_X2N_optional = 0;
+static const long asn_VAL_71_X2N_id_extended_e_RAB_GuaranteedBitrateDL = 198;
+static const long asn_VAL_71_X2N_ignore = 1;
+static const long asn_VAL_71_X2N_optional = 0;
+static const long asn_VAL_72_X2N_id_extended_e_RAB_GuaranteedBitrateUL = 199;
+static const long asn_VAL_72_X2N_ignore = 1;
+static const long asn_VAL_72_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_GBR_QosInformation_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_69_X2N_id_extended_e_RAB_MaximumBitrateDL },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_69_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_69_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_70_X2N_id_extended_e_RAB_MaximumBitrateUL },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_70_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_70_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_71_X2N_id_extended_e_RAB_GuaranteedBitrateDL },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_71_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_71_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_72_X2N_id_extended_e_RAB_GuaranteedBitrateUL },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_72_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_72_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_GBR_QosInformation_ExtIEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_GBR_QosInformation_ExtIEs_1_rows }
+};
+static const long asn_VAL_73_X2N_id_NRrestrictioninEPSasSecondaryRAT = 202;
+static const long asn_VAL_73_X2N_ignore = 1;
+static const long asn_VAL_73_X2N_optional = 0;
+static const long asn_VAL_74_X2N_id_CNTypeRestrictions = 301;
+static const long asn_VAL_74_X2N_ignore = 1;
+static const long asn_VAL_74_X2N_optional = 0;
+static const long asn_VAL_75_X2N_id_NRrestrictionin5GS = 305;
+static const long asn_VAL_75_X2N_ignore = 1;
+static const long asn_VAL_75_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverRestrictionList_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_73_X2N_id_NRrestrictioninEPSasSecondaryRAT },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_73_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_73_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_74_X2N_id_CNTypeRestrictions },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_74_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CNTypeRestrictions },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_74_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_75_X2N_id_NRrestrictionin5GS },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_75_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NRrestrictionin5GS },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_75_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverRestrictionList_ExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_HandoverRestrictionList_ExtIEs_1_rows }
+};
+static const long asn_VAL_76_X2N_id_Time_UE_StayedInCell_EnhancedGranularity = 77;
+static const long asn_VAL_76_X2N_ignore = 1;
+static const long asn_VAL_76_X2N_optional = 0;
+static const long asn_VAL_77_X2N_id_HO_cause = 80;
+static const long asn_VAL_77_X2N_ignore = 1;
+static const long asn_VAL_77_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_LastVisitedEUTRANCellInformation_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_76_X2N_id_Time_UE_StayedInCell_EnhancedGranularity },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_76_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_76_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_77_X2N_id_HO_cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_77_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_77_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_LastVisitedEUTRANCellInformation_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_LastVisitedEUTRANCellInformation_ExtIEs_1_rows }
+};
+static const long asn_VAL_78_X2N_id_M3Configuration = 85;
+static const long asn_VAL_78_X2N_ignore = 1;
+static const long asn_VAL_78_X2N_conditional = 1;
+static const long asn_VAL_79_X2N_id_M4Configuration = 86;
+static const long asn_VAL_79_X2N_ignore = 1;
+static const long asn_VAL_79_X2N_conditional = 1;
+static const long asn_VAL_80_X2N_id_M5Configuration = 87;
+static const long asn_VAL_80_X2N_ignore = 1;
+static const long asn_VAL_80_X2N_conditional = 1;
+static const long asn_VAL_81_X2N_id_MDT_Location_Info = 88;
+static const long asn_VAL_81_X2N_ignore = 1;
+static const long asn_VAL_81_X2N_optional = 0;
+static const long asn_VAL_82_X2N_id_SignallingBasedMDTPLMNList = 90;
+static const long asn_VAL_82_X2N_ignore = 1;
+static const long asn_VAL_82_X2N_optional = 0;
+static const long asn_VAL_83_X2N_id_M6Configuration = 161;
+static const long asn_VAL_83_X2N_ignore = 1;
+static const long asn_VAL_83_X2N_conditional = 1;
+static const long asn_VAL_84_X2N_id_M7Configuration = 162;
+static const long asn_VAL_84_X2N_ignore = 1;
+static const long asn_VAL_84_X2N_conditional = 1;
+static const long asn_VAL_85_X2N_id_BluetoothMeasurementConfiguration = 303;
+static const long asn_VAL_85_X2N_ignore = 1;
+static const long asn_VAL_85_X2N_optional = 0;
+static const long asn_VAL_86_X2N_id_WLANMeasurementConfiguration = 304;
+static const long asn_VAL_86_X2N_ignore = 1;
+static const long asn_VAL_86_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_MDT_Configuration_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_78_X2N_id_M3Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_78_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_M3Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_78_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_79_X2N_id_M4Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_79_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_M4Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_79_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_80_X2N_id_M5Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_80_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_M5Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_80_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_81_X2N_id_MDT_Location_Info },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_81_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MDT_Location_Info },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_81_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_82_X2N_id_SignallingBasedMDTPLMNList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_82_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MDTPLMNList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_82_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_83_X2N_id_M6Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_83_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_M6Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_83_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_84_X2N_id_M7Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_84_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_M7Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_84_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_85_X2N_id_BluetoothMeasurementConfiguration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_85_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_BluetoothMeasurementConfiguration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_85_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_86_X2N_id_WLANMeasurementConfiguration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_86_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_WLANMeasurementConfiguration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_86_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MDT_Configuration_ExtIEs_1[] = {
+	{ 9, 4, asn_IOS_X2N_MDT_Configuration_ExtIEs_1_rows }
+};
+static const long asn_VAL_87_X2N_id_NRCGI = 322;
+static const long asn_VAL_87_X2N_ignore = 1;
+static const long asn_VAL_87_X2N_optional = 0;
+static const long asn_VAL_88_X2N_id_MeNBCoordinationAssistanceInformation = 323;
+static const long asn_VAL_88_X2N_reject = 0;
+static const long asn_VAL_88_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_MeNBResourceCoordinationInformationExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_87_X2N_id_NRCGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_87_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_NRCGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_87_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_88_X2N_id_MeNBCoordinationAssistanceInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_88_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MeNBCoordinationAssistanceInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_88_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MeNBResourceCoordinationInformationExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_MeNBResourceCoordinationInformationExtIEs_1_rows }
+};
+static const long asn_VAL_89_X2N_id_NeighbourTAC = 76;
+static const long asn_VAL_89_X2N_ignore = 1;
+static const long asn_VAL_89_X2N_optional = 0;
+static const long asn_VAL_90_X2N_id_eARFCNExtension = 94;
+static const long asn_VAL_90_X2N_reject = 0;
+static const long asn_VAL_90_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_Neighbour_Information_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_89_X2N_id_NeighbourTAC },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_89_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_TAC },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_89_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_90_X2N_id_eARFCNExtension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_90_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_EARFCNExtension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_90_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_Neighbour_Information_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_Neighbour_Information_ExtIEs_1_rows }
+};
+static const long asn_VAL_91_X2N_id_ProSeUEtoNetworkRelaying = 149;
+static const long asn_VAL_91_X2N_ignore = 1;
+static const long asn_VAL_91_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ProSeAuthorized_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_91_X2N_id_ProSeUEtoNetworkRelaying },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_91_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ProSeUEtoNetworkRelaying },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_91_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ProSeAuthorized_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ProSeAuthorized_ExtIEs_1_rows }
+};
+static const long asn_VAL_92_X2N_id_DL_scheduling_PDCCH_CCE_usage = 193;
+static const long asn_VAL_92_X2N_ignore = 1;
+static const long asn_VAL_92_X2N_optional = 0;
+static const long asn_VAL_93_X2N_id_UL_scheduling_PDCCH_CCE_usage = 194;
+static const long asn_VAL_93_X2N_ignore = 1;
+static const long asn_VAL_93_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RadioResourceStatus_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_92_X2N_id_DL_scheduling_PDCCH_CCE_usage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_92_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_92_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_93_X2N_id_UL_scheduling_PDCCH_CCE_usage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_93_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_93_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RadioResourceStatus_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_RadioResourceStatus_ExtIEs_1_rows }
+};
+static const long asn_VAL_94_X2N_id_enhancedRNTP = 148;
+static const long asn_VAL_94_X2N_ignore = 1;
+static const long asn_VAL_94_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RelativeNarrowbandTxPower_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_94_X2N_id_enhancedRNTP },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_94_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_EnhancedRNTP },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_94_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RelativeNarrowbandTxPower_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_RelativeNarrowbandTxPower_ExtIEs_1_rows }
+};
+static const long asn_VAL_95_X2N_id_UEID = 147;
+static const long asn_VAL_95_X2N_ignore = 1;
+static const long asn_VAL_95_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RSRPMRList_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_95_X2N_id_UEID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_95_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_UEID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_95_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RSRPMRList_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_RSRPMRList_ExtIEs_1_rows }
+};
+static const long asn_VAL_96_X2N_id_Number_of_Antennaports = 41;
+static const long asn_VAL_96_X2N_ignore = 1;
+static const long asn_VAL_96_X2N_optional = 0;
+static const long asn_VAL_97_X2N_id_PRACH_Configuration = 55;
+static const long asn_VAL_97_X2N_ignore = 1;
+static const long asn_VAL_97_X2N_optional = 0;
+static const long asn_VAL_98_X2N_id_MBSFN_Subframe_Info = 56;
+static const long asn_VAL_98_X2N_ignore = 1;
+static const long asn_VAL_98_X2N_optional = 0;
+static const long asn_VAL_99_X2N_id_CSG_Id = 70;
+static const long asn_VAL_99_X2N_ignore = 1;
+static const long asn_VAL_99_X2N_optional = 0;
+static const long asn_VAL_100_X2N_id_MBMS_Service_Area_List = 79;
+static const long asn_VAL_100_X2N_ignore = 1;
+static const long asn_VAL_100_X2N_optional = 0;
+static const long asn_VAL_101_X2N_id_MultibandInfoList = 84;
+static const long asn_VAL_101_X2N_ignore = 1;
+static const long asn_VAL_101_X2N_optional = 0;
+static const long asn_VAL_102_X2N_id_FreqBandIndicatorPriority = 160;
+static const long asn_VAL_102_X2N_ignore = 1;
+static const long asn_VAL_102_X2N_optional = 0;
+static const long asn_VAL_103_X2N_id_BandwidthReducedSI = 180;
+static const long asn_VAL_103_X2N_ignore = 1;
+static const long asn_VAL_103_X2N_optional = 0;
+static const long asn_VAL_104_X2N_id_ProtectedEUTRAResourceIndication = 284;
+static const long asn_VAL_104_X2N_ignore = 1;
+static const long asn_VAL_104_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ServedCell_Information_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_96_X2N_id_Number_of_Antennaports },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_96_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_Number_of_Antennaports },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_96_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_97_X2N_id_PRACH_Configuration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_97_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_PRACH_Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_97_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_98_X2N_id_MBSFN_Subframe_Info },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_98_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MBSFN_Subframe_Infolist },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_98_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_99_X2N_id_CSG_Id },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_99_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_CSG_Id },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_99_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_100_X2N_id_MBMS_Service_Area_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_100_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MBMS_Service_Area_Identity_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_100_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_101_X2N_id_MultibandInfoList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_101_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MultibandInfoList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_101_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_102_X2N_id_FreqBandIndicatorPriority },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_102_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_FreqBandIndicatorPriority },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_102_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_103_X2N_id_BandwidthReducedSI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_103_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_BandwidthReducedSI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_103_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_104_X2N_id_ProtectedEUTRAResourceIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_104_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ProtectedEUTRAResourceIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_104_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ServedCell_Information_ExtIEs_1[] = {
+	{ 9, 4, asn_IOS_X2N_ServedCell_Information_ExtIEs_1_rows }
+};
+static const long asn_VAL_105_X2N_id_ECGI = 316;
+static const long asn_VAL_105_X2N_ignore = 1;
+static const long asn_VAL_105_X2N_optional = 0;
+static const long asn_VAL_106_X2N_id_SgNBCoordinationAssistanceInformation = 324;
+static const long asn_VAL_106_X2N_reject = 0;
+static const long asn_VAL_106_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBResourceCoordinationInformationExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_105_X2N_id_ECGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_105_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_105_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_106_X2N_id_SgNBCoordinationAssistanceInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_106_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_SgNBCoordinationAssistanceInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_106_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBResourceCoordinationInformationExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_SgNBResourceCoordinationInformationExtIEs_1_rows }
+};
+static const long asn_VAL_107_X2N_id_AdditionalSpecialSubframe_Info = 97;
+static const long asn_VAL_107_X2N_ignore = 1;
+static const long asn_VAL_107_X2N_optional = 0;
+static const long asn_VAL_108_X2N_id_eARFCNExtension = 94;
+static const long asn_VAL_108_X2N_reject = 0;
+static const long asn_VAL_108_X2N_optional = 0;
+static const long asn_VAL_109_X2N_id_AdditionalSpecialSubframeExtension_Info = 179;
+static const long asn_VAL_109_X2N_ignore = 1;
+static const long asn_VAL_109_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_TDD_Info_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_107_X2N_id_AdditionalSpecialSubframe_Info },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_107_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_AdditionalSpecialSubframe_Info },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_107_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_108_X2N_id_eARFCNExtension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_108_X2N_reject },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_EARFCNExtension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_108_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_109_X2N_id_AdditionalSpecialSubframeExtension_Info },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_109_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_109_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_TDD_Info_ExtIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_TDD_Info_ExtIEs_1_rows }
+};
+static const long asn_VAL_110_X2N_id_MDTConfiguration = 72;
+static const long asn_VAL_110_X2N_ignore = 1;
+static const long asn_VAL_110_X2N_optional = 0;
+static const long asn_VAL_111_X2N_id_UEAppLayerMeasConfig = 195;
+static const long asn_VAL_111_X2N_ignore = 1;
+static const long asn_VAL_111_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_TraceActivation_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_110_X2N_id_MDTConfiguration },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_110_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_MDT_Configuration },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_110_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_111_X2N_id_UEAppLayerMeasConfig },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_111_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_UEAppLayerMeasConfig },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_111_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_TraceActivation_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_TraceActivation_ExtIEs_1_rows }
+};
+static const long asn_VAL_112_X2N_id_extended_uEaggregateMaximumBitRateDownlink = 200;
+static const long asn_VAL_112_X2N_ignore = 1;
+static const long asn_VAL_112_X2N_optional = 0;
+static const long asn_VAL_113_X2N_id_extended_uEaggregateMaximumBitRateUplink = 201;
+static const long asn_VAL_113_X2N_ignore = 1;
+static const long asn_VAL_113_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UEAggregate_MaximumBitrate_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_112_X2N_id_extended_uEaggregateMaximumBitRateDownlink },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_112_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_112_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_113_X2N_id_extended_uEaggregateMaximumBitRateUplink },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_113_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ExtendedBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_113_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UEAggregate_MaximumBitrate_ExtIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_UEAggregate_MaximumBitrate_ExtIEs_1_rows }
+};
+static const long asn_VAL_114_X2N_id_serviceType = 276;
+static const long asn_VAL_114_X2N_ignore = 1;
+static const long asn_VAL_114_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UEAppLayerMeasConfig_ExtIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_114_X2N_id_serviceType },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_114_X2N_ignore },
+	{ "&Extension", aioc__type, &asn_DEF_X2N_ServiceType },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_114_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UEAppLayerMeasConfig_ExtIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_UEAppLayerMeasConfig_ExtIEs_1_rows }
+};
+static int
+memb_X2N_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformation_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformation_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetup_ItemExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetup_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetup_ItemExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetup_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, id));
+	const int indexToPresence[7] = {
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsExtended,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTValueExtended,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTValueExtended,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTvaluePDCP_SNlength18,
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTvaluePDCP_SNlength18
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellInformation_Item_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellInformation_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellInformation_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellInformation_Item_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellInformation_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellInformation_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ServedCellsToModify_Item_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ServedCellsToModify_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ServedCellsToModify_Item_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ServedCellsToModify_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellMeasurementResult_Item_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellMeasurementResult_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellMeasurementResult_Item_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellMeasurementResult_Item_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID,
+		X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID,
+		X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformationRetrieve_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformationRetrieve_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformationRetrieve_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformationRetrieve_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	const int indexToPresence[4] = {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformationSgNBModReqExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformationSgNBModReqExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UE_ContextInformationSgNBModReqExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UE_ContextInformationSgNBModReqExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	const int indexToPresence[4] = {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id));
+	const int indexToPresence[4] = {
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_GTPtunnelEndpoint
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id));
+	const int indexToPresence[4] = {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NewDRBIDrequest
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RAB_Level_QoS_Parameters_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RAB_Level_QoS_Parameters_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_NOTHING,
+		X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_Packet_LossRate,
+		X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_Packet_LossRate
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_FDD_Info_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_FDD_Info_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_FDD_Info_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_FDD_Info_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_FDD_Info_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_FDD_Info_ExtIEs, id));
+	const int indexToPresence[7] = {
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_NOTHING,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_OffsetOfNbiotChannelNumberToEARFCN,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_OffsetOfNbiotChannelNumberToEARFCN,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_NRS_NSSS_PowerOffset,
+		X2N_FDD_Info_ExtIEs__extensionValue_PR_NSSS_NumOccasionDifferentPrecoder
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_GBR_QosInformation_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_GBR_QosInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_GBR_QosInformation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_GBR_QosInformation_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_GBR_QosInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_GBR_QosInformation_ExtIEs, id));
+	const int indexToPresence[5] = {
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_NOTHING,
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate,
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate,
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate,
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_597(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_601(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_605(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_609(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_613(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_617(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverRestrictionList_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRestrictionList_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRestrictionList_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverRestrictionList_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRestrictionList_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRestrictionList_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_621(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_625(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_LastVisitedEUTRANCellInformation_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_LastVisitedEUTRANCellInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_LastVisitedEUTRANCellInformation_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_LastVisitedEUTRANCellInformation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_629(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_633(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_637(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_641(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_645(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_649(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_653(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_657(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_661(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MDT_Configuration_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MDT_Configuration_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MDT_Configuration_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MDT_Configuration_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MDT_Configuration_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MDT_Configuration_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_665(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MeNBResourceCoordinationInformationExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeNBResourceCoordinationInformationExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MeNBResourceCoordinationInformationExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeNBResourceCoordinationInformationExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_669(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_673(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_677(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_681(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_685(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_Neighbour_Information_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_Neighbour_Information_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_Neighbour_Information_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_Neighbour_Information_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_Neighbour_Information_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_Neighbour_Information_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_689(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_693(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_697(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_701(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_705(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_709(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_713(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ProSeAuthorized_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ProSeAuthorized_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ProSeAuthorized_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ProSeAuthorized_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ProSeAuthorized_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ProSeAuthorized_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_717(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_721(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_725(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_729(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RadioResourceStatus_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RadioResourceStatus_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RadioResourceStatus_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RadioResourceStatus_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RadioResourceStatus_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RadioResourceStatus_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_733(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RelativeNarrowbandTxPower_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RelativeNarrowbandTxPower_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RelativeNarrowbandTxPower_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RelativeNarrowbandTxPower_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_737(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_741(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_745(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_749(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RSRPMRList_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RSRPMRList_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RSRPMRList_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RSRPMRList_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RSRPMRList_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RSRPMRList_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_753(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_757(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_761(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_765(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ServedCell_Information_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ServedCell_Information_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ServedCell_Information_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ServedCell_Information_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ServedCell_Information_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ServedCell_Information_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_769(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBResourceCoordinationInformationExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBResourceCoordinationInformationExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBResourceCoordinationInformationExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBResourceCoordinationInformationExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_773(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_777(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_781(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_785(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_789(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_793(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_797(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_801(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_805(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_809(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_813(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_817(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_821(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_TDD_Info_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_TDD_Info_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_TDD_Info_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_TDD_Info_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_TDD_Info_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_TDD_Info_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_825(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_TraceActivation_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_TraceActivation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_TraceActivation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_TraceActivation_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_TraceActivation_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_TraceActivation_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_829(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_833(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UEAggregate_MaximumBitrate_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEAggregate_MaximumBitrate_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UEAggregate_MaximumBitrate_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEAggregate_MaximumBitrate_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, id));
+	const int indexToPresence[3] = {
+		X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_NOTHING,
+		X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_ExtendedBitRate,
+		X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_ExtendedBitRate
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_837(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UEAppLayerMeasConfig_ExtIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEAppLayerMeasConfig_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UEAppLayerMeasConfig_ExtIEs_X2N_extensionValue_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEAppLayerMeasConfig_ExtIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Extension */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_extensionValue_constraint_841(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_845(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_849(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_853(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_857(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_861(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_865(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_869(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_873(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_877(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_881(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_885(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_extensionValue_constraint_889(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_11 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_12 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_14 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_15 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_16 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_18 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_19 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_20 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_22 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_23 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_24 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_26 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_27 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_28 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_30 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_31 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_32 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_34 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_35 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_36 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_38 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_39 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_40 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_42 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_43 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_44 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_46 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_47 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_48 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_50 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_51 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_52 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_54 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_55 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_56 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_58 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_59 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_60 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_62 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_63 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_64 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_66 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_67 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_68 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_70 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_71 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_72 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_74 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_75 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_76 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_78 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_79 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_80 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_82 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_83 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_84 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_86 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_87 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_88 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_90 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_91 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_92 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_94 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_95 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_96 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_98 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_99 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_100 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_102 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_103 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_104 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_106 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_107 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_108 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_110 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_111 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_112 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_114 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_115 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_116 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_118 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_119 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_120 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_122 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_123 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_124 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_126 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_127 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_128 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_130 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_131 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_132 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_134 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_135 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_136 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_138 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_139 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_140 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_142 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_143 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_144 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_146 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_147 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_148 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_150 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_151 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_152 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_154 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_155 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_156 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_158 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_159 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_160 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_162 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_163 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_164 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_166 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_167 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_168 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_170 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_171 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_172 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_174 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_175 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_176 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_178 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_179 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_180 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_182 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_183 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_184 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_186 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_187 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_188 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_190 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_191 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_192 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_194 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_195 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_196 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_198 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_199 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_200 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_202 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_203 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_204 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_206 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_207 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_208 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_210 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_211 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_212 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_214 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_215 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_216 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_218 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_219 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_220 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_222 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_223 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_224 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_226 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_227 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_228 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_230 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_231 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_232 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_234 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_235 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_236 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_238 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_239 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_240 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_242 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_243 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_244 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_246 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_247 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_248 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_250 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_251 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_252 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_254 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_255 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_256 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_258 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_259 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_260 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_262 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_263 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_264 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_266 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_267 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_268 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_270 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_271 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_272 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_274 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_275 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_276 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_278 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_279 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_280 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_282 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_283 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_284 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_286 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_287 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_288 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_290 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_291 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_292 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_294 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_295 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_296 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_298 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_299 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_300 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_302 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_303 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_304 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_306 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_307 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_308 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_310 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_311 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_312 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_314 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_315 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_316 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_318 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_319 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_320 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_322 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_323 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_324 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_326 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_327 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_328 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_330 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_331 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_332 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_334 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_335 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_336 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_338 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_339 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_340 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_342 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_343 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_344 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_346 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_347 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_348 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_350 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_351 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_352 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_354 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_355 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_356 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_358 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_359 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_360 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_362 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_363 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_364 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_366 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_367 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_368 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_370 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_371 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_372 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_374 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_375 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_376 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_378 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_379 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_380 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_382 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_383 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_384 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_386 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_387 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_388 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_390 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_391 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_392 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_394 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_395 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_396 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_398 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_399 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_400 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_402 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_403 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_404 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_406 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_407 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_408 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_410 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_411 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_412 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_414 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_415 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_416 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_418 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_419 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_420 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_422 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_423 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_424 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_426 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_427 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_428 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_430 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_431 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_432 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_434 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_435 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_436 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_438 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_439 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_440 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_442 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_443 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_444 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_446 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_447 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_448 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_450 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_451 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_452 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_454 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_455 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_456 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_458 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_459 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_460 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_462 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_463 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_464 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_466 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_467 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_468 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_470 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_471 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_472 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_474 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_475 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_476 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_478 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_479 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_480 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_482 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_483 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_484 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_486 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_487 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_488 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_490 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_491 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_492 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_494 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_495 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_496 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_498 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_499 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_500 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_502 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_503 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_504 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_506 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_507 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_508 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_510 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_511 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_512 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_514 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_515 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_516 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_518 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_519 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_520 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_522 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_523 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_524 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_526 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_527 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_528 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_530 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_531 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_532 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_534 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_535 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_536 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_538 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_539 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_540 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_542 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_543 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_544 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_546 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_547 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_548 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_550 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_551 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_552 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_554 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_555 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_556 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_558 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_559 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_560 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_562 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_563 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_564 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_566 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_567 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_568 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_570 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_571 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_572 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_574 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_575 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_576 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_578 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_579 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_580 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_582 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_583 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_584 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_586 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_587 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_588 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_590 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_591 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_592 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_594 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_595 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_596 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_598 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_599 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_600 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_602 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_603 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_604 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_606 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_607 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_608 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_610 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_611 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_612 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_614 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_615 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_616 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_618 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_619 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_620 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_622 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_623 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_624 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_626 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_627 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_628 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_630 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_631 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_632 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_634 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_635 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_636 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_638 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_639 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_640 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_642 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_643 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_644 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_646 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_647 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_648 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_650 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_651 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_652 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_654 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_655 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_656 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_658 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_659 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_660 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_662 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_663 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_664 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_666 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_667 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_668 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_670 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_671 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_672 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_674 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_675 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_676 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_678 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_679 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_680 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_682 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_683 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_684 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_686 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_687 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_688 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_690 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_691 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_692 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_694 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_695 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_696 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_698 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_699 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_700 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_702 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_703 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_704 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_706 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_707 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_708 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_710 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_711 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_712 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_714 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_715 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_716 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_718 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_719 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_720 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_722 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_723 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_724 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_726 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_727 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_728 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_730 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_731 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_732 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_734 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_735 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_736 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_738 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_739 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_740 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_742 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_743 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_744 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_746 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_747 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_748 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_750 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_751 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_752 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_754 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_755 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_756 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_758 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_759 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_760 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_762 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_763 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_764 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_766 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_767 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_768 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_770 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_771 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_772 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_774 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_775 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_776 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_778 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_779 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_780 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_782 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_783 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_784 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_786 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_787 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_788 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_790 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_791 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_792 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_794 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_795 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_796 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_798 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_799 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_800 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_802 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_803 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_804 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_806 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_807 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_808 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_810 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_811 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_812 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_814 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_815 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_816 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_818 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_819 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_820 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_822 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_823 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_824 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_826 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_827 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_828 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_830 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_831 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_832 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_834 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_835 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_836 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_838 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_839 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_840 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_842 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_843 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_844 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_846 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_847 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_848 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_850 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_851 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_852 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_854 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_855 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_856 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_858 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_859 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_860 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_862 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_863 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_864 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_866 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_867 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_868 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_870 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_871 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_872 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_874 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_875 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_876 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_878 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_879 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_880 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_882 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_883 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_884 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_886 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_887 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_888 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_890 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_891 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_extensionValue_constr_892 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue, choice.ManagementBasedMDTallowed),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ManagementBasedMDTallowed,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ManagementBasedMDTallowed"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue, choice.MDTPLMNList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MDTPLMNList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MDTPLMNList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue, choice.UESidelinkAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UESidelinkAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UESidelinkAggregateMaximumBitRate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* ManagementBasedMDTallowed */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* MDTPLMNList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* UESidelinkAggregateMaximumBitRate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_4 = {
+	sizeof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextInformation_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_4,
+	3,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_4 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_4,
+	3,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformation_ExtIEs_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_2,  memb_X2N_id_constraint_1 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UE_ContextInformation_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_4,
+		select_UE_ContextInformation_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_4,  memb_X2N_extensionValue_constraint_1 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformation_ExtIEs_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformation_ExtIEs_specs_1 = {
+	sizeof(struct X2N_UE_ContextInformation_ExtIEs),
+	offsetof(struct X2N_UE_ContextInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformation_ExtIEs_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation_ExtIEs = {
+	"UE-ContextInformation-ExtIEs",
+	"UE-ContextInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_ExtIEs_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformation_ExtIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformation_ExtIEs_specs_1	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_8[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue, choice.BearerType),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_BearerType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"BearerType"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_8[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* BearerType */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_8 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_8,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_8 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_8,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_8	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ItemExtIEs_5[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_6,  memb_X2N_id_constraint_5 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeSetup_ItemExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_7,  memb_X2N_criticality_constraint_5 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_8,
+		select_E_RABs_ToBeSetup_ItemExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_8,  memb_X2N_extensionValue_constraint_5 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetup_ItemExtIEs_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ItemExtIEs_specs_5 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetup_ItemExtIEs_tag2el_5,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs = {
+	"E-RABs-ToBeSetup-ItemExtIEs",
+	"E-RABs-ToBeSetup-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_ItemExtIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_ItemExtIEs_specs_5	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_12 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_12 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_12	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_9[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_10,  memb_X2N_id_constraint_9 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_11,  memb_X2N_criticality_constraint_9 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_12,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_12,  memb_X2N_extensionValue_constraint_9 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs),
+	offsetof(struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tag2el_9,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs = {
+	"UE-ContextReferenceAtSeNB-ItemExtIEs",
+	"UE-ContextReferenceAtSeNB-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_16 = {
+	sizeof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_16 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_16	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtWT_ItemExtIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_14,  memb_X2N_id_constraint_13 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_15,  memb_X2N_criticality_constraint_13 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_16,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_16,  memb_X2N_extensionValue_constraint_13 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtWT_ItemExtIEs_specs_13 = {
+	sizeof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs),
+	offsetof(struct X2N_UE_ContextReferenceAtWT_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tag2el_13,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs = {
+	"UE-ContextReferenceAtWT-ItemExtIEs",
+	"UE-ContextReferenceAtWT-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtWT_ItemExtIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtWT_ItemExtIEs_specs_13	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_20 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_20 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_20	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_18,  memb_X2N_id_constraint_17 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_19,  memb_X2N_criticality_constraint_17 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_20,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_20,  memb_X2N_extensionValue_constraint_17 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tag2el_17[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs),
+	offsetof(struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tag2el_17,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs = {
+	"UE-ContextReferenceAtSgNB-ItemExtIEs",
+	"UE-ContextReferenceAtSgNB-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_tags_17[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_17,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_24 = {
+	sizeof(struct X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_24 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_24	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_Item_ExtIEs_21[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_22,  memb_X2N_id_constraint_21 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_23,  memb_X2N_criticality_constraint_21 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_24,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_24,  memb_X2N_extensionValue_constraint_21 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_Item_ExtIEs_tag2el_21[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_Item_ExtIEs_specs_21 = {
+	sizeof(struct X2N_E_RABs_Admitted_Item_ExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_Item_ExtIEs_tag2el_21,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs = {
+	"E-RABs-Admitted-Item-ExtIEs",
+	"E-RABs-Admitted-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_Item_ExtIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_Item_ExtIEs_specs_21	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_28[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.ReceiveStatusOfULPDCPSDUsExtended),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReceiveStatusOfULPDCPSDUsExtended"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.COUNTValueExtended),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_COUNTValueExtended,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"COUNTValueExtended"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.ReceiveStatusOfULPDCPSDUsPDCP_SNlength18),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReceiveStatusOfULPDCPSDUsPDCP-SNlength18"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, choice.COUNTvaluePDCP_SNlength18),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_COUNTvaluePDCP_SNlength18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"COUNTvaluePDCP-SNlength18"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_28[] = { 0, 2, 1, 3 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_28[] = { 0, 2, 1, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_28[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 1 }, /* ReceiveStatusOfULPDCPSDUsExtended */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, -1, 0 }, /* ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* COUNTValueExtended */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* COUNTvaluePDCP-SNlength18 */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_28 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_28,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_28,
+	asn_MAP_X2N_extensionValue_from_canonical_28,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_28 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_28,
+	4,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_28	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_26,  memb_X2N_id_constraint_25 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_27,  memb_X2N_criticality_constraint_25 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_28,
+		select_E_RABs_SubjectToStatusTransfer_ItemExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_28,  memb_X2N_extensionValue_constraint_25 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tag2el_25[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tag2el_25,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs = {
+	"E-RABs-SubjectToStatusTransfer-ItemExtIEs",
+	"E-RABs-SubjectToStatusTransfer-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_32[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.ABSInformation),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_ABSInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ABSInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.InvokeIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_InvokeIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"InvokeIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.SubframeAssignment),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SubframeAssignment,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SubframeAssignment"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.ExtendedULInterferenceOverloadInfo),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExtendedULInterferenceOverloadInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExtendedULInterferenceOverloadInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.CoMPInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoMPInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CoMPInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, choice.DynamicDLTransmissionInformation),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_DynamicDLTransmissionInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DynamicDLTransmissionInformation"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_32[] = { 1, 2, 3, 4, 0, 5 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_32[] = { 4, 0, 1, 2, 3, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_32[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 1 }, /* InvokeIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 0 }, /* SubframeAssignment */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 1 }, /* ExtendedULInterferenceOverloadInfo */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 }, /* CoMPInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 1 }, /* fdd */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 5, -1, 0 }, /* naics-active */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 1 }, /* tdd */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 5, -1, 0 }, /* naics-inactive */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 } /* abs-inactive */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_32 = {
+	sizeof(struct X2N_CellInformation_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellInformation_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellInformation_Item_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_32,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_32,
+	asn_MAP_X2N_extensionValue_from_canonical_32,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_32 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_32,
+	6,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_32	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellInformation_Item_ExtIEs_29[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_30,  memb_X2N_id_constraint_29 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellInformation_Item_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_31,  memb_X2N_criticality_constraint_29 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_32,
+		select_CellInformation_Item_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_32,  memb_X2N_extensionValue_constraint_29 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellInformation_Item_ExtIEs_tag2el_29[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellInformation_Item_ExtIEs_specs_29 = {
+	sizeof(struct X2N_CellInformation_Item_ExtIEs),
+	offsetof(struct X2N_CellInformation_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellInformation_Item_ExtIEs_tag2el_29,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_Item_ExtIEs = {
+	"CellInformation-Item-ExtIEs",
+	"CellInformation-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29,
+	sizeof(asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29)
+		/sizeof(asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29[0]), /* 1 */
+	asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29)
+		/sizeof(asn_DEF_X2N_CellInformation_Item_ExtIEs_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellInformation_Item_ExtIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellInformation_Item_ExtIEs_specs_29	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_36[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue, choice.DeactivationIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_DeactivationIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DeactivationIndication"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_36[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* DeactivationIndication */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_36 = {
+	sizeof(struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_36,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_36 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_36,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_36	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedCellsToModify_Item_ExtIEs_33[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_34,  memb_X2N_id_constraint_33 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ServedCellsToModify_Item_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_35,  memb_X2N_criticality_constraint_33 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_36,
+		select_ServedCellsToModify_Item_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_36,  memb_X2N_extensionValue_constraint_33 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCellsToModify_Item_ExtIEs_tag2el_33[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToModify_Item_ExtIEs_specs_33 = {
+	sizeof(struct X2N_ServedCellsToModify_Item_ExtIEs),
+	offsetof(struct X2N_ServedCellsToModify_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedCellsToModify_Item_ExtIEs_tag2el_33,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs = {
+	"ServedCellsToModify-Item-ExtIEs",
+	"ServedCellsToModify-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33,
+	sizeof(asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCellsToModify_Item_ExtIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedCellsToModify_Item_ExtIEs_specs_33	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_40 = {
+	sizeof(struct X2N_CellToReport_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellToReport_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellToReport_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellToReport_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_40 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_40	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellToReport_Item_ExtIEs_37[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_38,  memb_X2N_id_constraint_37 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_39,  memb_X2N_criticality_constraint_37 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_40,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_40,  memb_X2N_extensionValue_constraint_37 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellToReport_Item_ExtIEs_tag2el_37[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellToReport_Item_ExtIEs_specs_37 = {
+	sizeof(struct X2N_CellToReport_Item_ExtIEs),
+	offsetof(struct X2N_CellToReport_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellToReport_Item_ExtIEs_tag2el_37,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_Item_ExtIEs = {
+	"CellToReport-Item-ExtIEs",
+	"CellToReport-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37,
+	sizeof(asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37)
+		/sizeof(asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37[0]), /* 1 */
+	asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37)
+		/sizeof(asn_DEF_X2N_CellToReport_Item_ExtIEs_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellToReport_Item_ExtIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellToReport_Item_ExtIEs_specs_37	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_44 = {
+	sizeof(struct X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_44 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_44	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_Item_ExtIEs_41[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_42,  memb_X2N_id_constraint_41 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_43,  memb_X2N_criticality_constraint_41 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_44,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_44,  memb_X2N_extensionValue_constraint_41 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementInitiationResult_Item_ExtIEs_tag2el_41[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementInitiationResult_Item_ExtIEs_specs_41 = {
+	sizeof(struct X2N_MeasurementInitiationResult_Item_ExtIEs),
+	offsetof(struct X2N_MeasurementInitiationResult_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_MeasurementInitiationResult_Item_ExtIEs_tag2el_41,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs = {
+	"MeasurementInitiationResult-Item-ExtIEs",
+	"MeasurementInitiationResult-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41,
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41[0]), /* 1 */
+	asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs_tags_41[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementInitiationResult_Item_ExtIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementInitiationResult_Item_ExtIEs_specs_41	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_48 = {
+	sizeof(struct X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_48 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_48	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_Item_ExtIEs_45[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_46,  memb_X2N_id_constraint_45 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_47,  memb_X2N_criticality_constraint_45 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_48,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_48,  memb_X2N_extensionValue_constraint_45 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementFailureCause_Item_ExtIEs_tag2el_45[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementFailureCause_Item_ExtIEs_specs_45 = {
+	sizeof(struct X2N_MeasurementFailureCause_Item_ExtIEs),
+	offsetof(struct X2N_MeasurementFailureCause_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_MeasurementFailureCause_Item_ExtIEs_tag2el_45,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs = {
+	"MeasurementFailureCause-Item-ExtIEs",
+	"MeasurementFailureCause-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45,
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45[0]), /* 1 */
+	asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs_tags_45[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementFailureCause_Item_ExtIEs_45,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementFailureCause_Item_ExtIEs_specs_45	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_52 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_52 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_52	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_Item_ExtIEs_49[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_50,  memb_X2N_id_constraint_49 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_51,  memb_X2N_criticality_constraint_49 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_52,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_52,  memb_X2N_extensionValue_constraint_49 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tag2el_49[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_Item_ExtIEs_specs_49 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs),
+	offsetof(struct X2N_CompleteFailureCauseInformation_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tag2el_49,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs = {
+	"CompleteFailureCauseInformation-Item-ExtIEs",
+	"CompleteFailureCauseInformation-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49,
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[0]), /* 1 */
+	asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs_tags_49[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompleteFailureCauseInformation_Item_ExtIEs_49,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompleteFailureCauseInformation_Item_ExtIEs_specs_49	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_56[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CompositeAvailableCapacityGroup),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompositeAvailableCapacityGroup,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CompositeAvailableCapacityGroup"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, choice.ABS_Status),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ABS_Status,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ABS-Status"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, choice.RSRPMRList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RSRPMRList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RSRPMRList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CSIReportList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CSIReportList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CSIReportList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, choice.CellReportingIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_CellReportingIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellReportingIndicator"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_56[] = { 4, 0, 1, 2, 3 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_56[] = { 1, 2, 3, 4, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_56[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* CellReportingIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* CompositeAvailableCapacityGroup */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* ABS-Status */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* RSRPMRList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* CSIReportList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_56 = {
+	sizeof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_56,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_56,
+	asn_MAP_X2N_extensionValue_from_canonical_56,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_56 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_56,
+	5,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_56	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_Item_ExtIEs_53[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_54,  memb_X2N_id_constraint_53 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellMeasurementResult_Item_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_55,  memb_X2N_criticality_constraint_53 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_56,
+		select_CellMeasurementResult_Item_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_56,  memb_X2N_extensionValue_constraint_53 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellMeasurementResult_Item_ExtIEs_tag2el_53[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellMeasurementResult_Item_ExtIEs_specs_53 = {
+	sizeof(struct X2N_CellMeasurementResult_Item_ExtIEs),
+	offsetof(struct X2N_CellMeasurementResult_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellMeasurementResult_Item_ExtIEs_tag2el_53,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs = {
+	"CellMeasurementResult-Item-ExtIEs",
+	"CellMeasurementResult-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53,
+	sizeof(asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53[0]), /* 1 */
+	asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs_tags_53[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellMeasurementResult_Item_ExtIEs_53,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellMeasurementResult_Item_ExtIEs_specs_53	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_60 = {
+	sizeof(struct X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_60 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_60	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedCellsToActivate_Item_ExtIEs_57[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_58,  memb_X2N_id_constraint_57 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_59,  memb_X2N_criticality_constraint_57 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_60,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_60,  memb_X2N_extensionValue_constraint_57 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCellsToActivate_Item_ExtIEs_tag2el_57[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToActivate_Item_ExtIEs_specs_57 = {
+	sizeof(struct X2N_ServedCellsToActivate_Item_ExtIEs),
+	offsetof(struct X2N_ServedCellsToActivate_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedCellsToActivate_Item_ExtIEs_tag2el_57,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs = {
+	"ServedCellsToActivate-Item-ExtIEs",
+	"ServedCellsToActivate-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57,
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs_tags_57[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCellsToActivate_Item_ExtIEs_57,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedCellsToActivate_Item_ExtIEs_specs_57	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_64 = {
+	sizeof(struct X2N_ActivatedCellList_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ActivatedCellList_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ActivatedCellList_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ActivatedCellList_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_64 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_64	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ActivatedCellList_Item_ExtIEs_61[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedCellList_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_62,  memb_X2N_id_constraint_61 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedCellList_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_63,  memb_X2N_criticality_constraint_61 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedCellList_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_64,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_64,  memb_X2N_extensionValue_constraint_61 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ActivatedCellList_Item_ExtIEs_tag2el_61[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedCellList_Item_ExtIEs_specs_61 = {
+	sizeof(struct X2N_ActivatedCellList_Item_ExtIEs),
+	offsetof(struct X2N_ActivatedCellList_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ActivatedCellList_Item_ExtIEs_tag2el_61,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList_Item_ExtIEs = {
+	"ActivatedCellList-Item-ExtIEs",
+	"ActivatedCellList-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61,
+	sizeof(asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61[0]), /* 1 */
+	asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61)
+		/sizeof(asn_DEF_X2N_ActivatedCellList_Item_ExtIEs_tags_61[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ActivatedCellList_Item_ExtIEs_61,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ActivatedCellList_Item_ExtIEs_specs_61	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_68 = {
+	sizeof(struct X2N_RNL_Header_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_RNL_Header_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RNL_Header_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RNL_Header_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_68 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_68	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RNL_Header_Item_ExtIEs_65[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RNL_Header_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_66,  memb_X2N_id_constraint_65 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RNL_Header_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_67,  memb_X2N_criticality_constraint_65 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RNL_Header_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_68,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_68,  memb_X2N_extensionValue_constraint_65 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RNL_Header_Item_ExtIEs_tag2el_65[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RNL_Header_Item_ExtIEs_specs_65 = {
+	sizeof(struct X2N_RNL_Header_Item_ExtIEs),
+	offsetof(struct X2N_RNL_Header_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RNL_Header_Item_ExtIEs_tag2el_65,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RNL_Header_Item_ExtIEs = {
+	"RNL-Header-Item-ExtIEs",
+	"RNL-Header-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65,
+	sizeof(asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65)
+		/sizeof(asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65[0]), /* 1 */
+	asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65,	/* Same as above */
+	sizeof(asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65)
+		/sizeof(asn_DEF_X2N_RNL_Header_Item_ExtIEs_tags_65[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RNL_Header_Item_ExtIEs_65,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RNL_Header_Item_ExtIEs_specs_65	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_72[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, choice.Correlation_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_Correlation_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Correlation-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_72[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* Correlation-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_72 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_72,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_72 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_72,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_72	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_70,  memb_X2N_id_constraint_69 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_71,  memb_X2N_criticality_constraint_69 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_72,
+		select_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_72,  memb_X2N_extensionValue_constraint_69 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_69[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_69,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs = {
+	"E-RABs-ToBeAdded-Item-SCG-BearerExtIEs",
+	"E-RABs-ToBeAdded-Item-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_tags_69[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_76 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_76 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_76	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_74,  memb_X2N_id_constraint_73 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_75,  memb_X2N_criticality_constraint_73 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_76,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_76,  memb_X2N_extensionValue_constraint_73 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tag2el_73[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tag2el_73,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs = {
+	"E-RABs-ToBeAdded-Item-Split-BearerExtIEs",
+	"E-RABs-ToBeAdded-Item-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_tags_73[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_80 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_80 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_80	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_78,  memb_X2N_id_constraint_77 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_79,  memb_X2N_criticality_constraint_77 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_80,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_80,  memb_X2N_extensionValue_constraint_77 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_77[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tag2el_77,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs",
+	"E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_tags_77[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_84 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_84 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_84	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_82,  memb_X2N_id_constraint_81 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_83,  memb_X2N_criticality_constraint_81 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_84,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_84,  memb_X2N_extensionValue_constraint_81 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tag2el_81[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tag2el_81,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs",
+	"E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_tags_81[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_88 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_88 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_88	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_86,  memb_X2N_id_constraint_85 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_87,  memb_X2N_criticality_constraint_85 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_88,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_88,  memb_X2N_extensionValue_constraint_85 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tag2el_85[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tag2el_85,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs = {
+	"ResponseInformationSeNBReconfComp-SuccessItemExtIEs",
+	"ResponseInformationSeNBReconfComp-SuccessItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85,
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_tags_85[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_92 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_92 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_92	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_90,  memb_X2N_id_constraint_89 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_91,  memb_X2N_criticality_constraint_89 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_92,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_92,  memb_X2N_extensionValue_constraint_89 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tag2el_89[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tag2el_89,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs = {
+	"ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs",
+	"ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89,
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_tags_89[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_96 = {
+	sizeof(struct X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_96 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_96	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationSeNBModReqExtIEs_93[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_94,  memb_X2N_id_constraint_93 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_95,  memb_X2N_criticality_constraint_93 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_96,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_96,  memb_X2N_extensionValue_constraint_93 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformationSeNBModReqExtIEs_tag2el_93[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationSeNBModReqExtIEs_specs_93 = {
+	sizeof(struct X2N_UE_ContextInformationSeNBModReqExtIEs),
+	offsetof(struct X2N_UE_ContextInformationSeNBModReqExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformationSeNBModReqExtIEs_tag2el_93,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs = {
+	"UE-ContextInformationSeNBModReqExtIEs",
+	"UE-ContextInformationSeNBModReqExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93,
+	sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs_tags_93[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformationSeNBModReqExtIEs_93,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformationSeNBModReqExtIEs_specs_93	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_100[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, choice.Correlation_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_Correlation_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Correlation-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_100[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* Correlation-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_100 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_100,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_100 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_100,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_100	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_98,  memb_X2N_id_constraint_97 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_99,  memb_X2N_criticality_constraint_97 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_100,
+		select_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_100,  memb_X2N_extensionValue_constraint_97 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tag2el_97[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tag2el_97,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs = {
+	"E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs",
+	"E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_tags_97[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_104 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_104 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_104	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_102,  memb_X2N_id_constraint_101 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_103,  memb_X2N_criticality_constraint_101 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_104,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_104,  memb_X2N_extensionValue_constraint_101 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tag2el_101[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tag2el_101,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs = {
+	"E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs",
+	"E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_tags_101[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_108 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_108 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_108	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_106,  memb_X2N_id_constraint_105 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_107,  memb_X2N_criticality_constraint_105 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_108,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_108,  memb_X2N_extensionValue_constraint_105 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tag2el_105[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tag2el_105,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs = {
+	"E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs",
+	"E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_tags_105[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_112 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_112 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_112	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_110,  memb_X2N_id_constraint_109 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_111,  memb_X2N_criticality_constraint_109 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_112,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_112,  memb_X2N_extensionValue_constraint_109 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tag2el_109[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tag2el_109,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs = {
+	"E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs",
+	"E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_tags_109[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_116 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_116 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_116	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_114,  memb_X2N_id_constraint_113 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_115,  memb_X2N_criticality_constraint_113 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_116,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_116,  memb_X2N_extensionValue_constraint_113 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tag2el_113[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tag2el_113,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs = {
+	"E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs",
+	"E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_tags_113[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_120 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_120 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_120	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_118,  memb_X2N_id_constraint_117 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_119,  memb_X2N_criticality_constraint_117 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_120,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_120,  memb_X2N_extensionValue_constraint_117 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tag2el_117[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tag2el_117,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs = {
+	"E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs",
+	"E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_tags_117[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_124 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_124 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_124	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_122,  memb_X2N_id_constraint_121 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_123,  memb_X2N_criticality_constraint_121 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_124,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_124,  memb_X2N_extensionValue_constraint_121 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tag2el_121[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tag2el_121,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs",
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_tags_121[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_128 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_128 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_128	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_126,  memb_X2N_id_constraint_125 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_127,  memb_X2N_criticality_constraint_125 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_128,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_128,  memb_X2N_extensionValue_constraint_125 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tag2el_125[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tag2el_125,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs",
+	"E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_tags_125[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_132 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_132 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_132	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_130,  memb_X2N_id_constraint_129 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_131,  memb_X2N_criticality_constraint_129 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_132,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_132,  memb_X2N_extensionValue_constraint_129 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tag2el_129[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tag2el_129,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs",
+	"E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_tags_129[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_136 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_136 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_136	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_134,  memb_X2N_id_constraint_133 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_135,  memb_X2N_criticality_constraint_133 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_136,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_136,  memb_X2N_extensionValue_constraint_133 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tag2el_133[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tag2el_133,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs",
+	"E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_tags_133[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_140 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_140 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_140	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_138,  memb_X2N_id_constraint_137 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_139,  memb_X2N_criticality_constraint_137 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_140,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_140,  memb_X2N_extensionValue_constraint_137 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tag2el_137[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tag2el_137,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs",
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_tags_137[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_144 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_144 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_144	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_142,  memb_X2N_id_constraint_141 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_143,  memb_X2N_criticality_constraint_141 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_144,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_144,  memb_X2N_extensionValue_constraint_141 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tag2el_141[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tag2el_141,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs = {
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs",
+	"E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_tags_141[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_148 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_148 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_148	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_145[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_146,  memb_X2N_id_constraint_145 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_147,  memb_X2N_criticality_constraint_145 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_148,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_148,  memb_X2N_extensionValue_constraint_145 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tag2el_145[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tag2el_145,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs = {
+	"E-RABs-ToBeReleased-ModReqdItemExtIEs",
+	"E-RABs-ToBeReleased-ModReqdItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_tags_145[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_145,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_152 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_152 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_152	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_150,  memb_X2N_id_constraint_149 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_151,  memb_X2N_criticality_constraint_149 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_152,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_152,  memb_X2N_extensionValue_constraint_149 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tag2el_149[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tag2el_149,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs = {
+	"E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs",
+	"E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_tags_149[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_156 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_156 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_156	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_154,  memb_X2N_id_constraint_153 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_155,  memb_X2N_criticality_constraint_153 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_156,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_156,  memb_X2N_extensionValue_constraint_153 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tag2el_153[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tag2el_153,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs = {
+	"E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs",
+	"E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_tags_153[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_160 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_160 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_160	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_158,  memb_X2N_id_constraint_157 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_159,  memb_X2N_criticality_constraint_157 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_160,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_160,  memb_X2N_extensionValue_constraint_157 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tag2el_157[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tag2el_157,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs = {
+	"E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs",
+	"E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_tags_157[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_164 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_164 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_164	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_162,  memb_X2N_id_constraint_161 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_163,  memb_X2N_criticality_constraint_161 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_164,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_164,  memb_X2N_extensionValue_constraint_161 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tag2el_161[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tag2el_161,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs = {
+	"E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs",
+	"E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_tags_161[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_168 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_168 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_168	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_165[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_166,  memb_X2N_id_constraint_165 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_167,  memb_X2N_criticality_constraint_165 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_168,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_168,  memb_X2N_extensionValue_constraint_165 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tag2el_165[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tag2el_165,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs = {
+	"E-RABs-SubjectToCounterCheckItemExtIEs",
+	"E-RABs-SubjectToCounterCheckItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_tags_165[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_165,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_172[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue, choice.UESidelinkAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UESidelinkAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UESidelinkAggregateMaximumBitRate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_172[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* UESidelinkAggregateMaximumBitRate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_172 = {
+	sizeof(struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_172,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_172 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_172,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_172	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationRetrieve_ExtIEs_169[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_170,  memb_X2N_id_constraint_169 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UE_ContextInformationRetrieve_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_171,  memb_X2N_criticality_constraint_169 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_172,
+		select_UE_ContextInformationRetrieve_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_172,  memb_X2N_extensionValue_constraint_169 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformationRetrieve_ExtIEs_tag2el_169[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationRetrieve_ExtIEs_specs_169 = {
+	sizeof(struct X2N_UE_ContextInformationRetrieve_ExtIEs),
+	offsetof(struct X2N_UE_ContextInformationRetrieve_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformationRetrieve_ExtIEs_tag2el_169,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs = {
+	"UE-ContextInformationRetrieve-ExtIEs",
+	"UE-ContextInformationRetrieve-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169,
+	sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs_tags_169[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformationRetrieve_ExtIEs_169,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformationRetrieve_ExtIEs_specs_169	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_176[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, choice.GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GTPtunnelEndpoint"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, choice.DL_Forwarding),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_DL_Forwarding,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DL-Forwarding"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_176[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_176[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_176[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* DL-Forwarding */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GTPtunnelEndpoint */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_176 = {
+	sizeof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_176,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_176,
+	asn_MAP_X2N_extensionValue_from_canonical_176,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_176 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_176,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_176	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_174,  memb_X2N_id_constraint_173 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_175,  memb_X2N_criticality_constraint_173 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_176,
+		select_E_RABs_ToBeSetupRetrieve_ItemExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_176,  memb_X2N_extensionValue_constraint_173 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tag2el_173[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173 = {
+	sizeof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tag2el_173,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs = {
+	"E-RABs-ToBeSetupRetrieve-ItemExtIEs",
+	"E-RABs-ToBeSetupRetrieve-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_tags_173[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_180 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_180 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_180	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_178,  memb_X2N_id_constraint_177 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_179,  memb_X2N_criticality_constraint_177 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_180,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_180,  memb_X2N_extensionValue_constraint_177 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tag2el_177[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tag2el_177,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs = {
+	"E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs",
+	"E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_tags_177[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_184[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLCMode),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLCMode"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_184[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_184 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_184,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_184 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_184,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_184	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_182,  memb_X2N_id_constraint_181 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_183,  memb_X2N_criticality_constraint_181 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_184,
+		select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_184,  memb_X2N_extensionValue_constraint_181 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tag2el_181[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tag2el_181,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_tags_181[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_188[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.DuplicationActivation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_DuplicationActivation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DuplicationActivation"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_188[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* DuplicationActivation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_188 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_188,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_188 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_188,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_188	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_186,  memb_X2N_id_constraint_185 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_187,  memb_X2N_criticality_constraint_185 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_188,
+		select_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_188,  memb_X2N_extensionValue_constraint_185 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_185[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_185,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_tags_185[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_192 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_192 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_192	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_190,  memb_X2N_id_constraint_189 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_191,  memb_X2N_criticality_constraint_189 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_192,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_192,  memb_X2N_extensionValue_constraint_189 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tag2el_189[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tag2el_189,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs = {
+	"E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs",
+	"E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_tags_189[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_196[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_196[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_196 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_196,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_196 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_196,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_196	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_194,  memb_X2N_id_constraint_193 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_195,  memb_X2N_criticality_constraint_193 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_196,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_196,  memb_X2N_extensionValue_constraint_193 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tag2el_193[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tag2el_193,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_tags_193[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_200[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_LCID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LCID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_200[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* LCID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_200 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_200,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_200 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_200,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_200	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_198,  memb_X2N_id_constraint_197 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_199,  memb_X2N_criticality_constraint_197 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_200,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_200,  memb_X2N_extensionValue_constraint_197 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_197[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_197,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_tags_197[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_204 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_204 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_204	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_202,  memb_X2N_id_constraint_201 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_203,  memb_X2N_criticality_constraint_201 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_204,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_204,  memb_X2N_extensionValue_constraint_201 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tag2el_201[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tag2el_201,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs = {
+	"ResponseInformationSgNBReconfComp-SuccessItemExtIEs",
+	"ResponseInformationSgNBReconfComp-SuccessItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201,
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_tags_201[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_208 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_208 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_208	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_206,  memb_X2N_id_constraint_205 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_207,  memb_X2N_criticality_constraint_205 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_208,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_208,  memb_X2N_extensionValue_constraint_205 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tag2el_205[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tag2el_205,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs = {
+	"ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs",
+	"ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205,
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_tags_205[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_212[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue, choice.SubscriberProfileIDforRFP),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SubscriberProfileIDforRFP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SubscriberProfileIDforRFP"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_212[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* SubscriberProfileIDforRFP */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_212 = {
+	sizeof(struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue),
+	offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_212,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_212 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_212,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_212	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationSgNBModReqExtIEs_209[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_210,  memb_X2N_id_constraint_209 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UE_ContextInformationSgNBModReqExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_211,  memb_X2N_criticality_constraint_209 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_212,
+		select_UE_ContextInformationSgNBModReqExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_212,  memb_X2N_extensionValue_constraint_209 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformationSgNBModReqExtIEs_tag2el_209[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationSgNBModReqExtIEs_specs_209 = {
+	sizeof(struct X2N_UE_ContextInformationSgNBModReqExtIEs),
+	offsetof(struct X2N_UE_ContextInformationSgNBModReqExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformationSgNBModReqExtIEs_tag2el_209,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs = {
+	"UE-ContextInformationSgNBModReqExtIEs",
+	"UE-ContextInformationSgNBModReqExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209,
+	sizeof(asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs_tags_209[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformationSgNBModReqExtIEs_209,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformationSgNBModReqExtIEs_specs_209	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_216 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_216 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_216	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_214,  memb_X2N_id_constraint_213 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_215,  memb_X2N_criticality_constraint_213 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_216,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_216,  memb_X2N_extensionValue_constraint_213 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tag2el_213[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tag2el_213,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs = {
+	"E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs",
+	"E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_tags_213[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_220[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLCMode),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLCMode"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_220[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_220 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_220,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_220 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_220,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_220	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_218,  memb_X2N_id_constraint_217 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_219,  memb_X2N_criticality_constraint_217 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_220,
+		select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_220,  memb_X2N_extensionValue_constraint_217 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_217[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_217,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_217[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_224[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.DuplicationActivation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_DuplicationActivation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DuplicationActivation"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_224[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* DuplicationActivation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_224 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_224,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_224 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_224,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_224	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_222,  memb_X2N_id_constraint_221 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_223,  memb_X2N_criticality_constraint_221 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_224,
+		select_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_224,  memb_X2N_extensionValue_constraint_221 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_221[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_221,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_221[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_228 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_228 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_228	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_226,  memb_X2N_id_constraint_225 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_227,  memb_X2N_criticality_constraint_225 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_228,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_228,  memb_X2N_extensionValue_constraint_225 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tag2el_225[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tag2el_225,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReq-ItemExtIEs",
+	"E-RABs-ToBeModified-SgNBModReq-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_tags_225[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_232[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.RLC_Status),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLC_Status,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLC-Status"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_232[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RLC-Status */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_232 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_232,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_232 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_232,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_232	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_230,  memb_X2N_id_constraint_229 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_231,  memb_X2N_criticality_constraint_229 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_232,
+		select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_232,  memb_X2N_extensionValue_constraint_229 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_229[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_229,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_229[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_236[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GTPtunnelEndpoint"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_236[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* PDCPSnLength */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* GTPtunnelEndpoint */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_236 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_236,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_236 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_236,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_236	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_234,  memb_X2N_id_constraint_233 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_235,  memb_X2N_criticality_constraint_233 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_236,
+		select_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_236,  memb_X2N_extensionValue_constraint_233 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_233[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_233,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_233[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_240 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_240 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_240	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_238,  memb_X2N_id_constraint_237 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_239,  memb_X2N_criticality_constraint_237 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_240,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_240,  memb_X2N_extensionValue_constraint_237 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tag2el_237[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tag2el_237,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_tags_237[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_244 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_244 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_244	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_242,  memb_X2N_id_constraint_241 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_243,  memb_X2N_criticality_constraint_241 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_244,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_244,  memb_X2N_extensionValue_constraint_241 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_241[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tag2el_241,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_tags_241[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_248 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_248 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_248	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_246,  memb_X2N_id_constraint_245 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_247,  memb_X2N_criticality_constraint_245 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_248,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_248,  memb_X2N_extensionValue_constraint_245 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_245[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_245,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_tags_245[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_252 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_252 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_252	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_250,  memb_X2N_id_constraint_249 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_251,  memb_X2N_criticality_constraint_249 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_252,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_252,  memb_X2N_extensionValue_constraint_249 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_249[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_249,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_tags_249[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_256[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_256[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_256 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_256,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_256 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_256,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_256	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_254,  memb_X2N_id_constraint_253 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_255,  memb_X2N_criticality_constraint_253 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_256,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_256,  memb_X2N_extensionValue_constraint_253 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_253[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_253,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_253[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_260[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_LCID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LCID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_260[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* LCID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_260 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_260,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_260 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_260,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_260	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_258,  memb_X2N_id_constraint_257 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_259,  memb_X2N_criticality_constraint_257 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_260,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_260,  memb_X2N_extensionValue_constraint_257 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_257[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_257,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_257[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_264 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_264 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_264	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_262,  memb_X2N_id_constraint_261 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_263,  memb_X2N_criticality_constraint_261 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_264,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_264,  memb_X2N_extensionValue_constraint_261 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_261[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tag2el_261,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs = {
+	"E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs",
+	"E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_tags_261[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_268[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_268[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_268 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_268,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_268 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_268,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_268	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_266,  memb_X2N_id_constraint_265 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_267,  memb_X2N_criticality_constraint_265 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_268,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_268,  memb_X2N_extensionValue_constraint_265 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_265[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_265,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_265[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_272[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.GTPtunnelEndpoint),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GTPtunnelEndpoint,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GTPtunnelEndpoint"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.RLC_Status),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLC_Status,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLC-Status"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_272[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GTPtunnelEndpoint */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* RLC-Status */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_272 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_272,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_272 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_272,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_272	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_270,  memb_X2N_id_constraint_269 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_271,  memb_X2N_criticality_constraint_269 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_272,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_272,  memb_X2N_extensionValue_constraint_269 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_269[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_269,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_269[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_276 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_276 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_276	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_274,  memb_X2N_id_constraint_273 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_275,  memb_X2N_criticality_constraint_273 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_276,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_276,  memb_X2N_extensionValue_constraint_273 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tag2el_273[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tag2el_273,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_tags_273[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_280 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_280 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_280	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_278,  memb_X2N_id_constraint_277 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_279,  memb_X2N_criticality_constraint_277 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_280,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_280,  memb_X2N_extensionValue_constraint_277 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_277[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tag2el_277,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_tags_277[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_284 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_284 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_284	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_282,  memb_X2N_id_constraint_281 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_283,  memb_X2N_criticality_constraint_281 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_284,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_284,  memb_X2N_extensionValue_constraint_281 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_281[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tag2el_281,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_tags_281[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_288[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, choice.RLCMode),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RLCMode,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLCMode"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_288[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* RLCMode */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_288 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_288,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_288 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_288,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_288	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_286,  memb_X2N_id_constraint_285 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_287,  memb_X2N_criticality_constraint_285 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_288,
+		select_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_288,  memb_X2N_extensionValue_constraint_285 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tag2el_285[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tag2el_285,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_tags_285[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_292 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_292 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_292	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_290,  memb_X2N_id_constraint_289 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_291,  memb_X2N_criticality_constraint_289 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_292,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_292,  memb_X2N_extensionValue_constraint_289 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tag2el_289[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tag2el_289,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs",
+	"E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_tags_289[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_296[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, choice.NewDRBIDrequest),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_NewDRBIDrequest,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NewDRBIDrequest"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_296[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* PDCPSnLength */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, -1, 0 } /* NewDRBIDrequest */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_296 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_296,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_296 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_296,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_296	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_294,  memb_X2N_id_constraint_293 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_295,  memb_X2N_criticality_constraint_293 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_296,
+		select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_296,  memb_X2N_extensionValue_constraint_293 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tag2el_293[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tag2el_293,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_tags_293[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_300[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.RLC_Status),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLC_Status,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RLC-Status"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.LCID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_LCID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LCID"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_300[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_300[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_300[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* LCID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RLC-Status */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_300 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_300,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_300,
+	asn_MAP_X2N_extensionValue_from_canonical_300,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_300 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_300,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_300	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_298,  memb_X2N_id_constraint_297 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_299,  memb_X2N_criticality_constraint_297 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_300,
+		select_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_300,  memb_X2N_extensionValue_constraint_297 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tag2el_297[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tag2el_297,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_tags_297[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_304 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_304 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_304	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_302,  memb_X2N_id_constraint_301 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_303,  memb_X2N_criticality_constraint_301 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_304,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_304,  memb_X2N_extensionValue_constraint_301 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tag2el_301[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tag2el_301,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_tags_301[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_308 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_308 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_308	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_306,  memb_X2N_id_constraint_305 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_307,  memb_X2N_criticality_constraint_305 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_308,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_308,  memb_X2N_extensionValue_constraint_305 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tag2el_305[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tag2el_305,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_tags_305[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_312[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, choice.PDCPSnLength),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPSnLength,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPSnLength"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_312[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* PDCPSnLength */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_312 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_312,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_312 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_312,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_312	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_310,  memb_X2N_id_constraint_309 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_311,  memb_X2N_criticality_constraint_309 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_312,
+		select_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_312,  memb_X2N_extensionValue_constraint_309 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_309[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_309,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_tags_309[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_316 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_316 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_316	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_314,  memb_X2N_id_constraint_313 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_315,  memb_X2N_criticality_constraint_313 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_316,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_316,  memb_X2N_extensionValue_constraint_313 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tag2el_313[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tag2el_313,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_tags_313[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_320 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_320 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_320	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_318,  memb_X2N_id_constraint_317 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_319,  memb_X2N_criticality_constraint_317 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_320,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_320,  memb_X2N_extensionValue_constraint_317 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tag2el_317[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tag2el_317,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_tags_317[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_324 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_324 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_324	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_322,  memb_X2N_id_constraint_321 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_323,  memb_X2N_criticality_constraint_321 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_324,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_324,  memb_X2N_extensionValue_constraint_321 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_321[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tag2el_321,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_tags_321[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_328 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_328 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_328	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_326,  memb_X2N_id_constraint_325 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_327,  memb_X2N_criticality_constraint_325 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_328,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_328,  memb_X2N_extensionValue_constraint_325 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tag2el_325[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tag2el_325,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs = {
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs",
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_tags_325[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_332 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_332 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_332	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_330,  memb_X2N_id_constraint_329 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_331,  memb_X2N_criticality_constraint_329 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_332,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_332,  memb_X2N_extensionValue_constraint_329 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tag2el_329[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tag2el_329,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_tags_329[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_336 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_336 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_336	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_334,  memb_X2N_id_constraint_333 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_335,  memb_X2N_criticality_constraint_333 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_336,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_336,  memb_X2N_extensionValue_constraint_333 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tag2el_333[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tag2el_333,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_tags_333[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_340 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_340 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_340	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_338,  memb_X2N_id_constraint_337 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_339,  memb_X2N_criticality_constraint_337 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_340,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_340,  memb_X2N_extensionValue_constraint_337 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tag2el_337[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tag2el_337,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_tags_337[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_344 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_344 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_344	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_342,  memb_X2N_id_constraint_341 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_343,  memb_X2N_criticality_constraint_341 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_344,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_344,  memb_X2N_extensionValue_constraint_341 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_341[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_341,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_tags_341[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_348 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_348 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_348	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_346,  memb_X2N_id_constraint_345 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_347,  memb_X2N_criticality_constraint_345 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_348,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_348,  memb_X2N_extensionValue_constraint_345 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tag2el_345[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tag2el_345,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs = {
+	"E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs",
+	"E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_tags_345[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_352 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_352 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_352	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_350,  memb_X2N_id_constraint_349 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_351,  memb_X2N_criticality_constraint_349 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_352,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_352,  memb_X2N_extensionValue_constraint_349 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tag2el_349[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tag2el_349,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs = {
+	"E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs",
+	"E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_tags_349[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_356 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_356 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_356	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_354,  memb_X2N_id_constraint_353 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_355,  memb_X2N_criticality_constraint_353 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_356,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_356,  memb_X2N_extensionValue_constraint_353 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tag2el_353[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tag2el_353,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_tags_353[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_360 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_360 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_360	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_358,  memb_X2N_id_constraint_357 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_359,  memb_X2N_criticality_constraint_357 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_360,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_360,  memb_X2N_extensionValue_constraint_357 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_357[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tag2el_357,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs = {
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs",
+	"E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_tags_357[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_364 = {
+	sizeof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_364 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_364	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_361[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_362,  memb_X2N_id_constraint_361 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_363,  memb_X2N_criticality_constraint_361 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_364,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_364,  memb_X2N_extensionValue_constraint_361 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tag2el_361[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361 = {
+	sizeof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs),
+	offsetof(struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tag2el_361,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs = {
+	"ServedEUTRAcellsENDCX2Management-ExtIEs",
+	"ServedEUTRAcellsENDCX2Management-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361,
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[0]), /* 1 */
+	asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_tags_361[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_361,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_368 = {
+	sizeof(struct X2N_En_gNBServedCells_ExtIEs__extensionValue),
+	offsetof(struct X2N_En_gNBServedCells_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_En_gNBServedCells_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_En_gNBServedCells_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_368 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_368	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNBServedCells_ExtIEs_365[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNBServedCells_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_366,  memb_X2N_id_constraint_365 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNBServedCells_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_367,  memb_X2N_criticality_constraint_365 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNBServedCells_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_368,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_368,  memb_X2N_extensionValue_constraint_365 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNBServedCells_ExtIEs_tag2el_365[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNBServedCells_ExtIEs_specs_365 = {
+	sizeof(struct X2N_En_gNBServedCells_ExtIEs),
+	offsetof(struct X2N_En_gNBServedCells_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNBServedCells_ExtIEs_tag2el_365,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNBServedCells_ExtIEs = {
+	"En-gNBServedCells-ExtIEs",
+	"En-gNBServedCells-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365,
+	sizeof(asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365)
+		/sizeof(asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365[0]), /* 1 */
+	asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365)
+		/sizeof(asn_DEF_X2N_En_gNBServedCells_ExtIEs_tags_365[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNBServedCells_ExtIEs_365,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNBServedCells_ExtIEs_specs_365	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_372 = {
+	sizeof(struct X2N_ServedNRCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedNRCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedNRCell_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_372 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_372	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCell_Information_ExtIEs_369[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_370,  memb_X2N_id_constraint_369 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_371,  memb_X2N_criticality_constraint_369 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_372,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_372,  memb_X2N_extensionValue_constraint_369 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCell_Information_ExtIEs_tag2el_369[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCell_Information_ExtIEs_specs_369 = {
+	sizeof(struct X2N_ServedNRCell_Information_ExtIEs),
+	offsetof(struct X2N_ServedNRCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedNRCell_Information_ExtIEs_tag2el_369,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCell_Information_ExtIEs = {
+	"ServedNRCell-Information-ExtIEs",
+	"ServedNRCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369,
+	sizeof(asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369)
+		/sizeof(asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369)
+		/sizeof(asn_DEF_X2N_ServedNRCell_Information_ExtIEs_tags_369[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCell_Information_ExtIEs_369,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCell_Information_ExtIEs_specs_369	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_376 = {
+	sizeof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_376 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_376	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_FDD_InfoServedNRCell_Information_ExtIEs_373[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_374,  memb_X2N_id_constraint_373 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_375,  memb_X2N_criticality_constraint_373 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_376,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_376,  memb_X2N_extensionValue_constraint_373 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tag2el_373[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoServedNRCell_Information_ExtIEs_specs_373 = {
+	sizeof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs),
+	offsetof(struct X2N_FDD_InfoServedNRCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tag2el_373,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs = {
+	"FDD-InfoServedNRCell-Information-ExtIEs",
+	"FDD-InfoServedNRCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373,
+	sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373)
+		/sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[0]), /* 1 */
+	asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373)
+		/sizeof(asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs_tags_373[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_InfoServedNRCell_Information_ExtIEs_373,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FDD_InfoServedNRCell_Information_ExtIEs_specs_373	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_380 = {
+	sizeof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_380 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_380	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_378,  memb_X2N_id_constraint_377 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_379,  memb_X2N_criticality_constraint_377 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_380,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_380,  memb_X2N_extensionValue_constraint_377 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_377[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377 = {
+	sizeof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs),
+	offsetof(struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_377,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs = {
+	"FDD-InfoNeighbourServedNRCell-Information-ExtIEs",
+	"FDD-InfoNeighbourServedNRCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377,
+	sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377)
+		/sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[0]), /* 1 */
+	asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377)
+		/sizeof(asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_377[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_384 = {
+	sizeof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_384 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_384	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TDD_InfoServedNRCell_Information_ExtIEs_381[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_382,  memb_X2N_id_constraint_381 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_383,  memb_X2N_criticality_constraint_381 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_384,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_384,  memb_X2N_extensionValue_constraint_381 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tag2el_381[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoServedNRCell_Information_ExtIEs_specs_381 = {
+	sizeof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs),
+	offsetof(struct X2N_TDD_InfoServedNRCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tag2el_381,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs = {
+	"TDD-InfoServedNRCell-Information-ExtIEs",
+	"TDD-InfoServedNRCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381,
+	sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381)
+		/sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[0]), /* 1 */
+	asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381)
+		/sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs_tags_381[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_InfoServedNRCell_Information_ExtIEs_381,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TDD_InfoServedNRCell_Information_ExtIEs_specs_381	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_388 = {
+	sizeof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_388 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_388	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_386,  memb_X2N_id_constraint_385 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_387,  memb_X2N_criticality_constraint_385 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_388,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_388,  memb_X2N_extensionValue_constraint_385 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_385[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385 = {
+	sizeof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs),
+	offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tag2el_385,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs = {
+	"TDD-InfoNeighbourServedNRCell-Information-ExtIEs",
+	"TDD-InfoNeighbourServedNRCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385,
+	sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385)
+		/sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[0]), /* 1 */
+	asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385)
+		/sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_tags_385[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_392 = {
+	sizeof(struct X2N_NRNeighbour_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_NRNeighbour_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_NRNeighbour_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_NRNeighbour_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_392 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_392	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRNeighbour_Information_ExtIEs_389[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_390,  memb_X2N_id_constraint_389 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_391,  memb_X2N_criticality_constraint_389 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_NRNeighbour_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_392,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_392,  memb_X2N_extensionValue_constraint_389 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRNeighbour_Information_ExtIEs_tag2el_389[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRNeighbour_Information_ExtIEs_specs_389 = {
+	sizeof(struct X2N_NRNeighbour_Information_ExtIEs),
+	offsetof(struct X2N_NRNeighbour_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_NRNeighbour_Information_ExtIEs_tag2el_389,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRNeighbour_Information_ExtIEs = {
+	"NRNeighbour-Information-ExtIEs",
+	"NRNeighbour-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389,
+	sizeof(asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389)
+		/sizeof(asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389[0]), /* 1 */
+	asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389)
+		/sizeof(asn_DEF_X2N_NRNeighbour_Information_ExtIEs_tags_389[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRNeighbour_Information_ExtIEs_389,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRNeighbour_Information_ExtIEs_specs_389	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_396 = {
+	sizeof(struct X2N_Limited_list_ExtIEs__extensionValue),
+	offsetof(struct X2N_Limited_list_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_Limited_list_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_Limited_list_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_396 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_396	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Limited_list_ExtIEs_393[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Limited_list_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_394,  memb_X2N_id_constraint_393 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Limited_list_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_395,  memb_X2N_criticality_constraint_393 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_Limited_list_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_396,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_396,  memb_X2N_extensionValue_constraint_393 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Limited_list_ExtIEs_tags_393[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Limited_list_ExtIEs_tag2el_393[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_Limited_list_ExtIEs_specs_393 = {
+	sizeof(struct X2N_Limited_list_ExtIEs),
+	offsetof(struct X2N_Limited_list_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_Limited_list_ExtIEs_tag2el_393,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Limited_list_ExtIEs = {
+	"Limited-list-ExtIEs",
+	"Limited-list-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Limited_list_ExtIEs_tags_393,
+	sizeof(asn_DEF_X2N_Limited_list_ExtIEs_tags_393)
+		/sizeof(asn_DEF_X2N_Limited_list_ExtIEs_tags_393[0]), /* 1 */
+	asn_DEF_X2N_Limited_list_ExtIEs_tags_393,	/* Same as above */
+	sizeof(asn_DEF_X2N_Limited_list_ExtIEs_tags_393)
+		/sizeof(asn_DEF_X2N_Limited_list_ExtIEs_tags_393[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Limited_list_ExtIEs_393,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Limited_list_ExtIEs_specs_393	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_400 = {
+	sizeof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_400 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_400	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_398,  memb_X2N_id_constraint_397 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_399,  memb_X2N_criticality_constraint_397 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_400,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_400,  memb_X2N_extensionValue_constraint_397 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tag2el_397[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397 = {
+	sizeof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs),
+	offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tag2el_397,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs = {
+	"ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs",
+	"ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397,
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[0]), /* 1 */
+	asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_tags_397[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_404 = {
+	sizeof(struct X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_404 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_404	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToModify_Item_ExtIEs_401[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_402,  memb_X2N_id_constraint_401 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_403,  memb_X2N_criticality_constraint_401 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_404,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_404,  memb_X2N_extensionValue_constraint_401 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCellsToModify_Item_ExtIEs_tag2el_401[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToModify_Item_ExtIEs_specs_401 = {
+	sizeof(struct X2N_ServedNRCellsToModify_Item_ExtIEs),
+	offsetof(struct X2N_ServedNRCellsToModify_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedNRCellsToModify_Item_ExtIEs_tag2el_401,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs = {
+	"ServedNRCellsToModify-Item-ExtIEs",
+	"ServedNRCellsToModify-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401,
+	sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs_tags_401[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCellsToModify_Item_ExtIEs_401,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCellsToModify_Item_ExtIEs_specs_401	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_408 = {
+	sizeof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_408 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_408	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToActivate_Item_ExtIEs_405[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_406,  memb_X2N_id_constraint_405 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_407,  memb_X2N_criticality_constraint_405 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_408,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_408,  memb_X2N_extensionValue_constraint_405 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCellsToActivate_Item_ExtIEs_tag2el_405[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToActivate_Item_ExtIEs_specs_405 = {
+	sizeof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs),
+	offsetof(struct X2N_ServedNRCellsToActivate_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedNRCellsToActivate_Item_ExtIEs_tag2el_405,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs = {
+	"ServedNRCellsToActivate-Item-ExtIEs",
+	"ServedNRCellsToActivate-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405,
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs_tags_405[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCellsToActivate_Item_ExtIEs_405,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCellsToActivate_Item_ExtIEs_specs_405	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_412 = {
+	sizeof(struct X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_412 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_412	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ActivatedNRCellList_Item_ExtIEs_409[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_410,  memb_X2N_id_constraint_409 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_411,  memb_X2N_criticality_constraint_409 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_412,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_412,  memb_X2N_extensionValue_constraint_409 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ActivatedNRCellList_Item_ExtIEs_tag2el_409[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedNRCellList_Item_ExtIEs_specs_409 = {
+	sizeof(struct X2N_ActivatedNRCellList_Item_ExtIEs),
+	offsetof(struct X2N_ActivatedNRCellList_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ActivatedNRCellList_Item_ExtIEs_tag2el_409,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs = {
+	"ActivatedNRCellList-Item-ExtIEs",
+	"ActivatedNRCellList-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409,
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409[0]), /* 1 */
+	asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409,	/* Same as above */
+	sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409)
+		/sizeof(asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs_tags_409[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ActivatedNRCellList_Item_ExtIEs_409,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ActivatedNRCellList_Item_ExtIEs_specs_409	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_416 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_416 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_416	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_413[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_414,  memb_X2N_id_constraint_413 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_415,  memb_X2N_criticality_constraint_413 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_416,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_416,  memb_X2N_extensionValue_constraint_413 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tag2el_413[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tag2el_413,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs = {
+	"E-RABs-DataForwardingAddress-ItemExtIEs",
+	"E-RABs-DataForwardingAddress-ItemExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413,
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_tags_413[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_413,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_420 = {
+	sizeof(struct X2N_ABSInformationFDD_ExtIEs__extensionValue),
+	offsetof(struct X2N_ABSInformationFDD_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ABSInformationFDD_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ABSInformationFDD_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_420 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_420	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ABSInformationFDD_ExtIEs_417[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_418,  memb_X2N_id_constraint_417 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_419,  memb_X2N_criticality_constraint_417 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationFDD_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_420,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_420,  memb_X2N_extensionValue_constraint_417 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABSInformationFDD_ExtIEs_tag2el_417[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationFDD_ExtIEs_specs_417 = {
+	sizeof(struct X2N_ABSInformationFDD_ExtIEs),
+	offsetof(struct X2N_ABSInformationFDD_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ABSInformationFDD_ExtIEs_tag2el_417,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationFDD_ExtIEs = {
+	"ABSInformationFDD-ExtIEs",
+	"ABSInformationFDD-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417,
+	sizeof(asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417)
+		/sizeof(asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417[0]), /* 1 */
+	asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417)
+		/sizeof(asn_DEF_X2N_ABSInformationFDD_ExtIEs_tags_417[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABSInformationFDD_ExtIEs_417,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ABSInformationFDD_ExtIEs_specs_417	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_424 = {
+	sizeof(struct X2N_ABSInformationTDD_ExtIEs__extensionValue),
+	offsetof(struct X2N_ABSInformationTDD_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ABSInformationTDD_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ABSInformationTDD_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_424 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_424	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ABSInformationTDD_ExtIEs_421[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_422,  memb_X2N_id_constraint_421 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_423,  memb_X2N_criticality_constraint_421 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ABSInformationTDD_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_424,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_424,  memb_X2N_extensionValue_constraint_421 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABSInformationTDD_ExtIEs_tag2el_421[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationTDD_ExtIEs_specs_421 = {
+	sizeof(struct X2N_ABSInformationTDD_ExtIEs),
+	offsetof(struct X2N_ABSInformationTDD_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ABSInformationTDD_ExtIEs_tag2el_421,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationTDD_ExtIEs = {
+	"ABSInformationTDD-ExtIEs",
+	"ABSInformationTDD-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421,
+	sizeof(asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421)
+		/sizeof(asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421[0]), /* 1 */
+	asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421)
+		/sizeof(asn_DEF_X2N_ABSInformationTDD_ExtIEs_tags_421[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABSInformationTDD_ExtIEs_421,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ABSInformationTDD_ExtIEs_specs_421	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_428 = {
+	sizeof(struct X2N_ABS_Status_ExtIEs__extensionValue),
+	offsetof(struct X2N_ABS_Status_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ABS_Status_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ABS_Status_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_428 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_428	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ABS_Status_ExtIEs_425[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABS_Status_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_426,  memb_X2N_id_constraint_425 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ABS_Status_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_427,  memb_X2N_criticality_constraint_425 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ABS_Status_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_428,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_428,  memb_X2N_extensionValue_constraint_425 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ABS_Status_ExtIEs_tags_425[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ABS_Status_ExtIEs_tag2el_425[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ABS_Status_ExtIEs_specs_425 = {
+	sizeof(struct X2N_ABS_Status_ExtIEs),
+	offsetof(struct X2N_ABS_Status_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ABS_Status_ExtIEs_tag2el_425,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ABS_Status_ExtIEs = {
+	"ABS-Status-ExtIEs",
+	"ABS-Status-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ABS_Status_ExtIEs_tags_425,
+	sizeof(asn_DEF_X2N_ABS_Status_ExtIEs_tags_425)
+		/sizeof(asn_DEF_X2N_ABS_Status_ExtIEs_tags_425[0]), /* 1 */
+	asn_DEF_X2N_ABS_Status_ExtIEs_tags_425,	/* Same as above */
+	sizeof(asn_DEF_X2N_ABS_Status_ExtIEs_tags_425)
+		/sizeof(asn_DEF_X2N_ABS_Status_ExtIEs_tags_425[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ABS_Status_ExtIEs_425,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ABS_Status_ExtIEs_specs_425	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_432 = {
+	sizeof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_432 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_432	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframe_Info_ExtIEs_429[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_430,  memb_X2N_id_constraint_429 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_431,  memb_X2N_criticality_constraint_429 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_432,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_432,  memb_X2N_extensionValue_constraint_429 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tag2el_429[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframe_Info_ExtIEs_specs_429 = {
+	sizeof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs),
+	offsetof(struct X2N_AdditionalSpecialSubframe_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tag2el_429,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs = {
+	"AdditionalSpecialSubframe-Info-ExtIEs",
+	"AdditionalSpecialSubframe-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs_tags_429[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AdditionalSpecialSubframe_Info_ExtIEs_429,
+	3,	/* Elements count */
+	&asn_SPC_X2N_AdditionalSpecialSubframe_Info_ExtIEs_specs_429	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_436 = {
+	sizeof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_436 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_436	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_433[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_434,  memb_X2N_id_constraint_433 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_435,  memb_X2N_criticality_constraint_433 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_436,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_436,  memb_X2N_extensionValue_constraint_433 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tag2el_433[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433 = {
+	sizeof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs),
+	offsetof(struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tag2el_433,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs = {
+	"AdditionalSpecialSubframeExtension-Info-ExtIEs",
+	"AdditionalSpecialSubframeExtension-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433,
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[0]), /* 1 */
+	asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433,	/* Same as above */
+	sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433)
+		/sizeof(asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_tags_433[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_433,
+	3,	/* Elements count */
+	&asn_SPC_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_440 = {
+	sizeof(struct X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue),
+	offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_440 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_440	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_AllocationAndRetentionPriority_ExtIEs_437[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_438,  memb_X2N_id_constraint_437 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_439,  memb_X2N_criticality_constraint_437 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_440,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_440,  memb_X2N_extensionValue_constraint_437 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AllocationAndRetentionPriority_ExtIEs_tag2el_437[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AllocationAndRetentionPriority_ExtIEs_specs_437 = {
+	sizeof(struct X2N_AllocationAndRetentionPriority_ExtIEs),
+	offsetof(struct X2N_AllocationAndRetentionPriority_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_AllocationAndRetentionPriority_ExtIEs_tag2el_437,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs = {
+	"AllocationAndRetentionPriority-ExtIEs",
+	"AllocationAndRetentionPriority-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437,
+	sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437)
+		/sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437[0]), /* 1 */
+	asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437,	/* Same as above */
+	sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437)
+		/sizeof(asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs_tags_437[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AllocationAndRetentionPriority_ExtIEs_437,
+	3,	/* Elements count */
+	&asn_SPC_X2N_AllocationAndRetentionPriority_ExtIEs_specs_437	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_444 = {
+	sizeof(struct X2N_AS_SecurityInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_AS_SecurityInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_AS_SecurityInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_AS_SecurityInformation_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_444 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_444	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_AS_SecurityInformation_ExtIEs_441[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AS_SecurityInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_442,  memb_X2N_id_constraint_441 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_AS_SecurityInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_443,  memb_X2N_criticality_constraint_441 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_AS_SecurityInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_444,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_444,  memb_X2N_extensionValue_constraint_441 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_AS_SecurityInformation_ExtIEs_tag2el_441[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_AS_SecurityInformation_ExtIEs_specs_441 = {
+	sizeof(struct X2N_AS_SecurityInformation_ExtIEs),
+	offsetof(struct X2N_AS_SecurityInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_AS_SecurityInformation_ExtIEs_tag2el_441,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_AS_SecurityInformation_ExtIEs = {
+	"AS-SecurityInformation-ExtIEs",
+	"AS-SecurityInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441,
+	sizeof(asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441)
+		/sizeof(asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441[0]), /* 1 */
+	asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441,	/* Same as above */
+	sizeof(asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441)
+		/sizeof(asn_DEF_X2N_AS_SecurityInformation_ExtIEs_tags_441[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_AS_SecurityInformation_ExtIEs_441,
+	3,	/* Elements count */
+	&asn_SPC_X2N_AS_SecurityInformation_ExtIEs_specs_441	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_448 = {
+	sizeof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue),
+	offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_448 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_448	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_BluetoothMeasurementConfiguration_ExtIEs_445[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_446,  memb_X2N_id_constraint_445 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_447,  memb_X2N_criticality_constraint_445 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_448,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_448,  memb_X2N_extensionValue_constraint_445 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_BluetoothMeasurementConfiguration_ExtIEs_tag2el_445[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_BluetoothMeasurementConfiguration_ExtIEs_specs_445 = {
+	sizeof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs),
+	offsetof(struct X2N_BluetoothMeasurementConfiguration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_BluetoothMeasurementConfiguration_ExtIEs_tag2el_445,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs = {
+	"BluetoothMeasurementConfiguration-ExtIEs",
+	"BluetoothMeasurementConfiguration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445,
+	sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445)
+		/sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445[0]), /* 1 */
+	asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445,	/* Same as above */
+	sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445)
+		/sizeof(asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs_tags_445[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_BluetoothMeasurementConfiguration_ExtIEs_445,
+	3,	/* Elements count */
+	&asn_SPC_X2N_BluetoothMeasurementConfiguration_ExtIEs_specs_445	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_452 = {
+	sizeof(struct X2N_CellBasedMDT_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellBasedMDT_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellBasedMDT_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellBasedMDT_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_452 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_452	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellBasedMDT_ExtIEs_449[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedMDT_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_450,  memb_X2N_id_constraint_449 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedMDT_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_451,  memb_X2N_criticality_constraint_449 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedMDT_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_452,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_452,  memb_X2N_extensionValue_constraint_449 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellBasedMDT_ExtIEs_tag2el_449[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedMDT_ExtIEs_specs_449 = {
+	sizeof(struct X2N_CellBasedMDT_ExtIEs),
+	offsetof(struct X2N_CellBasedMDT_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellBasedMDT_ExtIEs_tag2el_449,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedMDT_ExtIEs = {
+	"CellBasedMDT-ExtIEs",
+	"CellBasedMDT-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449,
+	sizeof(asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449)
+		/sizeof(asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449[0]), /* 1 */
+	asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449)
+		/sizeof(asn_DEF_X2N_CellBasedMDT_ExtIEs_tags_449[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellBasedMDT_ExtIEs_449,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellBasedMDT_ExtIEs_specs_449	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_456 = {
+	sizeof(struct X2N_CellBasedQMC_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellBasedQMC_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellBasedQMC_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellBasedQMC_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_456 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_456	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellBasedQMC_ExtIEs_453[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedQMC_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_454,  memb_X2N_id_constraint_453 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedQMC_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_455,  memb_X2N_criticality_constraint_453 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellBasedQMC_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_456,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_456,  memb_X2N_extensionValue_constraint_453 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellBasedQMC_ExtIEs_tag2el_453[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedQMC_ExtIEs_specs_453 = {
+	sizeof(struct X2N_CellBasedQMC_ExtIEs),
+	offsetof(struct X2N_CellBasedQMC_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellBasedQMC_ExtIEs_tag2el_453,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedQMC_ExtIEs = {
+	"CellBasedQMC-ExtIEs",
+	"CellBasedQMC-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453,
+	sizeof(asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453)
+		/sizeof(asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453[0]), /* 1 */
+	asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453)
+		/sizeof(asn_DEF_X2N_CellBasedQMC_ExtIEs_tags_453[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellBasedQMC_ExtIEs_453,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellBasedQMC_ExtIEs_specs_453	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_460 = {
+	sizeof(struct X2N_CellReplacingInfo_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellReplacingInfo_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellReplacingInfo_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellReplacingInfo_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_460 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_460	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellReplacingInfo_ExtIEs_457[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellReplacingInfo_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_458,  memb_X2N_id_constraint_457 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellReplacingInfo_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_459,  memb_X2N_criticality_constraint_457 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellReplacingInfo_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_460,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_460,  memb_X2N_extensionValue_constraint_457 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellReplacingInfo_ExtIEs_tag2el_457[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellReplacingInfo_ExtIEs_specs_457 = {
+	sizeof(struct X2N_CellReplacingInfo_ExtIEs),
+	offsetof(struct X2N_CellReplacingInfo_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellReplacingInfo_ExtIEs_tag2el_457,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellReplacingInfo_ExtIEs = {
+	"CellReplacingInfo-ExtIEs",
+	"CellReplacingInfo-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457,
+	sizeof(asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457)
+		/sizeof(asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457[0]), /* 1 */
+	asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457)
+		/sizeof(asn_DEF_X2N_CellReplacingInfo_ExtIEs_tags_457[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellReplacingInfo_ExtIEs_457,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellReplacingInfo_ExtIEs_specs_457	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_464 = {
+	sizeof(struct X2N_CellType_ExtIEs__extensionValue),
+	offsetof(struct X2N_CellType_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CellType_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CellType_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_464 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_464	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellType_ExtIEs_461[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellType_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_462,  memb_X2N_id_constraint_461 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellType_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_463,  memb_X2N_criticality_constraint_461 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellType_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_464,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_464,  memb_X2N_extensionValue_constraint_461 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellType_ExtIEs_tags_461[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellType_ExtIEs_tag2el_461[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellType_ExtIEs_specs_461 = {
+	sizeof(struct X2N_CellType_ExtIEs),
+	offsetof(struct X2N_CellType_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CellType_ExtIEs_tag2el_461,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellType_ExtIEs = {
+	"CellType-ExtIEs",
+	"CellType-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellType_ExtIEs_tags_461,
+	sizeof(asn_DEF_X2N_CellType_ExtIEs_tags_461)
+		/sizeof(asn_DEF_X2N_CellType_ExtIEs_tags_461[0]), /* 1 */
+	asn_DEF_X2N_CellType_ExtIEs_tags_461,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellType_ExtIEs_tags_461)
+		/sizeof(asn_DEF_X2N_CellType_ExtIEs_tags_461[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellType_ExtIEs_461,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellType_ExtIEs_specs_461	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_468 = {
+	sizeof(struct X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_468 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_468	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CNTypeRestrictionsItem_ExtIEs_465[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_466,  memb_X2N_id_constraint_465 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_467,  memb_X2N_criticality_constraint_465 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_468,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_468,  memb_X2N_extensionValue_constraint_465 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CNTypeRestrictionsItem_ExtIEs_tag2el_465[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CNTypeRestrictionsItem_ExtIEs_specs_465 = {
+	sizeof(struct X2N_CNTypeRestrictionsItem_ExtIEs),
+	offsetof(struct X2N_CNTypeRestrictionsItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CNTypeRestrictionsItem_ExtIEs_tag2el_465,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs = {
+	"CNTypeRestrictionsItem-ExtIEs",
+	"CNTypeRestrictionsItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465,
+	sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465[0]), /* 1 */
+	asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465,	/* Same as above */
+	sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465)
+		/sizeof(asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs_tags_465[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CNTypeRestrictionsItem_ExtIEs_465,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CNTypeRestrictionsItem_ExtIEs_specs_465	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_472 = {
+	sizeof(struct X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_472 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_472	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSetItem_ExtIEs_469[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_470,  memb_X2N_id_constraint_469 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_471,  memb_X2N_criticality_constraint_469 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_472,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_472,  memb_X2N_extensionValue_constraint_469 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPHypothesisSetItem_ExtIEs_tag2el_469[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPHypothesisSetItem_ExtIEs_specs_469 = {
+	sizeof(struct X2N_CoMPHypothesisSetItem_ExtIEs),
+	offsetof(struct X2N_CoMPHypothesisSetItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CoMPHypothesisSetItem_ExtIEs_tag2el_469,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs = {
+	"CoMPHypothesisSetItem-ExtIEs",
+	"CoMPHypothesisSetItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469,
+	sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469[0]), /* 1 */
+	asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469)
+		/sizeof(asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs_tags_469[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPHypothesisSetItem_ExtIEs_469,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPHypothesisSetItem_ExtIEs_specs_469	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_476 = {
+	sizeof(struct X2N_CoMPInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_CoMPInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CoMPInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CoMPInformation_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_476 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_476	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPInformation_ExtIEs_473[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_474,  memb_X2N_id_constraint_473 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_475,  memb_X2N_criticality_constraint_473 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_476,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_476,  memb_X2N_extensionValue_constraint_473 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPInformation_ExtIEs_tag2el_473[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformation_ExtIEs_specs_473 = {
+	sizeof(struct X2N_CoMPInformation_ExtIEs),
+	offsetof(struct X2N_CoMPInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CoMPInformation_ExtIEs_tag2el_473,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformation_ExtIEs = {
+	"CoMPInformation-ExtIEs",
+	"CoMPInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473,
+	sizeof(asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473)
+		/sizeof(asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473)
+		/sizeof(asn_DEF_X2N_CoMPInformation_ExtIEs_tags_473[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPInformation_ExtIEs_473,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPInformation_ExtIEs_specs_473	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_480 = {
+	sizeof(struct X2N_CoMPInformationItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_CoMPInformationItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CoMPInformationItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CoMPInformationItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_480 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_480	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPInformationItem_ExtIEs_477[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_478,  memb_X2N_id_constraint_477 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_479,  memb_X2N_criticality_constraint_477 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_480,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_480,  memb_X2N_extensionValue_constraint_477 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPInformationItem_ExtIEs_tag2el_477[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformationItem_ExtIEs_specs_477 = {
+	sizeof(struct X2N_CoMPInformationItem_ExtIEs),
+	offsetof(struct X2N_CoMPInformationItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CoMPInformationItem_ExtIEs_tag2el_477,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationItem_ExtIEs = {
+	"CoMPInformationItem-ExtIEs",
+	"CoMPInformationItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477,
+	sizeof(asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477)
+		/sizeof(asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477)
+		/sizeof(asn_DEF_X2N_CoMPInformationItem_ExtIEs_tags_477[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPInformationItem_ExtIEs_477,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPInformationItem_ExtIEs_specs_477	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_484 = {
+	sizeof(struct X2N_CoMPInformationStartTime_ExtIEs__extensionValue),
+	offsetof(struct X2N_CoMPInformationStartTime_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CoMPInformationStartTime_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CoMPInformationStartTime_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_484 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_484	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CoMPInformationStartTime_ExtIEs_481[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationStartTime_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_482,  memb_X2N_id_constraint_481 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationStartTime_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_483,  memb_X2N_criticality_constraint_481 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CoMPInformationStartTime_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_484,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_484,  memb_X2N_extensionValue_constraint_481 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CoMPInformationStartTime_ExtIEs_tag2el_481[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformationStartTime_ExtIEs_specs_481 = {
+	sizeof(struct X2N_CoMPInformationStartTime_ExtIEs),
+	offsetof(struct X2N_CoMPInformationStartTime_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CoMPInformationStartTime_ExtIEs_tag2el_481,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationStartTime_ExtIEs = {
+	"CoMPInformationStartTime-ExtIEs",
+	"CoMPInformationStartTime-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481,
+	sizeof(asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481)
+		/sizeof(asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481[0]), /* 1 */
+	asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481,	/* Same as above */
+	sizeof(asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481)
+		/sizeof(asn_DEF_X2N_CoMPInformationStartTime_ExtIEs_tags_481[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CoMPInformationStartTime_ExtIEs_481,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CoMPInformationStartTime_ExtIEs_specs_481	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_488 = {
+	sizeof(struct X2N_CompositeAvailableCapacity_ExtIEs__extensionValue),
+	offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CompositeAvailableCapacity_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_488 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_488	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacity_ExtIEs_485[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_486,  memb_X2N_id_constraint_485 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_487,  memb_X2N_criticality_constraint_485 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_488,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_488,  memb_X2N_extensionValue_constraint_485 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompositeAvailableCapacity_ExtIEs_tag2el_485[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacity_ExtIEs_specs_485 = {
+	sizeof(struct X2N_CompositeAvailableCapacity_ExtIEs),
+	offsetof(struct X2N_CompositeAvailableCapacity_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CompositeAvailableCapacity_ExtIEs_tag2el_485,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs = {
+	"CompositeAvailableCapacity-ExtIEs",
+	"CompositeAvailableCapacity-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485,
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485[0]), /* 1 */
+	asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs_tags_485[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompositeAvailableCapacity_ExtIEs_485,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompositeAvailableCapacity_ExtIEs_specs_485	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_492 = {
+	sizeof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue),
+	offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_492 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_492	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacityGroup_ExtIEs_489[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_490,  memb_X2N_id_constraint_489 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_491,  memb_X2N_criticality_constraint_489 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_492,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_492,  memb_X2N_extensionValue_constraint_489 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompositeAvailableCapacityGroup_ExtIEs_tag2el_489[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacityGroup_ExtIEs_specs_489 = {
+	sizeof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs),
+	offsetof(struct X2N_CompositeAvailableCapacityGroup_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CompositeAvailableCapacityGroup_ExtIEs_tag2el_489,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs = {
+	"CompositeAvailableCapacityGroup-ExtIEs",
+	"CompositeAvailableCapacityGroup-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489,
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489[0]), /* 1 */
+	asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489)
+		/sizeof(asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs_tags_489[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompositeAvailableCapacityGroup_ExtIEs_489,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompositeAvailableCapacityGroup_ExtIEs_specs_489	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_496 = {
+	sizeof(struct X2N_COUNTvalue_ExtIEs__extensionValue),
+	offsetof(struct X2N_COUNTvalue_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_COUNTvalue_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_COUNTvalue_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_496 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_496	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_COUNTvalue_ExtIEs_493[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvalue_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_494,  memb_X2N_id_constraint_493 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvalue_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_495,  memb_X2N_criticality_constraint_493 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvalue_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_496,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_496,  memb_X2N_extensionValue_constraint_493 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTvalue_ExtIEs_tag2el_493[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvalue_ExtIEs_specs_493 = {
+	sizeof(struct X2N_COUNTvalue_ExtIEs),
+	offsetof(struct X2N_COUNTvalue_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_COUNTvalue_ExtIEs_tag2el_493,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvalue_ExtIEs = {
+	"COUNTvalue-ExtIEs",
+	"COUNTvalue-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493,
+	sizeof(asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493)
+		/sizeof(asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493[0]), /* 1 */
+	asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493)
+		/sizeof(asn_DEF_X2N_COUNTvalue_ExtIEs_tags_493[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTvalue_ExtIEs_493,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTvalue_ExtIEs_specs_493	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_500 = {
+	sizeof(struct X2N_COUNTValueExtended_ExtIEs__extensionValue),
+	offsetof(struct X2N_COUNTValueExtended_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_COUNTValueExtended_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_COUNTValueExtended_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_500 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_500	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_COUNTValueExtended_ExtIEs_497[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTValueExtended_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_498,  memb_X2N_id_constraint_497 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTValueExtended_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_499,  memb_X2N_criticality_constraint_497 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTValueExtended_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_500,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_500,  memb_X2N_extensionValue_constraint_497 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTValueExtended_ExtIEs_tag2el_497[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTValueExtended_ExtIEs_specs_497 = {
+	sizeof(struct X2N_COUNTValueExtended_ExtIEs),
+	offsetof(struct X2N_COUNTValueExtended_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_COUNTValueExtended_ExtIEs_tag2el_497,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTValueExtended_ExtIEs = {
+	"COUNTValueExtended-ExtIEs",
+	"COUNTValueExtended-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497,
+	sizeof(asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497)
+		/sizeof(asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497[0]), /* 1 */
+	asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497)
+		/sizeof(asn_DEF_X2N_COUNTValueExtended_ExtIEs_tags_497[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTValueExtended_ExtIEs_497,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTValueExtended_ExtIEs_specs_497	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_504 = {
+	sizeof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue),
+	offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_504 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_504	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_501[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_502,  memb_X2N_id_constraint_501 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_503,  memb_X2N_criticality_constraint_501 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_504,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_504,  memb_X2N_extensionValue_constraint_501 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tag2el_501[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501 = {
+	sizeof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs),
+	offsetof(struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tag2el_501,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs = {
+	"COUNTvaluePDCP-SNlength18-ExtIEs",
+	"COUNTvaluePDCP-SNlength18-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501,
+	sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501)
+		/sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[0]), /* 1 */
+	asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501,	/* Same as above */
+	sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501)
+		/sizeof(asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_tags_501[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_501,
+	3,	/* Elements count */
+	&asn_SPC_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_508 = {
+	sizeof(struct X2N_CriticalityDiagnostics_ExtIEs__extensionValue),
+	offsetof(struct X2N_CriticalityDiagnostics_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CriticalityDiagnostics_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CriticalityDiagnostics_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_508 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_508	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_ExtIEs_505[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_506,  memb_X2N_id_constraint_505 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_507,  memb_X2N_criticality_constraint_505 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_508,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_508,  memb_X2N_extensionValue_constraint_505 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CriticalityDiagnostics_ExtIEs_tag2el_505[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CriticalityDiagnostics_ExtIEs_specs_505 = {
+	sizeof(struct X2N_CriticalityDiagnostics_ExtIEs),
+	offsetof(struct X2N_CriticalityDiagnostics_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CriticalityDiagnostics_ExtIEs_tag2el_505,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_ExtIEs = {
+	"CriticalityDiagnostics-ExtIEs",
+	"CriticalityDiagnostics-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505,
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505[0]), /* 1 */
+	asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505,	/* Same as above */
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_ExtIEs_tags_505[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CriticalityDiagnostics_ExtIEs_505,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CriticalityDiagnostics_ExtIEs_specs_505	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_512 = {
+	sizeof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue),
+	offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_512 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_512	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_IE_List_ExtIEs_509[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_510,  memb_X2N_id_constraint_509 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_511,  memb_X2N_criticality_constraint_509 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_512,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_512,  memb_X2N_extensionValue_constraint_509 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_509[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_509 = {
+	sizeof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs),
+	offsetof(struct X2N_CriticalityDiagnostics_IE_List_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tag2el_509,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs = {
+	"CriticalityDiagnostics-IE-List-ExtIEs",
+	"CriticalityDiagnostics-IE-List-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509,
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[0]), /* 1 */
+	asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509,	/* Same as above */
+	sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509)
+		/sizeof(asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs_tags_509[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CriticalityDiagnostics_IE_List_ExtIEs_509,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_509	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_516 = {
+	sizeof(struct X2N_CSIReportList_ExtIEs__extensionValue),
+	offsetof(struct X2N_CSIReportList_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CSIReportList_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CSIReportList_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_516 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_516	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CSIReportList_ExtIEs_513[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportList_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_514,  memb_X2N_id_constraint_513 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportList_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_515,  memb_X2N_criticality_constraint_513 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportList_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_516,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_516,  memb_X2N_extensionValue_constraint_513 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportList_ExtIEs_tags_513[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CSIReportList_ExtIEs_tag2el_513[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportList_ExtIEs_specs_513 = {
+	sizeof(struct X2N_CSIReportList_ExtIEs),
+	offsetof(struct X2N_CSIReportList_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CSIReportList_ExtIEs_tag2el_513,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportList_ExtIEs = {
+	"CSIReportList-ExtIEs",
+	"CSIReportList-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CSIReportList_ExtIEs_tags_513,
+	sizeof(asn_DEF_X2N_CSIReportList_ExtIEs_tags_513)
+		/sizeof(asn_DEF_X2N_CSIReportList_ExtIEs_tags_513[0]), /* 1 */
+	asn_DEF_X2N_CSIReportList_ExtIEs_tags_513,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportList_ExtIEs_tags_513)
+		/sizeof(asn_DEF_X2N_CSIReportList_ExtIEs_tags_513[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CSIReportList_ExtIEs_513,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CSIReportList_ExtIEs_specs_513	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_520 = {
+	sizeof(struct X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue),
+	offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_520 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_520	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcess_ExtIEs_517[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_518,  memb_X2N_id_constraint_517 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_519,  memb_X2N_criticality_constraint_517 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_520,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_520,  memb_X2N_extensionValue_constraint_517 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CSIReportPerCSIProcess_ExtIEs_tag2el_517[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportPerCSIProcess_ExtIEs_specs_517 = {
+	sizeof(struct X2N_CSIReportPerCSIProcess_ExtIEs),
+	offsetof(struct X2N_CSIReportPerCSIProcess_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CSIReportPerCSIProcess_ExtIEs_tag2el_517,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs = {
+	"CSIReportPerCSIProcess-ExtIEs",
+	"CSIReportPerCSIProcess-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517,
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517[0]), /* 1 */
+	asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs_tags_517[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CSIReportPerCSIProcess_ExtIEs_517,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CSIReportPerCSIProcess_ExtIEs_specs_517	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_524 = {
+	sizeof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_524 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_524	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcessItem_ExtIEs_521[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_522,  memb_X2N_id_constraint_521 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_523,  memb_X2N_criticality_constraint_521 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_524,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_524,  memb_X2N_extensionValue_constraint_521 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CSIReportPerCSIProcessItem_ExtIEs_tag2el_521[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportPerCSIProcessItem_ExtIEs_specs_521 = {
+	sizeof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs),
+	offsetof(struct X2N_CSIReportPerCSIProcessItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_CSIReportPerCSIProcessItem_ExtIEs_tag2el_521,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs = {
+	"CSIReportPerCSIProcessItem-ExtIEs",
+	"CSIReportPerCSIProcessItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521,
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521[0]), /* 1 */
+	asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521,	/* Same as above */
+	sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521)
+		/sizeof(asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs_tags_521[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CSIReportPerCSIProcessItem_ExtIEs_521,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CSIReportPerCSIProcessItem_ExtIEs_specs_521	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_528 = {
+	sizeof(struct X2N_DataTrafficResourceIndication_ExtIEs__extensionValue),
+	offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_DataTrafficResourceIndication_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_528 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_528	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_DataTrafficResourceIndication_ExtIEs_525[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_526,  memb_X2N_id_constraint_525 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_527,  memb_X2N_criticality_constraint_525 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_528,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_528,  memb_X2N_extensionValue_constraint_525 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DataTrafficResourceIndication_ExtIEs_tag2el_525[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DataTrafficResourceIndication_ExtIEs_specs_525 = {
+	sizeof(struct X2N_DataTrafficResourceIndication_ExtIEs),
+	offsetof(struct X2N_DataTrafficResourceIndication_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_DataTrafficResourceIndication_ExtIEs_tag2el_525,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs = {
+	"DataTrafficResourceIndication-ExtIEs",
+	"DataTrafficResourceIndication-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525,
+	sizeof(asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525)
+		/sizeof(asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525[0]), /* 1 */
+	asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525,	/* Same as above */
+	sizeof(asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525)
+		/sizeof(asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs_tags_525[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DataTrafficResourceIndication_ExtIEs_525,
+	3,	/* Elements count */
+	&asn_SPC_X2N_DataTrafficResourceIndication_ExtIEs_specs_525	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_532 = {
+	sizeof(struct X2N_DeliveryStatus_ExtIEs__extensionValue),
+	offsetof(struct X2N_DeliveryStatus_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_DeliveryStatus_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_DeliveryStatus_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_532 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_532	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_DeliveryStatus_ExtIEs_529[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DeliveryStatus_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_530,  memb_X2N_id_constraint_529 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DeliveryStatus_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_531,  memb_X2N_criticality_constraint_529 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_DeliveryStatus_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_532,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_532,  memb_X2N_extensionValue_constraint_529 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DeliveryStatus_ExtIEs_tag2el_529[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DeliveryStatus_ExtIEs_specs_529 = {
+	sizeof(struct X2N_DeliveryStatus_ExtIEs),
+	offsetof(struct X2N_DeliveryStatus_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_DeliveryStatus_ExtIEs_tag2el_529,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DeliveryStatus_ExtIEs = {
+	"DeliveryStatus-ExtIEs",
+	"DeliveryStatus-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529,
+	sizeof(asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529)
+		/sizeof(asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529[0]), /* 1 */
+	asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529,	/* Same as above */
+	sizeof(asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529)
+		/sizeof(asn_DEF_X2N_DeliveryStatus_ExtIEs_tags_529[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DeliveryStatus_ExtIEs_529,
+	3,	/* Elements count */
+	&asn_SPC_X2N_DeliveryStatus_ExtIEs_specs_529	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_536 = {
+	sizeof(struct X2N_DynamicNAICSInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_DynamicNAICSInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_DynamicNAICSInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_DynamicNAICSInformation_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_536 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_536	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_DynamicNAICSInformation_ExtIEs_533[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DynamicNAICSInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_534,  memb_X2N_id_constraint_533 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DynamicNAICSInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_535,  memb_X2N_criticality_constraint_533 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_DynamicNAICSInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_536,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_536,  memb_X2N_extensionValue_constraint_533 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DynamicNAICSInformation_ExtIEs_tag2el_533[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DynamicNAICSInformation_ExtIEs_specs_533 = {
+	sizeof(struct X2N_DynamicNAICSInformation_ExtIEs),
+	offsetof(struct X2N_DynamicNAICSInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_DynamicNAICSInformation_ExtIEs_tag2el_533,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DynamicNAICSInformation_ExtIEs = {
+	"DynamicNAICSInformation-ExtIEs",
+	"DynamicNAICSInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533,
+	sizeof(asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533)
+		/sizeof(asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533[0]), /* 1 */
+	asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533,	/* Same as above */
+	sizeof(asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533)
+		/sizeof(asn_DEF_X2N_DynamicNAICSInformation_ExtIEs_tags_533[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DynamicNAICSInformation_ExtIEs_533,
+	3,	/* Elements count */
+	&asn_SPC_X2N_DynamicNAICSInformation_ExtIEs_specs_533	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_540 = {
+	sizeof(struct X2N_ECGI_ExtIEs__extensionValue),
+	offsetof(struct X2N_ECGI_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ECGI_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ECGI_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_540 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_540	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ECGI_ExtIEs_537[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ECGI_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_538,  memb_X2N_id_constraint_537 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ECGI_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_539,  memb_X2N_criticality_constraint_537 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ECGI_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_540,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_540,  memb_X2N_extensionValue_constraint_537 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ECGI_ExtIEs_tags_537[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ECGI_ExtIEs_tag2el_537[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ECGI_ExtIEs_specs_537 = {
+	sizeof(struct X2N_ECGI_ExtIEs),
+	offsetof(struct X2N_ECGI_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ECGI_ExtIEs_tag2el_537,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ECGI_ExtIEs = {
+	"ECGI-ExtIEs",
+	"ECGI-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ECGI_ExtIEs_tags_537,
+	sizeof(asn_DEF_X2N_ECGI_ExtIEs_tags_537)
+		/sizeof(asn_DEF_X2N_ECGI_ExtIEs_tags_537[0]), /* 1 */
+	asn_DEF_X2N_ECGI_ExtIEs_tags_537,	/* Same as above */
+	sizeof(asn_DEF_X2N_ECGI_ExtIEs_tags_537)
+		/sizeof(asn_DEF_X2N_ECGI_ExtIEs_tags_537[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ECGI_ExtIEs_537,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ECGI_ExtIEs_specs_537	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_544 = {
+	sizeof(struct X2N_EnhancedRNTP_ExtIEs__extensionValue),
+	offsetof(struct X2N_EnhancedRNTP_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_EnhancedRNTP_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_EnhancedRNTP_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_544 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_544	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTP_ExtIEs_541[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTP_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_542,  memb_X2N_id_constraint_541 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTP_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_543,  memb_X2N_criticality_constraint_541 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTP_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_544,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_544,  memb_X2N_extensionValue_constraint_541 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EnhancedRNTP_ExtIEs_tag2el_541[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTP_ExtIEs_specs_541 = {
+	sizeof(struct X2N_EnhancedRNTP_ExtIEs),
+	offsetof(struct X2N_EnhancedRNTP_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_EnhancedRNTP_ExtIEs_tag2el_541,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTP_ExtIEs = {
+	"EnhancedRNTP-ExtIEs",
+	"EnhancedRNTP-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541,
+	sizeof(asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541)
+		/sizeof(asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541[0]), /* 1 */
+	asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541,	/* Same as above */
+	sizeof(asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541)
+		/sizeof(asn_DEF_X2N_EnhancedRNTP_ExtIEs_tags_541[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EnhancedRNTP_ExtIEs_541,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EnhancedRNTP_ExtIEs_specs_541	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_548 = {
+	sizeof(struct X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue),
+	offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_548 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_548	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTPStartTime_ExtIEs_545[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_546,  memb_X2N_id_constraint_545 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_547,  memb_X2N_criticality_constraint_545 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_548,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_548,  memb_X2N_extensionValue_constraint_545 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EnhancedRNTPStartTime_ExtIEs_tag2el_545[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTPStartTime_ExtIEs_specs_545 = {
+	sizeof(struct X2N_EnhancedRNTPStartTime_ExtIEs),
+	offsetof(struct X2N_EnhancedRNTPStartTime_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_EnhancedRNTPStartTime_ExtIEs_tag2el_545,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs = {
+	"EnhancedRNTPStartTime-ExtIEs",
+	"EnhancedRNTPStartTime-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545,
+	sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545)
+		/sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545[0]), /* 1 */
+	asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545,	/* Same as above */
+	sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545)
+		/sizeof(asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs_tags_545[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EnhancedRNTPStartTime_ExtIEs_545,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EnhancedRNTPStartTime_ExtIEs_specs_545	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_552 = {
+	sizeof(struct X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue),
+	offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue, present),
+	sizeof(((struct X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_552 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_552	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EN_DC_ResourceConfigurationExtIEs_549[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_550,  memb_X2N_id_constraint_549 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_551,  memb_X2N_criticality_constraint_549 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_552,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_552,  memb_X2N_extensionValue_constraint_549 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EN_DC_ResourceConfigurationExtIEs_tag2el_549[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EN_DC_ResourceConfigurationExtIEs_specs_549 = {
+	sizeof(struct X2N_EN_DC_ResourceConfigurationExtIEs),
+	offsetof(struct X2N_EN_DC_ResourceConfigurationExtIEs, _asn_ctx),
+	asn_MAP_X2N_EN_DC_ResourceConfigurationExtIEs_tag2el_549,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs = {
+	"EN-DC-ResourceConfigurationExtIEs",
+	"EN-DC-ResourceConfigurationExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549,
+	sizeof(asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549)
+		/sizeof(asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549[0]), /* 1 */
+	asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549,	/* Same as above */
+	sizeof(asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549)
+		/sizeof(asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs_tags_549[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EN_DC_ResourceConfigurationExtIEs_549,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EN_DC_ResourceConfigurationExtIEs_specs_549	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_556 = {
+	sizeof(struct X2N_ERABActivityNotifyItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ERABActivityNotifyItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_556 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_556	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ERABActivityNotifyItem_ExtIEs_553[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_554,  memb_X2N_id_constraint_553 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_555,  memb_X2N_criticality_constraint_553 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_556,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_556,  memb_X2N_extensionValue_constraint_553 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ERABActivityNotifyItem_ExtIEs_tag2el_553[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ERABActivityNotifyItem_ExtIEs_specs_553 = {
+	sizeof(struct X2N_ERABActivityNotifyItem_ExtIEs),
+	offsetof(struct X2N_ERABActivityNotifyItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ERABActivityNotifyItem_ExtIEs_tag2el_553,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs = {
+	"ERABActivityNotifyItem-ExtIEs",
+	"ERABActivityNotifyItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553,
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553[0]), /* 1 */
+	asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553,	/* Same as above */
+	sizeof(asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553)
+		/sizeof(asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs_tags_553[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ERABActivityNotifyItem_ExtIEs_553,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ERABActivityNotifyItem_ExtIEs_specs_553	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_560[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, choice.Packet_LossRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Packet_LossRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Packet-LossRate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_560[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* Packet-LossRate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_560 = {
+	sizeof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue),
+	offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_560,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_560 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_560,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_560	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_557[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_558,  memb_X2N_id_constraint_557 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RAB_Level_QoS_Parameters_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_559,  memb_X2N_criticality_constraint_557 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_560,
+		select_E_RAB_Level_QoS_Parameters_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_560,  memb_X2N_extensionValue_constraint_557 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tag2el_557[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557 = {
+	sizeof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs),
+	offsetof(struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tag2el_557,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs = {
+	"E-RAB-Level-QoS-Parameters-ExtIEs",
+	"E-RAB-Level-QoS-Parameters-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557,
+	sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557)
+		/sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557)
+		/sizeof(asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_tags_557[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_557,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_564 = {
+	sizeof(struct X2N_E_RAB_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_E_RAB_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RAB_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RAB_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_564 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_564	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RAB_Item_ExtIEs_561[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_562,  memb_X2N_id_constraint_561 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_563,  memb_X2N_criticality_constraint_561 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_564,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_564,  memb_X2N_extensionValue_constraint_561 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RAB_Item_ExtIEs_tag2el_561[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Item_ExtIEs_specs_561 = {
+	sizeof(struct X2N_E_RAB_Item_ExtIEs),
+	offsetof(struct X2N_E_RAB_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RAB_Item_ExtIEs_tag2el_561,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Item_ExtIEs = {
+	"E-RAB-Item-ExtIEs",
+	"E-RAB-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561,
+	sizeof(asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561)
+		/sizeof(asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561)
+		/sizeof(asn_DEF_X2N_E_RAB_Item_ExtIEs_tags_561[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_Item_ExtIEs_561,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_Item_ExtIEs_specs_561	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_568 = {
+	sizeof(struct X2N_E_RABUsageReport_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_E_RABUsageReport_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_568 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_568	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReport_Item_ExtIEs_565[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_566,  memb_X2N_id_constraint_565 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_567,  memb_X2N_criticality_constraint_565 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_568,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_568,  memb_X2N_extensionValue_constraint_565 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABUsageReport_Item_ExtIEs_tag2el_565[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABUsageReport_Item_ExtIEs_specs_565 = {
+	sizeof(struct X2N_E_RABUsageReport_Item_ExtIEs),
+	offsetof(struct X2N_E_RABUsageReport_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABUsageReport_Item_ExtIEs_tag2el_565,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs = {
+	"E-RABUsageReport-Item-ExtIEs",
+	"E-RABUsageReport-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565,
+	sizeof(asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565[0]), /* 1 */
+	asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs_tags_565[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABUsageReport_Item_ExtIEs_565,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABUsageReport_Item_ExtIEs_specs_565	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_572 = {
+	sizeof(struct X2N_ExpectedUEBehaviour_ExtIEs__extensionValue),
+	offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ExpectedUEBehaviour_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_572 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_572	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ExpectedUEBehaviour_ExtIEs_569[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_570,  memb_X2N_id_constraint_569 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_571,  memb_X2N_criticality_constraint_569 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_572,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_572,  memb_X2N_extensionValue_constraint_569 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExpectedUEBehaviour_ExtIEs_tag2el_569[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEBehaviour_ExtIEs_specs_569 = {
+	sizeof(struct X2N_ExpectedUEBehaviour_ExtIEs),
+	offsetof(struct X2N_ExpectedUEBehaviour_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ExpectedUEBehaviour_ExtIEs_tag2el_569,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs = {
+	"ExpectedUEBehaviour-ExtIEs",
+	"ExpectedUEBehaviour-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569,
+	sizeof(asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569)
+		/sizeof(asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569[0]), /* 1 */
+	asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569)
+		/sizeof(asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs_tags_569[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExpectedUEBehaviour_ExtIEs_569,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ExpectedUEBehaviour_ExtIEs_specs_569	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_576 = {
+	sizeof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue),
+	offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_576 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_576	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ExpectedUEActivityBehaviour_ExtIEs_573[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_574,  memb_X2N_id_constraint_573 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_575,  memb_X2N_criticality_constraint_573 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_576,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_576,  memb_X2N_extensionValue_constraint_573 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExpectedUEActivityBehaviour_ExtIEs_tag2el_573[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEActivityBehaviour_ExtIEs_specs_573 = {
+	sizeof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs),
+	offsetof(struct X2N_ExpectedUEActivityBehaviour_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ExpectedUEActivityBehaviour_ExtIEs_tag2el_573,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs = {
+	"ExpectedUEActivityBehaviour-ExtIEs",
+	"ExpectedUEActivityBehaviour-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573,
+	sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573)
+		/sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573[0]), /* 1 */
+	asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573)
+		/sizeof(asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs_tags_573[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExpectedUEActivityBehaviour_ExtIEs_573,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ExpectedUEActivityBehaviour_ExtIEs_specs_573	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_580 = {
+	sizeof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue),
+	offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_580 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_580	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_577[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_578,  memb_X2N_id_constraint_577 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_579,  memb_X2N_criticality_constraint_577 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_580,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_580,  memb_X2N_extensionValue_constraint_577 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tag2el_577[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577 = {
+	sizeof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs),
+	offsetof(struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tag2el_577,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs = {
+	"ExtendedULInterferenceOverloadInfo-ExtIEs",
+	"ExtendedULInterferenceOverloadInfo-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577,
+	sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577)
+		/sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[0]), /* 1 */
+	asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577,	/* Same as above */
+	sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577)
+		/sizeof(asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_tags_577[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_577,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_584[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, choice.EARFCNExtension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_EARFCNExtension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EARFCNExtension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, choice.OffsetOfNbiotChannelNumberToEARFCN),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_OffsetOfNbiotChannelNumberToEARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"OffsetOfNbiotChannelNumberToEARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, choice.NRS_NSSS_PowerOffset),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_NRS_NSSS_PowerOffset,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRS-NSSS-PowerOffset"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, choice.NSSS_NumOccasionDifferentPrecoder),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_NSSS_NumOccasionDifferentPrecoder,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NSSS-NumOccasionDifferentPrecoder"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_584[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* EARFCNExtension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 2 }, /* OffsetOfNbiotChannelNumberToEARFCN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 1 }, /* NRS-NSSS-PowerOffset */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, -2, 0 } /* NSSS-NumOccasionDifferentPrecoder */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_584 = {
+	sizeof(struct X2N_FDD_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_FDD_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_FDD_Info_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_584,
+	4,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_584 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_584,
+	4,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_584	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_FDD_Info_ExtIEs_581[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_582,  memb_X2N_id_constraint_581 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_FDD_Info_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_583,  memb_X2N_criticality_constraint_581 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_FDD_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_584,
+		select_FDD_Info_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_584,  memb_X2N_extensionValue_constraint_581 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FDD_Info_ExtIEs_tags_581[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FDD_Info_ExtIEs_tag2el_581[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_Info_ExtIEs_specs_581 = {
+	sizeof(struct X2N_FDD_Info_ExtIEs),
+	offsetof(struct X2N_FDD_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_FDD_Info_ExtIEs_tag2el_581,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FDD_Info_ExtIEs = {
+	"FDD-Info-ExtIEs",
+	"FDD-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FDD_Info_ExtIEs_tags_581,
+	sizeof(asn_DEF_X2N_FDD_Info_ExtIEs_tags_581)
+		/sizeof(asn_DEF_X2N_FDD_Info_ExtIEs_tags_581[0]), /* 1 */
+	asn_DEF_X2N_FDD_Info_ExtIEs_tags_581,	/* Same as above */
+	sizeof(asn_DEF_X2N_FDD_Info_ExtIEs_tags_581)
+		/sizeof(asn_DEF_X2N_FDD_Info_ExtIEs_tags_581[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FDD_Info_ExtIEs_581,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FDD_Info_ExtIEs_specs_581	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_588 = {
+	sizeof(struct X2N_ForbiddenTAs_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ForbiddenTAs_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_588 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_588	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_Item_ExtIEs_585[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_586,  memb_X2N_id_constraint_585 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_587,  memb_X2N_criticality_constraint_585 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_588,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_588,  memb_X2N_extensionValue_constraint_585 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ForbiddenTAs_Item_ExtIEs_tag2el_585[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenTAs_Item_ExtIEs_specs_585 = {
+	sizeof(struct X2N_ForbiddenTAs_Item_ExtIEs),
+	offsetof(struct X2N_ForbiddenTAs_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ForbiddenTAs_Item_ExtIEs_tag2el_585,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs = {
+	"ForbiddenTAs-Item-ExtIEs",
+	"ForbiddenTAs-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585,
+	sizeof(asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585)
+		/sizeof(asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs_tags_585[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ForbiddenTAs_Item_ExtIEs_585,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ForbiddenTAs_Item_ExtIEs_specs_585	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_592 = {
+	sizeof(struct X2N_ForbiddenLAs_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ForbiddenLAs_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_592 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_592	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_Item_ExtIEs_589[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_590,  memb_X2N_id_constraint_589 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_591,  memb_X2N_criticality_constraint_589 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_592,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_592,  memb_X2N_extensionValue_constraint_589 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ForbiddenLAs_Item_ExtIEs_tag2el_589[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenLAs_Item_ExtIEs_specs_589 = {
+	sizeof(struct X2N_ForbiddenLAs_Item_ExtIEs),
+	offsetof(struct X2N_ForbiddenLAs_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ForbiddenLAs_Item_ExtIEs_tag2el_589,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs = {
+	"ForbiddenLAs-Item-ExtIEs",
+	"ForbiddenLAs-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589,
+	sizeof(asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589[0]), /* 1 */
+	asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589,	/* Same as above */
+	sizeof(asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589)
+		/sizeof(asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs_tags_589[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ForbiddenLAs_Item_ExtIEs_589,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ForbiddenLAs_Item_ExtIEs_specs_589	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_596 = {
+	sizeof(struct X2N_FreqBandNrItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_FreqBandNrItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_FreqBandNrItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_FreqBandNrItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_596 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_596	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_FreqBandNrItem_ExtIEs_593[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FreqBandNrItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_594,  memb_X2N_id_constraint_593 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_FreqBandNrItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_595,  memb_X2N_criticality_constraint_593 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_FreqBandNrItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_596,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_596,  memb_X2N_extensionValue_constraint_593 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_FreqBandNrItem_ExtIEs_tag2el_593[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_FreqBandNrItem_ExtIEs_specs_593 = {
+	sizeof(struct X2N_FreqBandNrItem_ExtIEs),
+	offsetof(struct X2N_FreqBandNrItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_FreqBandNrItem_ExtIEs_tag2el_593,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandNrItem_ExtIEs = {
+	"FreqBandNrItem-ExtIEs",
+	"FreqBandNrItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593,
+	sizeof(asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593)
+		/sizeof(asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593[0]), /* 1 */
+	asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593,	/* Same as above */
+	sizeof(asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593)
+		/sizeof(asn_DEF_X2N_FreqBandNrItem_ExtIEs_tags_593[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_FreqBandNrItem_ExtIEs_593,
+	3,	/* Elements count */
+	&asn_SPC_X2N_FreqBandNrItem_ExtIEs_specs_593	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_600[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation_ExtIEs__extensionValue, choice.ExtendedBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_ExtendedBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExtendedBitRate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_600[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ExtendedBitRate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_600 = {
+	sizeof(struct X2N_GBR_QosInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_GBR_QosInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GBR_QosInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GBR_QosInformation_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_600,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_600 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_600,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_600	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GBR_QosInformation_ExtIEs_597[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_598,  memb_X2N_id_constraint_597 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_GBR_QosInformation_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_599,  memb_X2N_criticality_constraint_597 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GBR_QosInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_600,
+		select_GBR_QosInformation_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_600,  memb_X2N_extensionValue_constraint_597 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GBR_QosInformation_ExtIEs_tag2el_597[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GBR_QosInformation_ExtIEs_specs_597 = {
+	sizeof(struct X2N_GBR_QosInformation_ExtIEs),
+	offsetof(struct X2N_GBR_QosInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GBR_QosInformation_ExtIEs_tag2el_597,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GBR_QosInformation_ExtIEs = {
+	"GBR-QosInformation-ExtIEs",
+	"GBR-QosInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597,
+	sizeof(asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597)
+		/sizeof(asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597[0]), /* 1 */
+	asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597,	/* Same as above */
+	sizeof(asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597)
+		/sizeof(asn_DEF_X2N_GBR_QosInformation_ExtIEs_tags_597[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GBR_QosInformation_ExtIEs_597,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GBR_QosInformation_ExtIEs_specs_597	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_604 = {
+	sizeof(struct X2N_GlobalENB_ID_ExtIEs__extensionValue),
+	offsetof(struct X2N_GlobalENB_ID_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GlobalENB_ID_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GlobalENB_ID_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_604 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_604	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GlobalENB_ID_ExtIEs_601[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalENB_ID_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_602,  memb_X2N_id_constraint_601 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalENB_ID_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_603,  memb_X2N_criticality_constraint_601 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalENB_ID_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_604,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_604,  memb_X2N_extensionValue_constraint_601 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GlobalENB_ID_ExtIEs_tag2el_601[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalENB_ID_ExtIEs_specs_601 = {
+	sizeof(struct X2N_GlobalENB_ID_ExtIEs),
+	offsetof(struct X2N_GlobalENB_ID_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GlobalENB_ID_ExtIEs_tag2el_601,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GlobalENB_ID_ExtIEs = {
+	"GlobalENB-ID-ExtIEs",
+	"GlobalENB-ID-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601,
+	sizeof(asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601)
+		/sizeof(asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601[0]), /* 1 */
+	asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601,	/* Same as above */
+	sizeof(asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601)
+		/sizeof(asn_DEF_X2N_GlobalENB_ID_ExtIEs_tags_601[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GlobalENB_ID_ExtIEs_601,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GlobalENB_ID_ExtIEs_specs_601	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_608 = {
+	sizeof(struct X2N_GlobalGNB_ID_ExtIEs__extensionValue),
+	offsetof(struct X2N_GlobalGNB_ID_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GlobalGNB_ID_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GlobalGNB_ID_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_608 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_608	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GlobalGNB_ID_ExtIEs_605[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalGNB_ID_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_606,  memb_X2N_id_constraint_605 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalGNB_ID_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_607,  memb_X2N_criticality_constraint_605 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GlobalGNB_ID_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_608,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_608,  memb_X2N_extensionValue_constraint_605 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GlobalGNB_ID_ExtIEs_tag2el_605[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalGNB_ID_ExtIEs_specs_605 = {
+	sizeof(struct X2N_GlobalGNB_ID_ExtIEs),
+	offsetof(struct X2N_GlobalGNB_ID_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GlobalGNB_ID_ExtIEs_tag2el_605,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GlobalGNB_ID_ExtIEs = {
+	"GlobalGNB-ID-ExtIEs",
+	"GlobalGNB-ID-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605,
+	sizeof(asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605)
+		/sizeof(asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605[0]), /* 1 */
+	asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605,	/* Same as above */
+	sizeof(asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605)
+		/sizeof(asn_DEF_X2N_GlobalGNB_ID_ExtIEs_tags_605[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GlobalGNB_ID_ExtIEs_605,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GlobalGNB_ID_ExtIEs_specs_605	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_612 = {
+	sizeof(struct X2N_GTPtunnelEndpoint_ExtIEs__extensionValue),
+	offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GTPtunnelEndpoint_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_612 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_612	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GTPtunnelEndpoint_ExtIEs_609[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_610,  memb_X2N_id_constraint_609 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_611,  memb_X2N_criticality_constraint_609 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_612,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_612,  memb_X2N_extensionValue_constraint_609 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GTPtunnelEndpoint_ExtIEs_tag2el_609[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GTPtunnelEndpoint_ExtIEs_specs_609 = {
+	sizeof(struct X2N_GTPtunnelEndpoint_ExtIEs),
+	offsetof(struct X2N_GTPtunnelEndpoint_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GTPtunnelEndpoint_ExtIEs_tag2el_609,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs = {
+	"GTPtunnelEndpoint-ExtIEs",
+	"GTPtunnelEndpoint-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609,
+	sizeof(asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609)
+		/sizeof(asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609[0]), /* 1 */
+	asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609,	/* Same as above */
+	sizeof(asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609)
+		/sizeof(asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs_tags_609[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GTPtunnelEndpoint_ExtIEs_609,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GTPtunnelEndpoint_ExtIEs_specs_609	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_616 = {
+	sizeof(struct X2N_GU_Group_ID_ExtIEs__extensionValue),
+	offsetof(struct X2N_GU_Group_ID_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GU_Group_ID_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GU_Group_ID_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_616 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_616	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GU_Group_ID_ExtIEs_613[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GU_Group_ID_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_614,  memb_X2N_id_constraint_613 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GU_Group_ID_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_615,  memb_X2N_criticality_constraint_613 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GU_Group_ID_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_616,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_616,  memb_X2N_extensionValue_constraint_613 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GU_Group_ID_ExtIEs_tag2el_613[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GU_Group_ID_ExtIEs_specs_613 = {
+	sizeof(struct X2N_GU_Group_ID_ExtIEs),
+	offsetof(struct X2N_GU_Group_ID_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GU_Group_ID_ExtIEs_tag2el_613,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GU_Group_ID_ExtIEs = {
+	"GU-Group-ID-ExtIEs",
+	"GU-Group-ID-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613,
+	sizeof(asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613)
+		/sizeof(asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613[0]), /* 1 */
+	asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613,	/* Same as above */
+	sizeof(asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613)
+		/sizeof(asn_DEF_X2N_GU_Group_ID_ExtIEs_tags_613[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GU_Group_ID_ExtIEs_613,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GU_Group_ID_ExtIEs_specs_613	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_620 = {
+	sizeof(struct X2N_GUMMEI_ExtIEs__extensionValue),
+	offsetof(struct X2N_GUMMEI_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_GUMMEI_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_GUMMEI_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_620 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_620	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GUMMEI_ExtIEs_617[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GUMMEI_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_618,  memb_X2N_id_constraint_617 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GUMMEI_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_619,  memb_X2N_criticality_constraint_617 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GUMMEI_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_620,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_620,  memb_X2N_extensionValue_constraint_617 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GUMMEI_ExtIEs_tags_617[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GUMMEI_ExtIEs_tag2el_617[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GUMMEI_ExtIEs_specs_617 = {
+	sizeof(struct X2N_GUMMEI_ExtIEs),
+	offsetof(struct X2N_GUMMEI_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_GUMMEI_ExtIEs_tag2el_617,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GUMMEI_ExtIEs = {
+	"GUMMEI-ExtIEs",
+	"GUMMEI-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GUMMEI_ExtIEs_tags_617,
+	sizeof(asn_DEF_X2N_GUMMEI_ExtIEs_tags_617)
+		/sizeof(asn_DEF_X2N_GUMMEI_ExtIEs_tags_617[0]), /* 1 */
+	asn_DEF_X2N_GUMMEI_ExtIEs_tags_617,	/* Same as above */
+	sizeof(asn_DEF_X2N_GUMMEI_ExtIEs_tags_617)
+		/sizeof(asn_DEF_X2N_GUMMEI_ExtIEs_tags_617[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GUMMEI_ExtIEs_617,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GUMMEI_ExtIEs_specs_617	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_624[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue, choice.NRrestrictioninEPSasSecondaryRAT),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_NRrestrictioninEPSasSecondaryRAT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRrestrictioninEPSasSecondaryRAT"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue, choice.CNTypeRestrictions),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CNTypeRestrictions,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CNTypeRestrictions"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue, choice.NRrestrictionin5GS),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_NRrestrictionin5GS,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRrestrictionin5GS"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_624[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_624[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_624[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 1 }, /* NRrestrictioninEPSasSecondaryRAT */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, -1, 0 }, /* NRrestrictionin5GS */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CNTypeRestrictions */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_624 = {
+	sizeof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue),
+	offsetof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_HandoverRestrictionList_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_HandoverRestrictionList_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_624,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_624,
+	asn_MAP_X2N_extensionValue_from_canonical_624,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_624 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_624,
+	3,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_624	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverRestrictionList_ExtIEs_621[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_622,  memb_X2N_id_constraint_621 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverRestrictionList_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_623,  memb_X2N_criticality_constraint_621 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRestrictionList_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_624,
+		select_HandoverRestrictionList_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_624,  memb_X2N_extensionValue_constraint_621 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRestrictionList_ExtIEs_tag2el_621[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRestrictionList_ExtIEs_specs_621 = {
+	sizeof(struct X2N_HandoverRestrictionList_ExtIEs),
+	offsetof(struct X2N_HandoverRestrictionList_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_HandoverRestrictionList_ExtIEs_tag2el_621,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRestrictionList_ExtIEs = {
+	"HandoverRestrictionList-ExtIEs",
+	"HandoverRestrictionList-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621,
+	sizeof(asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621)
+		/sizeof(asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621[0]), /* 1 */
+	asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621)
+		/sizeof(asn_DEF_X2N_HandoverRestrictionList_ExtIEs_tags_621[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRestrictionList_ExtIEs_621,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverRestrictionList_ExtIEs_specs_621	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_628 = {
+	sizeof(struct X2N_HWLoadIndicator_ExtIEs__extensionValue),
+	offsetof(struct X2N_HWLoadIndicator_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_HWLoadIndicator_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_HWLoadIndicator_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_628 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_628	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HWLoadIndicator_ExtIEs_625[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HWLoadIndicator_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_626,  memb_X2N_id_constraint_625 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HWLoadIndicator_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_627,  memb_X2N_criticality_constraint_625 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HWLoadIndicator_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_628,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_628,  memb_X2N_extensionValue_constraint_625 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HWLoadIndicator_ExtIEs_tag2el_625[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HWLoadIndicator_ExtIEs_specs_625 = {
+	sizeof(struct X2N_HWLoadIndicator_ExtIEs),
+	offsetof(struct X2N_HWLoadIndicator_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_HWLoadIndicator_ExtIEs_tag2el_625,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HWLoadIndicator_ExtIEs = {
+	"HWLoadIndicator-ExtIEs",
+	"HWLoadIndicator-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625,
+	sizeof(asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625)
+		/sizeof(asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625[0]), /* 1 */
+	asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625,	/* Same as above */
+	sizeof(asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625)
+		/sizeof(asn_DEF_X2N_HWLoadIndicator_ExtIEs_tags_625[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HWLoadIndicator_ExtIEs_625,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HWLoadIndicator_ExtIEs_specs_625	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_632[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, choice.Time_UE_StayedInCell_EnhancedGranularity),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Time-UE-StayedInCell-EnhancedGranularity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_632[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Time-UE-StayedInCell-EnhancedGranularity */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_632 = {
+	sizeof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_632,
+	5,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_632 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_632,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_632	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_LastVisitedEUTRANCellInformation_ExtIEs_629[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_630,  memb_X2N_id_constraint_629 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_LastVisitedEUTRANCellInformation_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_631,  memb_X2N_criticality_constraint_629 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_632,
+		select_LastVisitedEUTRANCellInformation_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_632,  memb_X2N_extensionValue_constraint_629 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tag2el_629[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LastVisitedEUTRANCellInformation_ExtIEs_specs_629 = {
+	sizeof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs),
+	offsetof(struct X2N_LastVisitedEUTRANCellInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tag2el_629,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs = {
+	"LastVisitedEUTRANCellInformation-ExtIEs",
+	"LastVisitedEUTRANCellInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629,
+	sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629)
+		/sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[0]), /* 1 */
+	asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629,	/* Same as above */
+	sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629)
+		/sizeof(asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs_tags_629[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LastVisitedEUTRANCellInformation_ExtIEs_629,
+	3,	/* Elements count */
+	&asn_SPC_X2N_LastVisitedEUTRANCellInformation_ExtIEs_specs_629	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_636 = {
+	sizeof(struct X2N_LocationReportingInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_LocationReportingInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_LocationReportingInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_LocationReportingInformation_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_636 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_636	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_LocationReportingInformation_ExtIEs_633[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LocationReportingInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_634,  memb_X2N_id_constraint_633 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LocationReportingInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_635,  memb_X2N_criticality_constraint_633 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_LocationReportingInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_636,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_636,  memb_X2N_extensionValue_constraint_633 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LocationReportingInformation_ExtIEs_tag2el_633[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LocationReportingInformation_ExtIEs_specs_633 = {
+	sizeof(struct X2N_LocationReportingInformation_ExtIEs),
+	offsetof(struct X2N_LocationReportingInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_LocationReportingInformation_ExtIEs_tag2el_633,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LocationReportingInformation_ExtIEs = {
+	"LocationReportingInformation-ExtIEs",
+	"LocationReportingInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633,
+	sizeof(asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633)
+		/sizeof(asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633[0]), /* 1 */
+	asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633,	/* Same as above */
+	sizeof(asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633)
+		/sizeof(asn_DEF_X2N_LocationReportingInformation_ExtIEs_tags_633[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LocationReportingInformation_ExtIEs_633,
+	3,	/* Elements count */
+	&asn_SPC_X2N_LocationReportingInformation_ExtIEs_specs_633	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_640 = {
+	sizeof(struct X2N_M1PeriodicReporting_ExtIEs__extensionValue),
+	offsetof(struct X2N_M1PeriodicReporting_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M1PeriodicReporting_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M1PeriodicReporting_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_640 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_640	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M1PeriodicReporting_ExtIEs_637[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1PeriodicReporting_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_638,  memb_X2N_id_constraint_637 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1PeriodicReporting_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_639,  memb_X2N_criticality_constraint_637 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M1PeriodicReporting_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_640,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_640,  memb_X2N_extensionValue_constraint_637 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M1PeriodicReporting_ExtIEs_tag2el_637[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M1PeriodicReporting_ExtIEs_specs_637 = {
+	sizeof(struct X2N_M1PeriodicReporting_ExtIEs),
+	offsetof(struct X2N_M1PeriodicReporting_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M1PeriodicReporting_ExtIEs_tag2el_637,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M1PeriodicReporting_ExtIEs = {
+	"M1PeriodicReporting-ExtIEs",
+	"M1PeriodicReporting-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637,
+	sizeof(asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637)
+		/sizeof(asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637[0]), /* 1 */
+	asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637,	/* Same as above */
+	sizeof(asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637)
+		/sizeof(asn_DEF_X2N_M1PeriodicReporting_ExtIEs_tags_637[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M1PeriodicReporting_ExtIEs_637,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M1PeriodicReporting_ExtIEs_specs_637	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_644 = {
+	sizeof(struct X2N_M1ThresholdEventA2_ExtIEs__extensionValue),
+	offsetof(struct X2N_M1ThresholdEventA2_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M1ThresholdEventA2_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M1ThresholdEventA2_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_644 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_644	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M1ThresholdEventA2_ExtIEs_641[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1ThresholdEventA2_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_642,  memb_X2N_id_constraint_641 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M1ThresholdEventA2_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_643,  memb_X2N_criticality_constraint_641 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M1ThresholdEventA2_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_644,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_644,  memb_X2N_extensionValue_constraint_641 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M1ThresholdEventA2_ExtIEs_tag2el_641[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M1ThresholdEventA2_ExtIEs_specs_641 = {
+	sizeof(struct X2N_M1ThresholdEventA2_ExtIEs),
+	offsetof(struct X2N_M1ThresholdEventA2_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M1ThresholdEventA2_ExtIEs_tag2el_641,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M1ThresholdEventA2_ExtIEs = {
+	"M1ThresholdEventA2-ExtIEs",
+	"M1ThresholdEventA2-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641,
+	sizeof(asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641)
+		/sizeof(asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641[0]), /* 1 */
+	asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641,	/* Same as above */
+	sizeof(asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641)
+		/sizeof(asn_DEF_X2N_M1ThresholdEventA2_ExtIEs_tags_641[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M1ThresholdEventA2_ExtIEs_641,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M1ThresholdEventA2_ExtIEs_specs_641	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_648 = {
+	sizeof(struct X2N_M3Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_M3Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M3Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M3Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_648 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_648	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M3Configuration_ExtIEs_645[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M3Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_646,  memb_X2N_id_constraint_645 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M3Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_647,  memb_X2N_criticality_constraint_645 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M3Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_648,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_648,  memb_X2N_extensionValue_constraint_645 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M3Configuration_ExtIEs_tags_645[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M3Configuration_ExtIEs_tag2el_645[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M3Configuration_ExtIEs_specs_645 = {
+	sizeof(struct X2N_M3Configuration_ExtIEs),
+	offsetof(struct X2N_M3Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M3Configuration_ExtIEs_tag2el_645,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M3Configuration_ExtIEs = {
+	"M3Configuration-ExtIEs",
+	"M3Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M3Configuration_ExtIEs_tags_645,
+	sizeof(asn_DEF_X2N_M3Configuration_ExtIEs_tags_645)
+		/sizeof(asn_DEF_X2N_M3Configuration_ExtIEs_tags_645[0]), /* 1 */
+	asn_DEF_X2N_M3Configuration_ExtIEs_tags_645,	/* Same as above */
+	sizeof(asn_DEF_X2N_M3Configuration_ExtIEs_tags_645)
+		/sizeof(asn_DEF_X2N_M3Configuration_ExtIEs_tags_645[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M3Configuration_ExtIEs_645,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M3Configuration_ExtIEs_specs_645	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_652 = {
+	sizeof(struct X2N_M4Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_M4Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M4Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M4Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_652 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_652	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M4Configuration_ExtIEs_649[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M4Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_650,  memb_X2N_id_constraint_649 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M4Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_651,  memb_X2N_criticality_constraint_649 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M4Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_652,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_652,  memb_X2N_extensionValue_constraint_649 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M4Configuration_ExtIEs_tags_649[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M4Configuration_ExtIEs_tag2el_649[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M4Configuration_ExtIEs_specs_649 = {
+	sizeof(struct X2N_M4Configuration_ExtIEs),
+	offsetof(struct X2N_M4Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M4Configuration_ExtIEs_tag2el_649,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M4Configuration_ExtIEs = {
+	"M4Configuration-ExtIEs",
+	"M4Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M4Configuration_ExtIEs_tags_649,
+	sizeof(asn_DEF_X2N_M4Configuration_ExtIEs_tags_649)
+		/sizeof(asn_DEF_X2N_M4Configuration_ExtIEs_tags_649[0]), /* 1 */
+	asn_DEF_X2N_M4Configuration_ExtIEs_tags_649,	/* Same as above */
+	sizeof(asn_DEF_X2N_M4Configuration_ExtIEs_tags_649)
+		/sizeof(asn_DEF_X2N_M4Configuration_ExtIEs_tags_649[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M4Configuration_ExtIEs_649,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M4Configuration_ExtIEs_specs_649	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_656 = {
+	sizeof(struct X2N_M5Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_M5Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M5Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M5Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_656 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_656	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M5Configuration_ExtIEs_653[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M5Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_654,  memb_X2N_id_constraint_653 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M5Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_655,  memb_X2N_criticality_constraint_653 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M5Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_656,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_656,  memb_X2N_extensionValue_constraint_653 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M5Configuration_ExtIEs_tags_653[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M5Configuration_ExtIEs_tag2el_653[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M5Configuration_ExtIEs_specs_653 = {
+	sizeof(struct X2N_M5Configuration_ExtIEs),
+	offsetof(struct X2N_M5Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M5Configuration_ExtIEs_tag2el_653,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M5Configuration_ExtIEs = {
+	"M5Configuration-ExtIEs",
+	"M5Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M5Configuration_ExtIEs_tags_653,
+	sizeof(asn_DEF_X2N_M5Configuration_ExtIEs_tags_653)
+		/sizeof(asn_DEF_X2N_M5Configuration_ExtIEs_tags_653[0]), /* 1 */
+	asn_DEF_X2N_M5Configuration_ExtIEs_tags_653,	/* Same as above */
+	sizeof(asn_DEF_X2N_M5Configuration_ExtIEs_tags_653)
+		/sizeof(asn_DEF_X2N_M5Configuration_ExtIEs_tags_653[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M5Configuration_ExtIEs_653,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M5Configuration_ExtIEs_specs_653	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_660 = {
+	sizeof(struct X2N_M6Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_M6Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M6Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M6Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_660 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_660	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M6Configuration_ExtIEs_657[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M6Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_658,  memb_X2N_id_constraint_657 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M6Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_659,  memb_X2N_criticality_constraint_657 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M6Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_660,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_660,  memb_X2N_extensionValue_constraint_657 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M6Configuration_ExtIEs_tags_657[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M6Configuration_ExtIEs_tag2el_657[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M6Configuration_ExtIEs_specs_657 = {
+	sizeof(struct X2N_M6Configuration_ExtIEs),
+	offsetof(struct X2N_M6Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M6Configuration_ExtIEs_tag2el_657,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M6Configuration_ExtIEs = {
+	"M6Configuration-ExtIEs",
+	"M6Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M6Configuration_ExtIEs_tags_657,
+	sizeof(asn_DEF_X2N_M6Configuration_ExtIEs_tags_657)
+		/sizeof(asn_DEF_X2N_M6Configuration_ExtIEs_tags_657[0]), /* 1 */
+	asn_DEF_X2N_M6Configuration_ExtIEs_tags_657,	/* Same as above */
+	sizeof(asn_DEF_X2N_M6Configuration_ExtIEs_tags_657)
+		/sizeof(asn_DEF_X2N_M6Configuration_ExtIEs_tags_657[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M6Configuration_ExtIEs_657,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M6Configuration_ExtIEs_specs_657	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_664 = {
+	sizeof(struct X2N_M7Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_M7Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_M7Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_M7Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_664 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_664	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_M7Configuration_ExtIEs_661[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M7Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_662,  memb_X2N_id_constraint_661 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_M7Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_663,  memb_X2N_criticality_constraint_661 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_M7Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_664,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_664,  memb_X2N_extensionValue_constraint_661 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_M7Configuration_ExtIEs_tags_661[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_M7Configuration_ExtIEs_tag2el_661[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_M7Configuration_ExtIEs_specs_661 = {
+	sizeof(struct X2N_M7Configuration_ExtIEs),
+	offsetof(struct X2N_M7Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_M7Configuration_ExtIEs_tag2el_661,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_M7Configuration_ExtIEs = {
+	"M7Configuration-ExtIEs",
+	"M7Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_M7Configuration_ExtIEs_tags_661,
+	sizeof(asn_DEF_X2N_M7Configuration_ExtIEs_tags_661)
+		/sizeof(asn_DEF_X2N_M7Configuration_ExtIEs_tags_661[0]), /* 1 */
+	asn_DEF_X2N_M7Configuration_ExtIEs_tags_661,	/* Same as above */
+	sizeof(asn_DEF_X2N_M7Configuration_ExtIEs_tags_661)
+		/sizeof(asn_DEF_X2N_M7Configuration_ExtIEs_tags_661[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_M7Configuration_ExtIEs_661,
+	3,	/* Elements count */
+	&asn_SPC_X2N_M7Configuration_ExtIEs_specs_661	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_668[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.M3Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M3Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"M3Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.M4Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M4Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"M4Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.M5Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M5Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"M5Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.MDT_Location_Info),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_MDT_Location_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MDT-Location-Info"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.MDTPLMNList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MDTPLMNList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MDTPLMNList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.M6Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M6Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"M6Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.M7Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_M7Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"M7Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.BluetoothMeasurementConfiguration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_BluetoothMeasurementConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"BluetoothMeasurementConfiguration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, choice.WLANMeasurementConfiguration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_WLANMeasurementConfiguration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"WLANMeasurementConfiguration"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_668[] = { 3, 0, 1, 2, 4, 5, 6, 7, 8 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_668[] = { 1, 2, 3, 0, 4, 5, 6, 7, 8 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_668[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 0 }, /* MDT-Location-Info */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 7 }, /* M3Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 6 }, /* M4Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 5 }, /* M5Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -3, 4 }, /* MDTPLMNList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -4, 3 }, /* M6Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -5, 2 }, /* M7Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -6, 1 }, /* BluetoothMeasurementConfiguration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -7, 0 } /* WLANMeasurementConfiguration */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_668 = {
+	sizeof(struct X2N_MDT_Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_MDT_Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_MDT_Configuration_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_668,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_668,
+	asn_MAP_X2N_extensionValue_from_canonical_668,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_668 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_668,
+	9,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_668	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MDT_Configuration_ExtIEs_665[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_666,  memb_X2N_id_constraint_665 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MDT_Configuration_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_667,  memb_X2N_criticality_constraint_665 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MDT_Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_668,
+		select_MDT_Configuration_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_668,  memb_X2N_extensionValue_constraint_665 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MDT_Configuration_ExtIEs_tag2el_665[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MDT_Configuration_ExtIEs_specs_665 = {
+	sizeof(struct X2N_MDT_Configuration_ExtIEs),
+	offsetof(struct X2N_MDT_Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_MDT_Configuration_ExtIEs_tag2el_665,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Configuration_ExtIEs = {
+	"MDT-Configuration-ExtIEs",
+	"MDT-Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665,
+	sizeof(asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665)
+		/sizeof(asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665[0]), /* 1 */
+	asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665,	/* Same as above */
+	sizeof(asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665)
+		/sizeof(asn_DEF_X2N_MDT_Configuration_ExtIEs_tags_665[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MDT_Configuration_ExtIEs_665,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MDT_Configuration_ExtIEs_specs_665	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_672[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue, choice.NRCGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRCGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue, choice.MeNBCoordinationAssistanceInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBCoordinationAssistanceInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBCoordinationAssistanceInformation"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_672[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_672[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_672[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* MeNBCoordinationAssistanceInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* NRCGI */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_672 = {
+	sizeof(struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue),
+	offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue, present),
+	sizeof(((struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_672,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_672,
+	asn_MAP_X2N_extensionValue_from_canonical_672,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_672 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_672,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_672	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MeNBResourceCoordinationInformationExtIEs_669[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_670,  memb_X2N_id_constraint_669 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MeNBResourceCoordinationInformationExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_671,  memb_X2N_criticality_constraint_669 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_672,
+		select_MeNBResourceCoordinationInformationExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_672,  memb_X2N_extensionValue_constraint_669 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeNBResourceCoordinationInformationExtIEs_tag2el_669[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MeNBResourceCoordinationInformationExtIEs_specs_669 = {
+	sizeof(struct X2N_MeNBResourceCoordinationInformationExtIEs),
+	offsetof(struct X2N_MeNBResourceCoordinationInformationExtIEs, _asn_ctx),
+	asn_MAP_X2N_MeNBResourceCoordinationInformationExtIEs_tag2el_669,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs = {
+	"MeNBResourceCoordinationInformationExtIEs",
+	"MeNBResourceCoordinationInformationExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669,
+	sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669)
+		/sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669[0]), /* 1 */
+	asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669)
+		/sizeof(asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs_tags_669[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeNBResourceCoordinationInformationExtIEs_669,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeNBResourceCoordinationInformationExtIEs_specs_669	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_676 = {
+	sizeof(struct X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_676 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_676	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MBSFN_Subframe_Info_ExtIEs_673[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_674,  memb_X2N_id_constraint_673 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_675,  memb_X2N_criticality_constraint_673 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_676,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_676,  memb_X2N_extensionValue_constraint_673 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MBSFN_Subframe_Info_ExtIEs_tag2el_673[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MBSFN_Subframe_Info_ExtIEs_specs_673 = {
+	sizeof(struct X2N_MBSFN_Subframe_Info_ExtIEs),
+	offsetof(struct X2N_MBSFN_Subframe_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_MBSFN_Subframe_Info_ExtIEs_tag2el_673,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs = {
+	"MBSFN-Subframe-Info-ExtIEs",
+	"MBSFN-Subframe-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673,
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673[0]), /* 1 */
+	asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673,	/* Same as above */
+	sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673)
+		/sizeof(asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs_tags_673[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MBSFN_Subframe_Info_ExtIEs_673,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MBSFN_Subframe_Info_ExtIEs_specs_673	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_680 = {
+	sizeof(struct X2N_BandInfo_ExtIEs__extensionValue),
+	offsetof(struct X2N_BandInfo_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_BandInfo_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_BandInfo_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_680 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_680	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_BandInfo_ExtIEs_677[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BandInfo_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_678,  memb_X2N_id_constraint_677 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_BandInfo_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_679,  memb_X2N_criticality_constraint_677 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_BandInfo_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_680,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_680,  memb_X2N_extensionValue_constraint_677 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_BandInfo_ExtIEs_tags_677[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_BandInfo_ExtIEs_tag2el_677[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_BandInfo_ExtIEs_specs_677 = {
+	sizeof(struct X2N_BandInfo_ExtIEs),
+	offsetof(struct X2N_BandInfo_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_BandInfo_ExtIEs_tag2el_677,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_BandInfo_ExtIEs = {
+	"BandInfo-ExtIEs",
+	"BandInfo-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_BandInfo_ExtIEs_tags_677,
+	sizeof(asn_DEF_X2N_BandInfo_ExtIEs_tags_677)
+		/sizeof(asn_DEF_X2N_BandInfo_ExtIEs_tags_677[0]), /* 1 */
+	asn_DEF_X2N_BandInfo_ExtIEs_tags_677,	/* Same as above */
+	sizeof(asn_DEF_X2N_BandInfo_ExtIEs_tags_677)
+		/sizeof(asn_DEF_X2N_BandInfo_ExtIEs_tags_677[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_BandInfo_ExtIEs_677,
+	3,	/* Elements count */
+	&asn_SPC_X2N_BandInfo_ExtIEs_specs_677	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_684 = {
+	sizeof(struct X2N_SplitSRB_ExtIEs__extensionValue),
+	offsetof(struct X2N_SplitSRB_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SplitSRB_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SplitSRB_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_684 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_684	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SplitSRB_ExtIEs_681[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SplitSRB_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_682,  memb_X2N_id_constraint_681 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SplitSRB_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_683,  memb_X2N_criticality_constraint_681 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SplitSRB_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_684,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_684,  memb_X2N_extensionValue_constraint_681 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SplitSRB_ExtIEs_tags_681[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SplitSRB_ExtIEs_tag2el_681[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SplitSRB_ExtIEs_specs_681 = {
+	sizeof(struct X2N_SplitSRB_ExtIEs),
+	offsetof(struct X2N_SplitSRB_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SplitSRB_ExtIEs_tag2el_681,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRB_ExtIEs = {
+	"SplitSRB-ExtIEs",
+	"SplitSRB-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SplitSRB_ExtIEs_tags_681,
+	sizeof(asn_DEF_X2N_SplitSRB_ExtIEs_tags_681)
+		/sizeof(asn_DEF_X2N_SplitSRB_ExtIEs_tags_681[0]), /* 1 */
+	asn_DEF_X2N_SplitSRB_ExtIEs_tags_681,	/* Same as above */
+	sizeof(asn_DEF_X2N_SplitSRB_ExtIEs_tags_681)
+		/sizeof(asn_DEF_X2N_SplitSRB_ExtIEs_tags_681[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SplitSRB_ExtIEs_681,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SplitSRB_ExtIEs_specs_681	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_688 = {
+	sizeof(struct X2N_UENRMeasurement_ExtIEs__extensionValue),
+	offsetof(struct X2N_UENRMeasurement_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UENRMeasurement_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UENRMeasurement_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_688 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_688	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UENRMeasurement_ExtIEs_685[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UENRMeasurement_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_686,  memb_X2N_id_constraint_685 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UENRMeasurement_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_687,  memb_X2N_criticality_constraint_685 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UENRMeasurement_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_688,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_688,  memb_X2N_extensionValue_constraint_685 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UENRMeasurement_ExtIEs_tag2el_685[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UENRMeasurement_ExtIEs_specs_685 = {
+	sizeof(struct X2N_UENRMeasurement_ExtIEs),
+	offsetof(struct X2N_UENRMeasurement_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UENRMeasurement_ExtIEs_tag2el_685,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UENRMeasurement_ExtIEs = {
+	"UENRMeasurement-ExtIEs",
+	"UENRMeasurement-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685,
+	sizeof(asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685)
+		/sizeof(asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685[0]), /* 1 */
+	asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685,	/* Same as above */
+	sizeof(asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685)
+		/sizeof(asn_DEF_X2N_UENRMeasurement_ExtIEs_tags_685[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UENRMeasurement_ExtIEs_685,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UENRMeasurement_ExtIEs_specs_685	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_692[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information_ExtIEs__extensionValue, choice.TAC),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information_ExtIEs__extensionValue, choice.EARFCNExtension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_EARFCNExtension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EARFCNExtension"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_692[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_692[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_692[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* EARFCNExtension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* TAC */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_692 = {
+	sizeof(struct X2N_Neighbour_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_Neighbour_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_Neighbour_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_Neighbour_Information_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_692,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_692,
+	asn_MAP_X2N_extensionValue_from_canonical_692,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_692 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_692,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_692	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Neighbour_Information_ExtIEs_689[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_690,  memb_X2N_id_constraint_689 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_Neighbour_Information_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_691,  memb_X2N_criticality_constraint_689 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_Neighbour_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_692,
+		select_Neighbour_Information_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_692,  memb_X2N_extensionValue_constraint_689 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Neighbour_Information_ExtIEs_tag2el_689[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_Neighbour_Information_ExtIEs_specs_689 = {
+	sizeof(struct X2N_Neighbour_Information_ExtIEs),
+	offsetof(struct X2N_Neighbour_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_Neighbour_Information_ExtIEs_tag2el_689,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Neighbour_Information_ExtIEs = {
+	"Neighbour-Information-ExtIEs",
+	"Neighbour-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689,
+	sizeof(asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689)
+		/sizeof(asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689[0]), /* 1 */
+	asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689,	/* Same as above */
+	sizeof(asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689)
+		/sizeof(asn_DEF_X2N_Neighbour_Information_ExtIEs_tags_689[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Neighbour_Information_ExtIEs_689,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Neighbour_Information_ExtIEs_specs_689	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_696 = {
+	sizeof(struct X2N_NRFreqInfo_ExtIEs__extensionValue),
+	offsetof(struct X2N_NRFreqInfo_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_NRFreqInfo_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_NRFreqInfo_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_696 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_696	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRFreqInfo_ExtIEs_693[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRFreqInfo_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_694,  memb_X2N_id_constraint_693 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRFreqInfo_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_695,  memb_X2N_criticality_constraint_693 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_NRFreqInfo_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_696,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_696,  memb_X2N_extensionValue_constraint_693 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRFreqInfo_ExtIEs_tag2el_693[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRFreqInfo_ExtIEs_specs_693 = {
+	sizeof(struct X2N_NRFreqInfo_ExtIEs),
+	offsetof(struct X2N_NRFreqInfo_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_NRFreqInfo_ExtIEs_tag2el_693,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRFreqInfo_ExtIEs = {
+	"NRFreqInfo-ExtIEs",
+	"NRFreqInfo-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693,
+	sizeof(asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693)
+		/sizeof(asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693[0]), /* 1 */
+	asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693)
+		/sizeof(asn_DEF_X2N_NRFreqInfo_ExtIEs_tags_693[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRFreqInfo_ExtIEs_693,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRFreqInfo_ExtIEs_specs_693	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_700 = {
+	sizeof(struct X2N_NRCGI_ExtIEs__extensionValue),
+	offsetof(struct X2N_NRCGI_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_NRCGI_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_NRCGI_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_700 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_700	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRCGI_ExtIEs_697[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRCGI_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_698,  memb_X2N_id_constraint_697 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRCGI_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_699,  memb_X2N_criticality_constraint_697 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_NRCGI_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_700,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_700,  memb_X2N_extensionValue_constraint_697 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRCGI_ExtIEs_tags_697[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRCGI_ExtIEs_tag2el_697[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRCGI_ExtIEs_specs_697 = {
+	sizeof(struct X2N_NRCGI_ExtIEs),
+	offsetof(struct X2N_NRCGI_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_NRCGI_ExtIEs_tag2el_697,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRCGI_ExtIEs = {
+	"NRCGI-ExtIEs",
+	"NRCGI-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRCGI_ExtIEs_tags_697,
+	sizeof(asn_DEF_X2N_NRCGI_ExtIEs_tags_697)
+		/sizeof(asn_DEF_X2N_NRCGI_ExtIEs_tags_697[0]), /* 1 */
+	asn_DEF_X2N_NRCGI_ExtIEs_tags_697,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRCGI_ExtIEs_tags_697)
+		/sizeof(asn_DEF_X2N_NRCGI_ExtIEs_tags_697[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRCGI_ExtIEs_697,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRCGI_ExtIEs_specs_697	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_704 = {
+	sizeof(struct X2N_NR_TxBW_ExtIEs__extensionValue),
+	offsetof(struct X2N_NR_TxBW_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_NR_TxBW_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_NR_TxBW_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_704 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_704	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NR_TxBW_ExtIEs_701[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NR_TxBW_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_702,  memb_X2N_id_constraint_701 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NR_TxBW_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_703,  memb_X2N_criticality_constraint_701 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_NR_TxBW_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_704,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_704,  memb_X2N_extensionValue_constraint_701 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NR_TxBW_ExtIEs_tag2el_701[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NR_TxBW_ExtIEs_specs_701 = {
+	sizeof(struct X2N_NR_TxBW_ExtIEs),
+	offsetof(struct X2N_NR_TxBW_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_NR_TxBW_ExtIEs_tag2el_701,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NR_TxBW_ExtIEs = {
+	"NR-TxBW-ExtIEs",
+	"NR-TxBW-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701,
+	sizeof(asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701)
+		/sizeof(asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701[0]), /* 1 */
+	asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701,	/* Same as above */
+	sizeof(asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701)
+		/sizeof(asn_DEF_X2N_NR_TxBW_ExtIEs_tags_701[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NR_TxBW_ExtIEs_701,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NR_TxBW_ExtIEs_specs_701	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_708 = {
+	sizeof(struct X2N_NRUESecurityCapabilities_ExtIEs__extensionValue),
+	offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_NRUESecurityCapabilities_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_708 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_708	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_NRUESecurityCapabilities_ExtIEs_705[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_706,  memb_X2N_id_constraint_705 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_707,  memb_X2N_criticality_constraint_705 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_708,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_708,  memb_X2N_extensionValue_constraint_705 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_NRUESecurityCapabilities_ExtIEs_tag2el_705[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_NRUESecurityCapabilities_ExtIEs_specs_705 = {
+	sizeof(struct X2N_NRUESecurityCapabilities_ExtIEs),
+	offsetof(struct X2N_NRUESecurityCapabilities_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_NRUESecurityCapabilities_ExtIEs_tag2el_705,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs = {
+	"NRUESecurityCapabilities-ExtIEs",
+	"NRUESecurityCapabilities-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705,
+	sizeof(asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705)
+		/sizeof(asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705[0]), /* 1 */
+	asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705,	/* Same as above */
+	sizeof(asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705)
+		/sizeof(asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs_tags_705[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_NRUESecurityCapabilities_ExtIEs_705,
+	3,	/* Elements count */
+	&asn_SPC_X2N_NRUESecurityCapabilities_ExtIEs_specs_705	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_712 = {
+	sizeof(struct X2N_PRACH_Configuration_ExtIEs__extensionValue),
+	offsetof(struct X2N_PRACH_Configuration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_PRACH_Configuration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_PRACH_Configuration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_712 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_712	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_PRACH_Configuration_ExtIEs_709[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_710,  memb_X2N_id_constraint_709 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_711,  memb_X2N_criticality_constraint_709 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_PRACH_Configuration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_712,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_712,  memb_X2N_extensionValue_constraint_709 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PRACH_Configuration_ExtIEs_tag2el_709[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_PRACH_Configuration_ExtIEs_specs_709 = {
+	sizeof(struct X2N_PRACH_Configuration_ExtIEs),
+	offsetof(struct X2N_PRACH_Configuration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_PRACH_Configuration_ExtIEs_tag2el_709,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PRACH_Configuration_ExtIEs = {
+	"PRACH-Configuration-ExtIEs",
+	"PRACH-Configuration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709,
+	sizeof(asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709)
+		/sizeof(asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709[0]), /* 1 */
+	asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709,	/* Same as above */
+	sizeof(asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709)
+		/sizeof(asn_DEF_X2N_PRACH_Configuration_ExtIEs_tags_709[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PRACH_Configuration_ExtIEs_709,
+	3,	/* Elements count */
+	&asn_SPC_X2N_PRACH_Configuration_ExtIEs_specs_709	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_716 = {
+	sizeof(struct X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue),
+	offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_716 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_716	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_PLMNAreaBasedQMC_ExtIEs_713[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_714,  memb_X2N_id_constraint_713 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_715,  memb_X2N_criticality_constraint_713 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_716,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_716,  memb_X2N_extensionValue_constraint_713 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_PLMNAreaBasedQMC_ExtIEs_tag2el_713[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_PLMNAreaBasedQMC_ExtIEs_specs_713 = {
+	sizeof(struct X2N_PLMNAreaBasedQMC_ExtIEs),
+	offsetof(struct X2N_PLMNAreaBasedQMC_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_PLMNAreaBasedQMC_ExtIEs_tag2el_713,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs = {
+	"PLMNAreaBasedQMC-ExtIEs",
+	"PLMNAreaBasedQMC-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713,
+	sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713)
+		/sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713[0]), /* 1 */
+	asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713,	/* Same as above */
+	sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713)
+		/sizeof(asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs_tags_713[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_PLMNAreaBasedQMC_ExtIEs_713,
+	3,	/* Elements count */
+	&asn_SPC_X2N_PLMNAreaBasedQMC_ExtIEs_specs_713	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_720[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProSeAuthorized_ExtIEs__extensionValue, choice.ProSeUEtoNetworkRelaying),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ProSeUEtoNetworkRelaying,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ProSeUEtoNetworkRelaying"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_720[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* ProSeUEtoNetworkRelaying */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_720 = {
+	sizeof(struct X2N_ProSeAuthorized_ExtIEs__extensionValue),
+	offsetof(struct X2N_ProSeAuthorized_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ProSeAuthorized_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ProSeAuthorized_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_720,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_720 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_720,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_720	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProSeAuthorized_ExtIEs_717[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProSeAuthorized_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_718,  memb_X2N_id_constraint_717 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProSeAuthorized_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ProSeAuthorized_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_719,  memb_X2N_criticality_constraint_717 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ProSeAuthorized_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_720,
+		select_ProSeAuthorized_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_720,  memb_X2N_extensionValue_constraint_717 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProSeAuthorized_ExtIEs_tag2el_717[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProSeAuthorized_ExtIEs_specs_717 = {
+	sizeof(struct X2N_ProSeAuthorized_ExtIEs),
+	offsetof(struct X2N_ProSeAuthorized_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ProSeAuthorized_ExtIEs_tag2el_717,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProSeAuthorized_ExtIEs = {
+	"ProSeAuthorized-ExtIEs",
+	"ProSeAuthorized-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717,
+	sizeof(asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717)
+		/sizeof(asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717[0]), /* 1 */
+	asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717)
+		/sizeof(asn_DEF_X2N_ProSeAuthorized_ExtIEs_tags_717[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProSeAuthorized_ExtIEs_717,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProSeAuthorized_ExtIEs_specs_717	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_724 = {
+	sizeof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue),
+	offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_724 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_724	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtectedEUTRAResourceIndication_ExtIEs_721[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_722,  memb_X2N_id_constraint_721 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_723,  memb_X2N_criticality_constraint_721 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_724,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_724,  memb_X2N_extensionValue_constraint_721 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tag2el_721[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedEUTRAResourceIndication_ExtIEs_specs_721 = {
+	sizeof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs),
+	offsetof(struct X2N_ProtectedEUTRAResourceIndication_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tag2el_721,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs = {
+	"ProtectedEUTRAResourceIndication-ExtIEs",
+	"ProtectedEUTRAResourceIndication-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721,
+	sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721)
+		/sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[0]), /* 1 */
+	asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721)
+		/sizeof(asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs_tags_721[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedEUTRAResourceIndication_ExtIEs_721,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProtectedEUTRAResourceIndication_ExtIEs_specs_721	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_728 = {
+	sizeof(struct X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue),
+	offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_728 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_728	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtectedFootprintTimePattern_ExtIEs_725[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_726,  memb_X2N_id_constraint_725 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_727,  memb_X2N_criticality_constraint_725 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_728,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_728,  memb_X2N_extensionValue_constraint_725 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedFootprintTimePattern_ExtIEs_tag2el_725[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedFootprintTimePattern_ExtIEs_specs_725 = {
+	sizeof(struct X2N_ProtectedFootprintTimePattern_ExtIEs),
+	offsetof(struct X2N_ProtectedFootprintTimePattern_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ProtectedFootprintTimePattern_ExtIEs_tag2el_725,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs = {
+	"ProtectedFootprintTimePattern-ExtIEs",
+	"ProtectedFootprintTimePattern-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725,
+	sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725)
+		/sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725[0]), /* 1 */
+	asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725)
+		/sizeof(asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs_tags_725[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedFootprintTimePattern_ExtIEs_725,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProtectedFootprintTimePattern_ExtIEs_specs_725	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_732 = {
+	sizeof(struct X2N_ProtectedResourceList_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ProtectedResourceList_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_732 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_732	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_Item_ExtIEs_729[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_730,  memb_X2N_id_constraint_729 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_731,  memb_X2N_criticality_constraint_729 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_732,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_732,  memb_X2N_extensionValue_constraint_729 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ProtectedResourceList_Item_ExtIEs_tag2el_729[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedResourceList_Item_ExtIEs_specs_729 = {
+	sizeof(struct X2N_ProtectedResourceList_Item_ExtIEs),
+	offsetof(struct X2N_ProtectedResourceList_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ProtectedResourceList_Item_ExtIEs_tag2el_729,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs = {
+	"ProtectedResourceList-Item-ExtIEs",
+	"ProtectedResourceList-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729,
+	sizeof(asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729[0]), /* 1 */
+	asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729)
+		/sizeof(asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs_tags_729[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ProtectedResourceList_Item_ExtIEs_729,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ProtectedResourceList_Item_ExtIEs_specs_729	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_736[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus_ExtIEs__extensionValue, choice.DL_scheduling_PDCCH_CCE_usage),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_DL_scheduling_PDCCH_CCE_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DL-scheduling-PDCCH-CCE-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus_ExtIEs__extensionValue, choice.UL_scheduling_PDCCH_CCE_usage),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UL-scheduling-PDCCH-CCE-usage"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_736[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* DL-scheduling-PDCCH-CCE-usage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* UL-scheduling-PDCCH-CCE-usage */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_736 = {
+	sizeof(struct X2N_RadioResourceStatus_ExtIEs__extensionValue),
+	offsetof(struct X2N_RadioResourceStatus_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RadioResourceStatus_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RadioResourceStatus_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_736,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_736 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_736,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_736	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RadioResourceStatus_ExtIEs_733[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_734,  memb_X2N_id_constraint_733 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RadioResourceStatus_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_735,  memb_X2N_criticality_constraint_733 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_736,
+		select_RadioResourceStatus_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_736,  memb_X2N_extensionValue_constraint_733 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RadioResourceStatus_ExtIEs_tag2el_733[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RadioResourceStatus_ExtIEs_specs_733 = {
+	sizeof(struct X2N_RadioResourceStatus_ExtIEs),
+	offsetof(struct X2N_RadioResourceStatus_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RadioResourceStatus_ExtIEs_tag2el_733,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RadioResourceStatus_ExtIEs = {
+	"RadioResourceStatus-ExtIEs",
+	"RadioResourceStatus-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733,
+	sizeof(asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733)
+		/sizeof(asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733[0]), /* 1 */
+	asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733,	/* Same as above */
+	sizeof(asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733)
+		/sizeof(asn_DEF_X2N_RadioResourceStatus_ExtIEs_tags_733[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RadioResourceStatus_ExtIEs_733,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RadioResourceStatus_ExtIEs_specs_733	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_740[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue, choice.EnhancedRNTP),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EnhancedRNTP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EnhancedRNTP"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_740[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* EnhancedRNTP */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_740 = {
+	sizeof(struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue),
+	offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_740,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_740 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_740,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_740	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RelativeNarrowbandTxPower_ExtIEs_737[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_738,  memb_X2N_id_constraint_737 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RelativeNarrowbandTxPower_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_739,  memb_X2N_criticality_constraint_737 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_740,
+		select_RelativeNarrowbandTxPower_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_740,  memb_X2N_extensionValue_constraint_737 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RelativeNarrowbandTxPower_ExtIEs_tag2el_737[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RelativeNarrowbandTxPower_ExtIEs_specs_737 = {
+	sizeof(struct X2N_RelativeNarrowbandTxPower_ExtIEs),
+	offsetof(struct X2N_RelativeNarrowbandTxPower_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RelativeNarrowbandTxPower_ExtIEs_tag2el_737,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs = {
+	"RelativeNarrowbandTxPower-ExtIEs",
+	"RelativeNarrowbandTxPower-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737,
+	sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737)
+		/sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737[0]), /* 1 */
+	asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737,	/* Same as above */
+	sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737)
+		/sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs_tags_737[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RelativeNarrowbandTxPower_ExtIEs_737,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RelativeNarrowbandTxPower_ExtIEs_specs_737	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_744 = {
+	sizeof(struct X2N_ReservedSubframePattern_ExtIEs__extensionValue),
+	offsetof(struct X2N_ReservedSubframePattern_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ReservedSubframePattern_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ReservedSubframePattern_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_744 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_744	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ReservedSubframePattern_ExtIEs_741[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_742,  memb_X2N_id_constraint_741 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_743,  memb_X2N_criticality_constraint_741 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_744,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_744,  memb_X2N_extensionValue_constraint_741 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ReservedSubframePattern_ExtIEs_tag2el_741[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ReservedSubframePattern_ExtIEs_specs_741 = {
+	sizeof(struct X2N_ReservedSubframePattern_ExtIEs),
+	offsetof(struct X2N_ReservedSubframePattern_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ReservedSubframePattern_ExtIEs_tag2el_741,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReservedSubframePattern_ExtIEs = {
+	"ReservedSubframePattern-ExtIEs",
+	"ReservedSubframePattern-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741,
+	sizeof(asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741)
+		/sizeof(asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741[0]), /* 1 */
+	asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741)
+		/sizeof(asn_DEF_X2N_ReservedSubframePattern_ExtIEs_tags_741[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ReservedSubframePattern_ExtIEs_741,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ReservedSubframePattern_ExtIEs_specs_741	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_748 = {
+	sizeof(struct X2N_RLC_Status_ExtIEs__extensionValue),
+	offsetof(struct X2N_RLC_Status_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RLC_Status_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RLC_Status_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_748 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_748	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RLC_Status_ExtIEs_745[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLC_Status_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_746,  memb_X2N_id_constraint_745 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLC_Status_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_747,  memb_X2N_criticality_constraint_745 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RLC_Status_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_748,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_748,  memb_X2N_extensionValue_constraint_745 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RLC_Status_ExtIEs_tags_745[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RLC_Status_ExtIEs_tag2el_745[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RLC_Status_ExtIEs_specs_745 = {
+	sizeof(struct X2N_RLC_Status_ExtIEs),
+	offsetof(struct X2N_RLC_Status_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RLC_Status_ExtIEs_tag2el_745,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RLC_Status_ExtIEs = {
+	"RLC-Status-ExtIEs",
+	"RLC-Status-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RLC_Status_ExtIEs_tags_745,
+	sizeof(asn_DEF_X2N_RLC_Status_ExtIEs_tags_745)
+		/sizeof(asn_DEF_X2N_RLC_Status_ExtIEs_tags_745[0]), /* 1 */
+	asn_DEF_X2N_RLC_Status_ExtIEs_tags_745,	/* Same as above */
+	sizeof(asn_DEF_X2N_RLC_Status_ExtIEs_tags_745)
+		/sizeof(asn_DEF_X2N_RLC_Status_ExtIEs_tags_745[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RLC_Status_ExtIEs_745,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RLC_Status_ExtIEs_specs_745	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_752 = {
+	sizeof(struct X2N_RSRPMeasurementResult_ExtIEs__extensionValue),
+	offsetof(struct X2N_RSRPMeasurementResult_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RSRPMeasurementResult_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RSRPMeasurementResult_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_752 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_752	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RSRPMeasurementResult_ExtIEs_749[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMeasurementResult_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_750,  memb_X2N_id_constraint_749 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMeasurementResult_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_751,  memb_X2N_criticality_constraint_749 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMeasurementResult_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_752,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_752,  memb_X2N_extensionValue_constraint_749 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RSRPMeasurementResult_ExtIEs_tag2el_749[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RSRPMeasurementResult_ExtIEs_specs_749 = {
+	sizeof(struct X2N_RSRPMeasurementResult_ExtIEs),
+	offsetof(struct X2N_RSRPMeasurementResult_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RSRPMeasurementResult_ExtIEs_tag2el_749,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMeasurementResult_ExtIEs = {
+	"RSRPMeasurementResult-ExtIEs",
+	"RSRPMeasurementResult-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749,
+	sizeof(asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749)
+		/sizeof(asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749[0]), /* 1 */
+	asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749,	/* Same as above */
+	sizeof(asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749)
+		/sizeof(asn_DEF_X2N_RSRPMeasurementResult_ExtIEs_tags_749[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RSRPMeasurementResult_ExtIEs_749,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RSRPMeasurementResult_ExtIEs_specs_749	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_756[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMRList_ExtIEs__extensionValue, choice.UEID),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_UEID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_756[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* UEID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_756 = {
+	sizeof(struct X2N_RSRPMRList_ExtIEs__extensionValue),
+	offsetof(struct X2N_RSRPMRList_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_RSRPMRList_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_RSRPMRList_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_756,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_756 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_756,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_756	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RSRPMRList_ExtIEs_753[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMRList_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_754,  memb_X2N_id_constraint_753 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMRList_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RSRPMRList_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_755,  memb_X2N_criticality_constraint_753 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMRList_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_756,
+		select_RSRPMRList_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_756,  memb_X2N_extensionValue_constraint_753 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RSRPMRList_ExtIEs_tag2el_753[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RSRPMRList_ExtIEs_specs_753 = {
+	sizeof(struct X2N_RSRPMRList_ExtIEs),
+	offsetof(struct X2N_RSRPMRList_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_RSRPMRList_ExtIEs_tag2el_753,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMRList_ExtIEs = {
+	"RSRPMRList-ExtIEs",
+	"RSRPMRList-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753,
+	sizeof(asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753)
+		/sizeof(asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753[0]), /* 1 */
+	asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753,	/* Same as above */
+	sizeof(asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753)
+		/sizeof(asn_DEF_X2N_RSRPMRList_ExtIEs_tags_753[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RSRPMRList_ExtIEs_753,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RSRPMRList_ExtIEs_specs_753	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_760 = {
+	sizeof(struct X2N_S1TNLLoadIndicator_ExtIEs__extensionValue),
+	offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_S1TNLLoadIndicator_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_760 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_760	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_S1TNLLoadIndicator_ExtIEs_757[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_758,  memb_X2N_id_constraint_757 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_759,  memb_X2N_criticality_constraint_757 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_760,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_760,  memb_X2N_extensionValue_constraint_757 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_S1TNLLoadIndicator_ExtIEs_tag2el_757[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_S1TNLLoadIndicator_ExtIEs_specs_757 = {
+	sizeof(struct X2N_S1TNLLoadIndicator_ExtIEs),
+	offsetof(struct X2N_S1TNLLoadIndicator_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_S1TNLLoadIndicator_ExtIEs_tag2el_757,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs = {
+	"S1TNLLoadIndicator-ExtIEs",
+	"S1TNLLoadIndicator-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757,
+	sizeof(asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757)
+		/sizeof(asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757[0]), /* 1 */
+	asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757,	/* Same as above */
+	sizeof(asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757)
+		/sizeof(asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs_tags_757[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_S1TNLLoadIndicator_ExtIEs_757,
+	3,	/* Elements count */
+	&asn_SPC_X2N_S1TNLLoadIndicator_ExtIEs_specs_757	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_764 = {
+	sizeof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_764 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_764	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReport_Item_ExtIEs_761[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_762,  memb_X2N_id_constraint_761 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_763,  memb_X2N_criticality_constraint_761 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_764,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_764,  memb_X2N_extensionValue_constraint_761 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SecondaryRATUsageReport_Item_ExtIEs_tag2el_761[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATUsageReport_Item_ExtIEs_specs_761 = {
+	sizeof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs),
+	offsetof(struct X2N_SecondaryRATUsageReport_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SecondaryRATUsageReport_Item_ExtIEs_tag2el_761,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs = {
+	"SecondaryRATUsageReport-Item-ExtIEs",
+	"SecondaryRATUsageReport-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761,
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs_tags_761[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATUsageReport_Item_ExtIEs_761,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATUsageReport_Item_ExtIEs_specs_761	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_768 = {
+	sizeof(struct X2N_ServedCell_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedCell_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedCell_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedCell_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_768 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_768	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedCell_ExtIEs_765[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_766,  memb_X2N_id_constraint_765 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_767,  memb_X2N_criticality_constraint_765 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_768,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_768,  memb_X2N_extensionValue_constraint_765 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCell_ExtIEs_tags_765[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCell_ExtIEs_tag2el_765[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_ExtIEs_specs_765 = {
+	sizeof(struct X2N_ServedCell_ExtIEs),
+	offsetof(struct X2N_ServedCell_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedCell_ExtIEs_tag2el_765,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_ExtIEs = {
+	"ServedCell-ExtIEs",
+	"ServedCell-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCell_ExtIEs_tags_765,
+	sizeof(asn_DEF_X2N_ServedCell_ExtIEs_tags_765)
+		/sizeof(asn_DEF_X2N_ServedCell_ExtIEs_tags_765[0]), /* 1 */
+	asn_DEF_X2N_ServedCell_ExtIEs_tags_765,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCell_ExtIEs_tags_765)
+		/sizeof(asn_DEF_X2N_ServedCell_ExtIEs_tags_765[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCell_ExtIEs_765,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedCell_ExtIEs_specs_765	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_772[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.Number_of_Antennaports),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_Number_of_Antennaports,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Number-of-Antennaports"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.PRACH_Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_PRACH_Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PRACH-Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.MBSFN_Subframe_Infolist),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MBSFN_Subframe_Infolist,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MBSFN-Subframe-Infolist"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.CSG_Id),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_CSG_Id,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CSG-Id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.MBMS_Service_Area_Identity_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MBMS_Service_Area_Identity_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MBMS-Service-Area-Identity-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.MultibandInfoList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MultibandInfoList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MultibandInfoList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.FreqBandIndicatorPriority),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_FreqBandIndicatorPriority,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"FreqBandIndicatorPriority"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.BandwidthReducedSI),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_BandwidthReducedSI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"BandwidthReducedSI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, choice.ProtectedEUTRAResourceIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtectedEUTRAResourceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ProtectedEUTRAResourceIndication"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_772[] = { 3, 0, 6, 7, 1, 2, 4, 5, 8 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_772[] = { 1, 4, 5, 0, 6, 7, 2, 3, 8 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_772[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 0 }, /* CSG-Id */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 2 }, /* Number-of-Antennaports */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 1 }, /* FreqBandIndicatorPriority */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, -2, 0 }, /* BandwidthReducedSI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 4 }, /* PRACH-Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 3 }, /* MBSFN-Subframe-Infolist */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 2 }, /* MBMS-Service-Area-Identity-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 1 }, /* MultibandInfoList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -4, 0 } /* ProtectedEUTRAResourceIndication */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_772 = {
+	sizeof(struct X2N_ServedCell_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ServedCell_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ServedCell_Information_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_772,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_772,
+	asn_MAP_X2N_extensionValue_from_canonical_772,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_772 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_772,
+	9,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_772	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedCell_Information_ExtIEs_769[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_770,  memb_X2N_id_constraint_769 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ServedCell_Information_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_771,  memb_X2N_criticality_constraint_769 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_772,
+		select_ServedCell_Information_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_772,  memb_X2N_extensionValue_constraint_769 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCell_Information_ExtIEs_tag2el_769[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_Information_ExtIEs_specs_769 = {
+	sizeof(struct X2N_ServedCell_Information_ExtIEs),
+	offsetof(struct X2N_ServedCell_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ServedCell_Information_ExtIEs_tag2el_769,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_Information_ExtIEs = {
+	"ServedCell-Information-ExtIEs",
+	"ServedCell-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769,
+	sizeof(asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769)
+		/sizeof(asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769[0]), /* 1 */
+	asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769)
+		/sizeof(asn_DEF_X2N_ServedCell_Information_ExtIEs_tags_769[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCell_Information_ExtIEs_769,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ServedCell_Information_ExtIEs_specs_769	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_776[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue, choice.SgNBCoordinationAssistanceInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBCoordinationAssistanceInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBCoordinationAssistanceInformation"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_776[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_776[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_776[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* SgNBCoordinationAssistanceInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ECGI */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_776 = {
+	sizeof(struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue),
+	offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_776,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_776,
+	asn_MAP_X2N_extensionValue_from_canonical_776,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_776 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_776,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_776	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBResourceCoordinationInformationExtIEs_773[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_774,  memb_X2N_id_constraint_773 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBResourceCoordinationInformationExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_775,  memb_X2N_criticality_constraint_773 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_776,
+		select_SgNBResourceCoordinationInformationExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_776,  memb_X2N_extensionValue_constraint_773 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBResourceCoordinationInformationExtIEs_tag2el_773[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBResourceCoordinationInformationExtIEs_specs_773 = {
+	sizeof(struct X2N_SgNBResourceCoordinationInformationExtIEs),
+	offsetof(struct X2N_SgNBResourceCoordinationInformationExtIEs, _asn_ctx),
+	asn_MAP_X2N_SgNBResourceCoordinationInformationExtIEs_tag2el_773,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs = {
+	"SgNBResourceCoordinationInformationExtIEs",
+	"SgNBResourceCoordinationInformationExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773,
+	sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773)
+		/sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773[0]), /* 1 */
+	asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773)
+		/sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs_tags_773[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBResourceCoordinationInformationExtIEs_773,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBResourceCoordinationInformationExtIEs_specs_773	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_780 = {
+	sizeof(struct X2N_SpecialSubframe_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_SpecialSubframe_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SpecialSubframe_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SpecialSubframe_Info_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_780 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_780	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SpecialSubframe_Info_ExtIEs_777[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_778,  memb_X2N_id_constraint_777 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_779,  memb_X2N_criticality_constraint_777 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_780,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_780,  memb_X2N_extensionValue_constraint_777 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SpecialSubframe_Info_ExtIEs_tag2el_777[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SpecialSubframe_Info_ExtIEs_specs_777 = {
+	sizeof(struct X2N_SpecialSubframe_Info_ExtIEs),
+	offsetof(struct X2N_SpecialSubframe_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SpecialSubframe_Info_ExtIEs_tag2el_777,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframe_Info_ExtIEs = {
+	"SpecialSubframe-Info-ExtIEs",
+	"SpecialSubframe-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777,
+	sizeof(asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777)
+		/sizeof(asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777[0]), /* 1 */
+	asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777,	/* Same as above */
+	sizeof(asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777)
+		/sizeof(asn_DEF_X2N_SpecialSubframe_Info_ExtIEs_tags_777[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SpecialSubframe_Info_ExtIEs_777,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SpecialSubframe_Info_ExtIEs_specs_777	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_784 = {
+	sizeof(struct X2N_SubbandCQI_ExtIEs__extensionValue),
+	offsetof(struct X2N_SubbandCQI_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SubbandCQI_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SubbandCQI_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_784 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_784	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQI_ExtIEs_781[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQI_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_782,  memb_X2N_id_constraint_781 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQI_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_783,  memb_X2N_criticality_constraint_781 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQI_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_784,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_784,  memb_X2N_extensionValue_constraint_781 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQI_ExtIEs_tag2el_781[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQI_ExtIEs_specs_781 = {
+	sizeof(struct X2N_SubbandCQI_ExtIEs),
+	offsetof(struct X2N_SubbandCQI_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SubbandCQI_ExtIEs_tag2el_781,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQI_ExtIEs = {
+	"SubbandCQI-ExtIEs",
+	"SubbandCQI-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781,
+	sizeof(asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781)
+		/sizeof(asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781[0]), /* 1 */
+	asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781)
+		/sizeof(asn_DEF_X2N_SubbandCQI_ExtIEs_tags_781[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SubbandCQI_ExtIEs_781,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQI_ExtIEs_specs_781	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_788 = {
+	sizeof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue),
+	offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_788 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_788	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_786,  memb_X2N_id_constraint_785 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_787,  memb_X2N_criticality_constraint_785 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_788,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_788,  memb_X2N_extensionValue_constraint_785 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tag2el_785[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785 = {
+	sizeof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs),
+	offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tag2el_785,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs = {
+	"Subscription-Based-UE-DifferentiationInfo-ExtIEs",
+	"Subscription-Based-UE-DifferentiationInfo-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785,
+	sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785)
+		/sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[0]), /* 1 */
+	asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785,	/* Same as above */
+	sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785)
+		/sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_tags_785[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_792 = {
+	sizeof(struct X2N_ScheduledCommunicationTime_ExtIEs__extensionValue),
+	offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ScheduledCommunicationTime_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_792 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_792	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ScheduledCommunicationTime_ExtIEs_789[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_790,  memb_X2N_id_constraint_789 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_791,  memb_X2N_criticality_constraint_789 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_792,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_792,  memb_X2N_extensionValue_constraint_789 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ScheduledCommunicationTime_ExtIEs_tag2el_789[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ScheduledCommunicationTime_ExtIEs_specs_789 = {
+	sizeof(struct X2N_ScheduledCommunicationTime_ExtIEs),
+	offsetof(struct X2N_ScheduledCommunicationTime_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ScheduledCommunicationTime_ExtIEs_tag2el_789,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs = {
+	"ScheduledCommunicationTime-ExtIEs",
+	"ScheduledCommunicationTime-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789,
+	sizeof(asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789)
+		/sizeof(asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789[0]), /* 1 */
+	asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789,	/* Same as above */
+	sizeof(asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789)
+		/sizeof(asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs_tags_789[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ScheduledCommunicationTime_ExtIEs_789,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ScheduledCommunicationTime_ExtIEs_specs_789	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_796 = {
+	sizeof(struct X2N_SubbandCQIItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_SubbandCQIItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SubbandCQIItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SubbandCQIItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_796 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_796	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQIItem_ExtIEs_793[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQIItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_794,  memb_X2N_id_constraint_793 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQIItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_795,  memb_X2N_criticality_constraint_793 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQIItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_796,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_796,  memb_X2N_extensionValue_constraint_793 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQIItem_ExtIEs_tag2el_793[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQIItem_ExtIEs_specs_793 = {
+	sizeof(struct X2N_SubbandCQIItem_ExtIEs),
+	offsetof(struct X2N_SubbandCQIItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SubbandCQIItem_ExtIEs_tag2el_793,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIItem_ExtIEs = {
+	"SubbandCQIItem-ExtIEs",
+	"SubbandCQIItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793,
+	sizeof(asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793)
+		/sizeof(asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793[0]), /* 1 */
+	asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793)
+		/sizeof(asn_DEF_X2N_SubbandCQIItem_ExtIEs_tags_793[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SubbandCQIItem_ExtIEs_793,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQIItem_ExtIEs_specs_793	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_800 = {
+	sizeof(struct X2N_SULInformation_ExtIEs__extensionValue),
+	offsetof(struct X2N_SULInformation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SULInformation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SULInformation_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_800 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_800	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SULInformation_ExtIEs_797[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SULInformation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_798,  memb_X2N_id_constraint_797 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SULInformation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_799,  memb_X2N_criticality_constraint_797 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SULInformation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_800,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_800,  memb_X2N_extensionValue_constraint_797 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SULInformation_ExtIEs_tags_797[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SULInformation_ExtIEs_tag2el_797[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SULInformation_ExtIEs_specs_797 = {
+	sizeof(struct X2N_SULInformation_ExtIEs),
+	offsetof(struct X2N_SULInformation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SULInformation_ExtIEs_tag2el_797,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SULInformation_ExtIEs = {
+	"SULInformation-ExtIEs",
+	"SULInformation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SULInformation_ExtIEs_tags_797,
+	sizeof(asn_DEF_X2N_SULInformation_ExtIEs_tags_797)
+		/sizeof(asn_DEF_X2N_SULInformation_ExtIEs_tags_797[0]), /* 1 */
+	asn_DEF_X2N_SULInformation_ExtIEs_tags_797,	/* Same as above */
+	sizeof(asn_DEF_X2N_SULInformation_ExtIEs_tags_797)
+		/sizeof(asn_DEF_X2N_SULInformation_ExtIEs_tags_797[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SULInformation_ExtIEs_797,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SULInformation_ExtIEs_specs_797	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_804 = {
+	sizeof(struct X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue),
+	offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_804 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_804	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SupportedSULFreqBandItem_ExtIEs_801[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_802,  memb_X2N_id_constraint_801 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_803,  memb_X2N_criticality_constraint_801 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_804,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_804,  memb_X2N_extensionValue_constraint_801 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SupportedSULFreqBandItem_ExtIEs_tag2el_801[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SupportedSULFreqBandItem_ExtIEs_specs_801 = {
+	sizeof(struct X2N_SupportedSULFreqBandItem_ExtIEs),
+	offsetof(struct X2N_SupportedSULFreqBandItem_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_SupportedSULFreqBandItem_ExtIEs_tag2el_801,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs = {
+	"SupportedSULFreqBandItem-ExtIEs",
+	"SupportedSULFreqBandItem-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801,
+	sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801)
+		/sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801[0]), /* 1 */
+	asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801,	/* Same as above */
+	sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801)
+		/sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs_tags_801[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SupportedSULFreqBandItem_ExtIEs_801,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SupportedSULFreqBandItem_ExtIEs_specs_801	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_808 = {
+	sizeof(struct X2N_TABasedMDT_ExtIEs__extensionValue),
+	offsetof(struct X2N_TABasedMDT_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TABasedMDT_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TABasedMDT_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_808 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_808	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TABasedMDT_ExtIEs_805[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedMDT_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_806,  memb_X2N_id_constraint_805 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedMDT_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_807,  memb_X2N_criticality_constraint_805 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedMDT_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_808,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_808,  memb_X2N_extensionValue_constraint_805 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TABasedMDT_ExtIEs_tag2el_805[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedMDT_ExtIEs_specs_805 = {
+	sizeof(struct X2N_TABasedMDT_ExtIEs),
+	offsetof(struct X2N_TABasedMDT_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TABasedMDT_ExtIEs_tag2el_805,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TABasedMDT_ExtIEs = {
+	"TABasedMDT-ExtIEs",
+	"TABasedMDT-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805,
+	sizeof(asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805)
+		/sizeof(asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805[0]), /* 1 */
+	asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805,	/* Same as above */
+	sizeof(asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805)
+		/sizeof(asn_DEF_X2N_TABasedMDT_ExtIEs_tags_805[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TABasedMDT_ExtIEs_805,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TABasedMDT_ExtIEs_specs_805	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_812 = {
+	sizeof(struct X2N_TAIBasedMDT_ExtIEs__extensionValue),
+	offsetof(struct X2N_TAIBasedMDT_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TAIBasedMDT_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TAIBasedMDT_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_812 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_812	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TAIBasedMDT_ExtIEs_809[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedMDT_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_810,  memb_X2N_id_constraint_809 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedMDT_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_811,  memb_X2N_criticality_constraint_809 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedMDT_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_812,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_812,  memb_X2N_extensionValue_constraint_809 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAIBasedMDT_ExtIEs_tag2el_809[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedMDT_ExtIEs_specs_809 = {
+	sizeof(struct X2N_TAIBasedMDT_ExtIEs),
+	offsetof(struct X2N_TAIBasedMDT_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TAIBasedMDT_ExtIEs_tag2el_809,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedMDT_ExtIEs = {
+	"TAIBasedMDT-ExtIEs",
+	"TAIBasedMDT-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809,
+	sizeof(asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809)
+		/sizeof(asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809[0]), /* 1 */
+	asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809)
+		/sizeof(asn_DEF_X2N_TAIBasedMDT_ExtIEs_tags_809[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAIBasedMDT_ExtIEs_809,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TAIBasedMDT_ExtIEs_specs_809	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_816 = {
+	sizeof(struct X2N_TAI_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_TAI_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TAI_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TAI_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_816 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_816	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TAI_Item_ExtIEs_813[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAI_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_814,  memb_X2N_id_constraint_813 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAI_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_815,  memb_X2N_criticality_constraint_813 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TAI_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_816,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_816,  memb_X2N_extensionValue_constraint_813 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAI_Item_ExtIEs_tags_813[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAI_Item_ExtIEs_tag2el_813[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAI_Item_ExtIEs_specs_813 = {
+	sizeof(struct X2N_TAI_Item_ExtIEs),
+	offsetof(struct X2N_TAI_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TAI_Item_ExtIEs_tag2el_813,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAI_Item_ExtIEs = {
+	"TAI-Item-ExtIEs",
+	"TAI-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAI_Item_ExtIEs_tags_813,
+	sizeof(asn_DEF_X2N_TAI_Item_ExtIEs_tags_813)
+		/sizeof(asn_DEF_X2N_TAI_Item_ExtIEs_tags_813[0]), /* 1 */
+	asn_DEF_X2N_TAI_Item_ExtIEs_tags_813,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAI_Item_ExtIEs_tags_813)
+		/sizeof(asn_DEF_X2N_TAI_Item_ExtIEs_tags_813[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAI_Item_ExtIEs_813,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TAI_Item_ExtIEs_specs_813	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_820 = {
+	sizeof(struct X2N_TABasedQMC_ExtIEs__extensionValue),
+	offsetof(struct X2N_TABasedQMC_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TABasedQMC_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TABasedQMC_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_820 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_820	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TABasedQMC_ExtIEs_817[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedQMC_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_818,  memb_X2N_id_constraint_817 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedQMC_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_819,  memb_X2N_criticality_constraint_817 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedQMC_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_820,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_820,  memb_X2N_extensionValue_constraint_817 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TABasedQMC_ExtIEs_tag2el_817[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedQMC_ExtIEs_specs_817 = {
+	sizeof(struct X2N_TABasedQMC_ExtIEs),
+	offsetof(struct X2N_TABasedQMC_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TABasedQMC_ExtIEs_tag2el_817,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TABasedQMC_ExtIEs = {
+	"TABasedQMC-ExtIEs",
+	"TABasedQMC-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817,
+	sizeof(asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817)
+		/sizeof(asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817[0]), /* 1 */
+	asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817,	/* Same as above */
+	sizeof(asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817)
+		/sizeof(asn_DEF_X2N_TABasedQMC_ExtIEs_tags_817[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TABasedQMC_ExtIEs_817,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TABasedQMC_ExtIEs_specs_817	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_824 = {
+	sizeof(struct X2N_TAIBasedQMC_ExtIEs__extensionValue),
+	offsetof(struct X2N_TAIBasedQMC_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TAIBasedQMC_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TAIBasedQMC_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_824 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_824	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TAIBasedQMC_ExtIEs_821[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedQMC_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_822,  memb_X2N_id_constraint_821 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedQMC_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_823,  memb_X2N_criticality_constraint_821 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedQMC_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_824,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_824,  memb_X2N_extensionValue_constraint_821 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAIBasedQMC_ExtIEs_tag2el_821[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedQMC_ExtIEs_specs_821 = {
+	sizeof(struct X2N_TAIBasedQMC_ExtIEs),
+	offsetof(struct X2N_TAIBasedQMC_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TAIBasedQMC_ExtIEs_tag2el_821,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedQMC_ExtIEs = {
+	"TAIBasedQMC-ExtIEs",
+	"TAIBasedQMC-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821,
+	sizeof(asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821)
+		/sizeof(asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821[0]), /* 1 */
+	asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821)
+		/sizeof(asn_DEF_X2N_TAIBasedQMC_ExtIEs_tags_821[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAIBasedQMC_ExtIEs_821,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TAIBasedQMC_ExtIEs_specs_821	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_828[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs__extensionValue, choice.AdditionalSpecialSubframe_Info),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AdditionalSpecialSubframe_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"AdditionalSpecialSubframe-Info"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs__extensionValue, choice.EARFCNExtension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_EARFCNExtension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EARFCNExtension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs__extensionValue, choice.AdditionalSpecialSubframeExtension_Info),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"AdditionalSpecialSubframeExtension-Info"
+		},
+};
+static const unsigned asn_MAP_X2N_extensionValue_to_canonical_828[] = { 1, 0, 2 };
+static const unsigned asn_MAP_X2N_extensionValue_from_canonical_828[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_828[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* EARFCNExtension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* AdditionalSpecialSubframe-Info */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* AdditionalSpecialSubframeExtension-Info */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_828 = {
+	sizeof(struct X2N_TDD_Info_ExtIEs__extensionValue),
+	offsetof(struct X2N_TDD_Info_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TDD_Info_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TDD_Info_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_828,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_extensionValue_to_canonical_828,
+	asn_MAP_X2N_extensionValue_from_canonical_828,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_828 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_828,
+	3,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_828	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TDD_Info_ExtIEs_825[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_826,  memb_X2N_id_constraint_825 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_TDD_Info_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_827,  memb_X2N_criticality_constraint_825 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_828,
+		select_TDD_Info_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_828,  memb_X2N_extensionValue_constraint_825 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_Info_ExtIEs_tags_825[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_Info_ExtIEs_tag2el_825[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_Info_ExtIEs_specs_825 = {
+	sizeof(struct X2N_TDD_Info_ExtIEs),
+	offsetof(struct X2N_TDD_Info_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TDD_Info_ExtIEs_tag2el_825,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_Info_ExtIEs = {
+	"TDD-Info-ExtIEs",
+	"TDD-Info-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_Info_ExtIEs_tags_825,
+	sizeof(asn_DEF_X2N_TDD_Info_ExtIEs_tags_825)
+		/sizeof(asn_DEF_X2N_TDD_Info_ExtIEs_tags_825[0]), /* 1 */
+	asn_DEF_X2N_TDD_Info_ExtIEs_tags_825,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_Info_ExtIEs_tags_825)
+		/sizeof(asn_DEF_X2N_TDD_Info_ExtIEs_tags_825[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_Info_ExtIEs_825,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TDD_Info_ExtIEs_specs_825	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_832[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation_ExtIEs__extensionValue, choice.MDT_Configuration),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MDT_Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MDT-Configuration"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation_ExtIEs__extensionValue, choice.UEAppLayerMeasConfig),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEAppLayerMeasConfig,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEAppLayerMeasConfig"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_832[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* MDT-Configuration */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* UEAppLayerMeasConfig */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_832 = {
+	sizeof(struct X2N_TraceActivation_ExtIEs__extensionValue),
+	offsetof(struct X2N_TraceActivation_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_TraceActivation_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_TraceActivation_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_832,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_832 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_832,
+	2,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_832	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_TraceActivation_ExtIEs_829[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_830,  memb_X2N_id_constraint_829 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_TraceActivation_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_831,  memb_X2N_criticality_constraint_829 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_832,
+		select_TraceActivation_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_832,  memb_X2N_extensionValue_constraint_829 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TraceActivation_ExtIEs_tags_829[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TraceActivation_ExtIEs_tag2el_829[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TraceActivation_ExtIEs_specs_829 = {
+	sizeof(struct X2N_TraceActivation_ExtIEs),
+	offsetof(struct X2N_TraceActivation_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_TraceActivation_ExtIEs_tag2el_829,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TraceActivation_ExtIEs = {
+	"TraceActivation-ExtIEs",
+	"TraceActivation-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TraceActivation_ExtIEs_tags_829,
+	sizeof(asn_DEF_X2N_TraceActivation_ExtIEs_tags_829)
+		/sizeof(asn_DEF_X2N_TraceActivation_ExtIEs_tags_829[0]), /* 1 */
+	asn_DEF_X2N_TraceActivation_ExtIEs_tags_829,	/* Same as above */
+	sizeof(asn_DEF_X2N_TraceActivation_ExtIEs_tags_829)
+		/sizeof(asn_DEF_X2N_TraceActivation_ExtIEs_tags_829[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TraceActivation_ExtIEs_829,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TraceActivation_ExtIEs_specs_829	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_836 = {
+	sizeof(struct X2N_Tunnel_Information_ExtIEs__extensionValue),
+	offsetof(struct X2N_Tunnel_Information_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_Tunnel_Information_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_Tunnel_Information_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_836 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_836	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_Tunnel_Information_ExtIEs_833[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Tunnel_Information_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_834,  memb_X2N_id_constraint_833 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_Tunnel_Information_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_835,  memb_X2N_criticality_constraint_833 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_Tunnel_Information_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_836,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_836,  memb_X2N_extensionValue_constraint_833 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Tunnel_Information_ExtIEs_tag2el_833[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_Tunnel_Information_ExtIEs_specs_833 = {
+	sizeof(struct X2N_Tunnel_Information_ExtIEs),
+	offsetof(struct X2N_Tunnel_Information_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_Tunnel_Information_ExtIEs_tag2el_833,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Tunnel_Information_ExtIEs = {
+	"Tunnel-Information-ExtIEs",
+	"Tunnel-Information-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833,
+	sizeof(asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833)
+		/sizeof(asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833[0]), /* 1 */
+	asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833,	/* Same as above */
+	sizeof(asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833)
+		/sizeof(asn_DEF_X2N_Tunnel_Information_ExtIEs_tags_833[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Tunnel_Information_ExtIEs_833,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Tunnel_Information_ExtIEs_specs_833	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_840[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue, choice.ExtendedBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_ExtendedBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExtendedBitRate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_840[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ExtendedBitRate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_840 = {
+	sizeof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue),
+	offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_840,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_840 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_840,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_840	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UEAggregate_MaximumBitrate_ExtIEs_837[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_838,  memb_X2N_id_constraint_837 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UEAggregate_MaximumBitrate_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_839,  memb_X2N_criticality_constraint_837 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_840,
+		select_UEAggregate_MaximumBitrate_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_840,  memb_X2N_extensionValue_constraint_837 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEAggregate_MaximumBitrate_ExtIEs_tag2el_837[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAggregate_MaximumBitrate_ExtIEs_specs_837 = {
+	sizeof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs),
+	offsetof(struct X2N_UEAggregate_MaximumBitrate_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UEAggregate_MaximumBitrate_ExtIEs_tag2el_837,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs = {
+	"UEAggregate-MaximumBitrate-ExtIEs",
+	"UEAggregate-MaximumBitrate-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837,
+	sizeof(asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837)
+		/sizeof(asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837[0]), /* 1 */
+	asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837)
+		/sizeof(asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs_tags_837[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEAggregate_MaximumBitrate_ExtIEs_837,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEAggregate_MaximumBitrate_ExtIEs_specs_837	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_extensionValue_844[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue, choice.ServiceType),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ServiceType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServiceType"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_extensionValue_tag2el_844[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* ServiceType */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_844 = {
+	sizeof(struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue),
+	offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue *)0)->present),
+	asn_MAP_X2N_extensionValue_tag2el_844,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_844 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_extensionValue_844,
+	1,	/* Elements count */
+	&asn_SPC_X2N_extensionValue_specs_844	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UEAppLayerMeasConfig_ExtIEs_841[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_842,  memb_X2N_id_constraint_841 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UEAppLayerMeasConfig_ExtIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_843,  memb_X2N_criticality_constraint_841 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_844,
+		select_UEAppLayerMeasConfig_ExtIEs_X2N_extensionValue_type,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_844,  memb_X2N_extensionValue_constraint_841 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEAppLayerMeasConfig_ExtIEs_tag2el_841[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAppLayerMeasConfig_ExtIEs_specs_841 = {
+	sizeof(struct X2N_UEAppLayerMeasConfig_ExtIEs),
+	offsetof(struct X2N_UEAppLayerMeasConfig_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UEAppLayerMeasConfig_ExtIEs_tag2el_841,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs = {
+	"UEAppLayerMeasConfig-ExtIEs",
+	"UEAppLayerMeasConfig-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841,
+	sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841)
+		/sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841[0]), /* 1 */
+	asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841)
+		/sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs_tags_841[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEAppLayerMeasConfig_ExtIEs_841,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEAppLayerMeasConfig_ExtIEs_specs_841	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_848 = {
+	sizeof(struct X2N_UESecurityCapabilities_ExtIEs__extensionValue),
+	offsetof(struct X2N_UESecurityCapabilities_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UESecurityCapabilities_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UESecurityCapabilities_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_848 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_848	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UESecurityCapabilities_ExtIEs_845[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UESecurityCapabilities_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_846,  memb_X2N_id_constraint_845 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UESecurityCapabilities_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_847,  memb_X2N_criticality_constraint_845 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UESecurityCapabilities_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_848,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_848,  memb_X2N_extensionValue_constraint_845 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UESecurityCapabilities_ExtIEs_tag2el_845[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UESecurityCapabilities_ExtIEs_specs_845 = {
+	sizeof(struct X2N_UESecurityCapabilities_ExtIEs),
+	offsetof(struct X2N_UESecurityCapabilities_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UESecurityCapabilities_ExtIEs_tag2el_845,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UESecurityCapabilities_ExtIEs = {
+	"UESecurityCapabilities-ExtIEs",
+	"UESecurityCapabilities-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845,
+	sizeof(asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845)
+		/sizeof(asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845[0]), /* 1 */
+	asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845,	/* Same as above */
+	sizeof(asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845)
+		/sizeof(asn_DEF_X2N_UESecurityCapabilities_ExtIEs_tags_845[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UESecurityCapabilities_ExtIEs_845,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UESecurityCapabilities_ExtIEs_specs_845	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_852 = {
+	sizeof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue),
+	offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_852 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_852	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_850,  memb_X2N_id_constraint_849 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_851,  memb_X2N_criticality_constraint_849 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_852,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_852,  memb_X2N_extensionValue_constraint_849 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tag2el_849[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849 = {
+	sizeof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs),
+	offsetof(struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tag2el_849,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs = {
+	"UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs",
+	"UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849,
+	sizeof(asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849)
+		/sizeof(asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[0]), /* 1 */
+	asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849)
+		/sizeof(asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_tags_849[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_856 = {
+	sizeof(struct X2N_UEsToBeResetList_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UEsToBeResetList_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_856 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_856	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UEsToBeResetList_Item_ExtIEs_853[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_854,  memb_X2N_id_constraint_853 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_855,  memb_X2N_criticality_constraint_853 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_856,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_856,  memb_X2N_extensionValue_constraint_853 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEsToBeResetList_Item_ExtIEs_tag2el_853[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEsToBeResetList_Item_ExtIEs_specs_853 = {
+	sizeof(struct X2N_UEsToBeResetList_Item_ExtIEs),
+	offsetof(struct X2N_UEsToBeResetList_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UEsToBeResetList_Item_ExtIEs_tag2el_853,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs = {
+	"UEsToBeResetList-Item-ExtIEs",
+	"UEsToBeResetList-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853,
+	sizeof(asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853[0]), /* 1 */
+	asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs_tags_853[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEsToBeResetList_Item_ExtIEs_853,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEsToBeResetList_Item_ExtIEs_specs_853	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_860 = {
+	sizeof(struct X2N_ULandDLSharing_ExtIEs__extensionValue),
+	offsetof(struct X2N_ULandDLSharing_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ULandDLSharing_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ULandDLSharing_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_860 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_860	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ULandDLSharing_ExtIEs_857[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULandDLSharing_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_858,  memb_X2N_id_constraint_857 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULandDLSharing_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_859,  memb_X2N_criticality_constraint_857 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ULandDLSharing_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_860,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_860,  memb_X2N_extensionValue_constraint_857 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULandDLSharing_ExtIEs_tag2el_857[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULandDLSharing_ExtIEs_specs_857 = {
+	sizeof(struct X2N_ULandDLSharing_ExtIEs),
+	offsetof(struct X2N_ULandDLSharing_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ULandDLSharing_ExtIEs_tag2el_857,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULandDLSharing_ExtIEs = {
+	"ULandDLSharing-ExtIEs",
+	"ULandDLSharing-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857,
+	sizeof(asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857)
+		/sizeof(asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857[0]), /* 1 */
+	asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857)
+		/sizeof(asn_DEF_X2N_ULandDLSharing_ExtIEs_tags_857[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULandDLSharing_ExtIEs_857,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ULandDLSharing_ExtIEs_specs_857	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_864 = {
+	sizeof(struct X2N_ULConfiguration_ExtIEs__extensionValue),
+	offsetof(struct X2N_ULConfiguration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ULConfiguration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ULConfiguration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_864 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_864	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ULConfiguration_ExtIEs_861[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULConfiguration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_862,  memb_X2N_id_constraint_861 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULConfiguration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_863,  memb_X2N_criticality_constraint_861 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ULConfiguration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_864,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_864,  memb_X2N_extensionValue_constraint_861 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULConfiguration_ExtIEs_tag2el_861[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULConfiguration_ExtIEs_specs_861 = {
+	sizeof(struct X2N_ULConfiguration_ExtIEs),
+	offsetof(struct X2N_ULConfiguration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ULConfiguration_ExtIEs_tag2el_861,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULConfiguration_ExtIEs = {
+	"ULConfiguration-ExtIEs",
+	"ULConfiguration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861,
+	sizeof(asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861)
+		/sizeof(asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861[0]), /* 1 */
+	asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861)
+		/sizeof(asn_DEF_X2N_ULConfiguration_ExtIEs_tags_861[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULConfiguration_ExtIEs_861,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ULConfiguration_ExtIEs_specs_861	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_868 = {
+	sizeof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue),
+	offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_868 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_868	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_866,  memb_X2N_id_constraint_865 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_867,  memb_X2N_criticality_constraint_865 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_868,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_868,  memb_X2N_extensionValue_constraint_865 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tag2el_865[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865 = {
+	sizeof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs),
+	offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tag2el_865,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs = {
+	"UL-HighInterferenceIndicationInfo-Item-ExtIEs",
+	"UL-HighInterferenceIndicationInfo-Item-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865,
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[0]), /* 1 */
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_tags_865[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_872 = {
+	sizeof(struct X2N_ULOnlySharing_ExtIEs__extensionValue),
+	offsetof(struct X2N_ULOnlySharing_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_ULOnlySharing_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_ULOnlySharing_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_872 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_872	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ULOnlySharing_ExtIEs_869[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULOnlySharing_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_870,  memb_X2N_id_constraint_869 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULOnlySharing_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_871,  memb_X2N_criticality_constraint_869 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ULOnlySharing_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_872,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_872,  memb_X2N_extensionValue_constraint_869 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULOnlySharing_ExtIEs_tag2el_869[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULOnlySharing_ExtIEs_specs_869 = {
+	sizeof(struct X2N_ULOnlySharing_ExtIEs),
+	offsetof(struct X2N_ULOnlySharing_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_ULOnlySharing_ExtIEs_tag2el_869,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULOnlySharing_ExtIEs = {
+	"ULOnlySharing-ExtIEs",
+	"ULOnlySharing-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869,
+	sizeof(asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869)
+		/sizeof(asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869[0]), /* 1 */
+	asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869)
+		/sizeof(asn_DEF_X2N_ULOnlySharing_ExtIEs_tags_869[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULOnlySharing_ExtIEs_869,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ULOnlySharing_ExtIEs_specs_869	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_876 = {
+	sizeof(struct X2N_UsableABSInformationFDD_ExtIEs__extensionValue),
+	offsetof(struct X2N_UsableABSInformationFDD_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UsableABSInformationFDD_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UsableABSInformationFDD_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_876 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_876	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationFDD_ExtIEs_873[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationFDD_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_874,  memb_X2N_id_constraint_873 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationFDD_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_875,  memb_X2N_criticality_constraint_873 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationFDD_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_876,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_876,  memb_X2N_extensionValue_constraint_873 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UsableABSInformationFDD_ExtIEs_tag2el_873[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationFDD_ExtIEs_specs_873 = {
+	sizeof(struct X2N_UsableABSInformationFDD_ExtIEs),
+	offsetof(struct X2N_UsableABSInformationFDD_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UsableABSInformationFDD_ExtIEs_tag2el_873,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationFDD_ExtIEs = {
+	"UsableABSInformationFDD-ExtIEs",
+	"UsableABSInformationFDD-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873,
+	sizeof(asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873)
+		/sizeof(asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873[0]), /* 1 */
+	asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873,	/* Same as above */
+	sizeof(asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873)
+		/sizeof(asn_DEF_X2N_UsableABSInformationFDD_ExtIEs_tags_873[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UsableABSInformationFDD_ExtIEs_873,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UsableABSInformationFDD_ExtIEs_specs_873	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_880 = {
+	sizeof(struct X2N_UsableABSInformationTDD_ExtIEs__extensionValue),
+	offsetof(struct X2N_UsableABSInformationTDD_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_UsableABSInformationTDD_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_UsableABSInformationTDD_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_880 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_880	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationTDD_ExtIEs_877[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationTDD_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_878,  memb_X2N_id_constraint_877 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationTDD_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_879,  memb_X2N_criticality_constraint_877 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationTDD_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_880,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_880,  memb_X2N_extensionValue_constraint_877 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UsableABSInformationTDD_ExtIEs_tag2el_877[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationTDD_ExtIEs_specs_877 = {
+	sizeof(struct X2N_UsableABSInformationTDD_ExtIEs),
+	offsetof(struct X2N_UsableABSInformationTDD_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_UsableABSInformationTDD_ExtIEs_tag2el_877,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationTDD_ExtIEs = {
+	"UsableABSInformationTDD-ExtIEs",
+	"UsableABSInformationTDD-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877,
+	sizeof(asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877)
+		/sizeof(asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877[0]), /* 1 */
+	asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877,	/* Same as above */
+	sizeof(asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877)
+		/sizeof(asn_DEF_X2N_UsableABSInformationTDD_ExtIEs_tags_877[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UsableABSInformationTDD_ExtIEs_877,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UsableABSInformationTDD_ExtIEs_specs_877	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_884 = {
+	sizeof(struct X2N_V2XServicesAuthorized_ExtIEs__extensionValue),
+	offsetof(struct X2N_V2XServicesAuthorized_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_V2XServicesAuthorized_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_V2XServicesAuthorized_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_884 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_884	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_V2XServicesAuthorized_ExtIEs_881[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_V2XServicesAuthorized_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_882,  memb_X2N_id_constraint_881 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_V2XServicesAuthorized_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_883,  memb_X2N_criticality_constraint_881 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_V2XServicesAuthorized_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_884,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_884,  memb_X2N_extensionValue_constraint_881 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_V2XServicesAuthorized_ExtIEs_tag2el_881[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_V2XServicesAuthorized_ExtIEs_specs_881 = {
+	sizeof(struct X2N_V2XServicesAuthorized_ExtIEs),
+	offsetof(struct X2N_V2XServicesAuthorized_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_V2XServicesAuthorized_ExtIEs_tag2el_881,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_V2XServicesAuthorized_ExtIEs = {
+	"V2XServicesAuthorized-ExtIEs",
+	"V2XServicesAuthorized-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881,
+	sizeof(asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881)
+		/sizeof(asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881[0]), /* 1 */
+	asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881,	/* Same as above */
+	sizeof(asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881)
+		/sizeof(asn_DEF_X2N_V2XServicesAuthorized_ExtIEs_tags_881[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_V2XServicesAuthorized_ExtIEs_881,
+	3,	/* Elements count */
+	&asn_SPC_X2N_V2XServicesAuthorized_ExtIEs_specs_881	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_888 = {
+	sizeof(struct X2N_WidebandCQI_ExtIEs__extensionValue),
+	offsetof(struct X2N_WidebandCQI_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_WidebandCQI_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_WidebandCQI_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_888 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_888	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_WidebandCQI_ExtIEs_885[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQI_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_886,  memb_X2N_id_constraint_885 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQI_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_887,  memb_X2N_criticality_constraint_885 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQI_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_888,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_888,  memb_X2N_extensionValue_constraint_885 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WidebandCQI_ExtIEs_tag2el_885[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_WidebandCQI_ExtIEs_specs_885 = {
+	sizeof(struct X2N_WidebandCQI_ExtIEs),
+	offsetof(struct X2N_WidebandCQI_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_WidebandCQI_ExtIEs_tag2el_885,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQI_ExtIEs = {
+	"WidebandCQI-ExtIEs",
+	"WidebandCQI-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885,
+	sizeof(asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885)
+		/sizeof(asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885[0]), /* 1 */
+	asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885,	/* Same as above */
+	sizeof(asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885)
+		/sizeof(asn_DEF_X2N_WidebandCQI_ExtIEs_tags_885[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_WidebandCQI_ExtIEs_885,
+	3,	/* Elements count */
+	&asn_SPC_X2N_WidebandCQI_ExtIEs_specs_885	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_extensionValue_specs_892 = {
+	sizeof(struct X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue),
+	offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue, _asn_ctx),
+	offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue, present),
+	sizeof(((struct X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_extensionValue_892 = {
+	"extensionValue",
+	"extensionValue",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_extensionValue_specs_892	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_WLANMeasurementConfiguration_ExtIEs_889[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_890,  memb_X2N_id_constraint_889 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_891,  memb_X2N_criticality_constraint_889 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs, extensionValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_extensionValue_892,
+		0,
+		{ 0, &asn_PER_memb_X2N_extensionValue_constr_892,  memb_X2N_extensionValue_constraint_889 },
+		0, 0, /* No default value */
+		"extensionValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WLANMeasurementConfiguration_ExtIEs_tag2el_889[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extensionValue */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_WLANMeasurementConfiguration_ExtIEs_specs_889 = {
+	sizeof(struct X2N_WLANMeasurementConfiguration_ExtIEs),
+	offsetof(struct X2N_WLANMeasurementConfiguration_ExtIEs, _asn_ctx),
+	asn_MAP_X2N_WLANMeasurementConfiguration_ExtIEs_tag2el_889,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs = {
+	"WLANMeasurementConfiguration-ExtIEs",
+	"WLANMeasurementConfiguration-ExtIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889,
+	sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889)
+		/sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889[0]), /* 1 */
+	asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889,	/* Same as above */
+	sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889)
+		/sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs_tags_889[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_WLANMeasurementConfiguration_ExtIEs_889,
+	3,	/* Elements count */
+	&asn_SPC_X2N_WLANMeasurementConfiguration_ExtIEs_specs_889	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolExtensionField.h b/asn1c_defs/X2N_ProtocolExtensionField.h
new file mode 100644
index 0000000..f95e957
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolExtensionField.h
@@ -0,0 +1,5163 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolExtensionField_H_
+#define	_X2N_ProtocolExtensionField_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-ID.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "X2N_ManagementBasedMDTallowed.h"
+#include "X2N_Presence.h"
+#include "X2N_MDTPLMNList.h"
+#include "X2N_UESidelinkAggregateMaximumBitRate.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+#include "X2N_BearerType.h"
+#include "X2N_ReceiveStatusOfULPDCPSDUsExtended.h"
+#include "X2N_COUNTValueExtended.h"
+#include "X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h"
+#include "X2N_COUNTvaluePDCP-SNlength18.h"
+#include "X2N_ABSInformation.h"
+#include "X2N_InvokeIndication.h"
+#include "X2N_SubframeAssignment.h"
+#include "X2N_ExtendedULInterferenceOverloadInfo.h"
+#include "X2N_CoMPInformation.h"
+#include "X2N_DynamicDLTransmissionInformation.h"
+#include "X2N_DeactivationIndication.h"
+#include "X2N_CompositeAvailableCapacityGroup.h"
+#include "X2N_ABS-Status.h"
+#include "X2N_RSRPMRList.h"
+#include "X2N_CSIReportList.h"
+#include "X2N_CellReportingIndicator.h"
+#include "X2N_Correlation-ID.h"
+#include "X2N_GTPtunnelEndpoint.h"
+#include "X2N_DL-Forwarding.h"
+#include "X2N_RLCMode.h"
+#include "X2N_PDCPSnLength.h"
+#include "X2N_DuplicationActivation.h"
+#include "X2N_LCID.h"
+#include "X2N_SubscriberProfileIDforRFP.h"
+#include "X2N_RLC-Status.h"
+#include "X2N_NewDRBIDrequest.h"
+#include "X2N_Packet-LossRate.h"
+#include "X2N_EARFCNExtension.h"
+#include "X2N_OffsetOfNbiotChannelNumberToEARFCN.h"
+#include "X2N_NRS-NSSS-PowerOffset.h"
+#include "X2N_NSSS-NumOccasionDifferentPrecoder.h"
+#include "X2N_ExtendedBitRate.h"
+#include "X2N_NRrestrictioninEPSasSecondaryRAT.h"
+#include "X2N_CNTypeRestrictions.h"
+#include "X2N_NRrestrictionin5GS.h"
+#include "X2N_Time-UE-StayedInCell-EnhancedGranularity.h"
+#include "X2N_Cause.h"
+#include "X2N_M3Configuration.h"
+#include "X2N_M4Configuration.h"
+#include "X2N_M5Configuration.h"
+#include "X2N_MDT-Location-Info.h"
+#include "X2N_M6Configuration.h"
+#include "X2N_M7Configuration.h"
+#include "X2N_BluetoothMeasurementConfiguration.h"
+#include "X2N_WLANMeasurementConfiguration.h"
+#include "X2N_NRCGI.h"
+#include "X2N_MeNBCoordinationAssistanceInformation.h"
+#include "X2N_TAC.h"
+#include "X2N_ProSeUEtoNetworkRelaying.h"
+#include "X2N_DL-scheduling-PDCCH-CCE-usage.h"
+#include "X2N_UL-scheduling-PDCCH-CCE-usage.h"
+#include "X2N_EnhancedRNTP.h"
+#include "X2N_UEID.h"
+#include "X2N_Number-of-Antennaports.h"
+#include "X2N_PRACH-Configuration.h"
+#include "X2N_MBSFN-Subframe-Infolist.h"
+#include "X2N_CSG-Id.h"
+#include "X2N_MBMS-Service-Area-Identity-List.h"
+#include "X2N_MultibandInfoList.h"
+#include "X2N_FreqBandIndicatorPriority.h"
+#include "X2N_BandwidthReducedSI.h"
+#include "X2N_ProtectedEUTRAResourceIndication.h"
+#include "X2N_ECGI.h"
+#include "X2N_SgNBCoordinationAssistanceInformation.h"
+#include "X2N_AdditionalSpecialSubframe-Info.h"
+#include "X2N_AdditionalSpecialSubframeExtension-Info.h"
+#include "X2N_MDT-Configuration.h"
+#include "X2N_UEAppLayerMeasConfig.h"
+#include "X2N_ServiceType.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UE_ContextInformation_ExtIEs__extensionValue_PR {
+	X2N_UE_ContextInformation_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_UE_ContextInformation_ExtIEs__extensionValue_PR_ManagementBasedMDTallowed,
+	X2N_UE_ContextInformation_ExtIEs__extensionValue_PR_MDTPLMNList,
+	X2N_UE_ContextInformation_ExtIEs__extensionValue_PR_UESidelinkAggregateMaximumBitRate
+} X2N_UE_ContextInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR_BearerType
+} X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR {
+	X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR {
+	X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR {
+	X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsExtended,
+	X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTValueExtended,
+	X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18,
+	X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR_COUNTvaluePDCP_SNlength18
+} X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_CellInformation_Item_ExtIEs__extensionValue_PR {
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_ABSInformation,
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_InvokeIndication,
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_SubframeAssignment,
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_ExtendedULInterferenceOverloadInfo,
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_CoMPInformation,
+	X2N_CellInformation_Item_ExtIEs__extensionValue_PR_DynamicDLTransmissionInformation
+} X2N_CellInformation_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedCellsToModify_Item_ExtIEs__extensionValue_PR {
+	X2N_ServedCellsToModify_Item_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_ServedCellsToModify_Item_ExtIEs__extensionValue_PR_DeactivationIndication
+} X2N_ServedCellsToModify_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellToReport_Item_ExtIEs__extensionValue_PR {
+	X2N_CellToReport_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CellToReport_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR {
+	X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue_PR {
+	X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR {
+	X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR {
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CompositeAvailableCapacityGroup,
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_ABS_Status,
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_RSRPMRList,
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CSIReportList,
+	X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR_CellReportingIndicator
+} X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue_PR {
+	X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ActivatedCellList_Item_ExtIEs__extensionValue_PR {
+	X2N_ActivatedCellList_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ActivatedCellList_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_RNL_Header_Item_ExtIEs__extensionValue_PR {
+	X2N_RNL_Header_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_RNL_Header_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID
+} X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR {
+	X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR;
+typedef enum X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR {
+	X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR {
+	X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_Correlation_ID
+} X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR {
+	X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR_UESidelinkAggregateMaximumBitRate
+} X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_GTPtunnelEndpoint,
+	X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR_DL_Forwarding
+} X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLCMode
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR {
+	X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR;
+typedef enum X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR {
+	X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR;
+typedef enum X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR {
+	X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR_SubscriberProfileIDforRFP
+} X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLCMode
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+	X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_DuplicationActivation
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_RLC_Status
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength,
+	X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_GTPtunnelEndpoint
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_GTPtunnelEndpoint,
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_RLC_Status
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR_RLCMode
+} X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_PDCPSnLength,
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NewDRBIDrequest
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_RLC_Status,
+	X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_LCID
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_PDCPSnLength
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR {
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR;
+typedef enum X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR {
+	X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR;
+typedef enum X2N_En_gNBServedCells_ExtIEs__extensionValue_PR {
+	X2N_En_gNBServedCells_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_En_gNBServedCells_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedNRCell_Information_ExtIEs__extensionValue_PR {
+	X2N_ServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedNRCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR {
+	X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR {
+	X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR {
+	X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR {
+	X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_NRNeighbour_Information_ExtIEs__extensionValue_PR {
+	X2N_NRNeighbour_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_NRNeighbour_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_Limited_list_ExtIEs__extensionValue_PR {
+	X2N_Limited_list_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_Limited_list_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR {
+	X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR {
+	X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR {
+	X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue_PR {
+	X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR {
+	X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR;
+typedef enum X2N_ABSInformationFDD_ExtIEs__extensionValue_PR {
+	X2N_ABSInformationFDD_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ABSInformationFDD_ExtIEs__extensionValue_PR;
+typedef enum X2N_ABSInformationTDD_ExtIEs__extensionValue_PR {
+	X2N_ABSInformationTDD_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ABSInformationTDD_ExtIEs__extensionValue_PR;
+typedef enum X2N_ABS_Status_ExtIEs__extensionValue_PR {
+	X2N_ABS_Status_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ABS_Status_ExtIEs__extensionValue_PR;
+typedef enum X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR {
+	X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR {
+	X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue_PR {
+	X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue_PR;
+typedef enum X2N_AS_SecurityInformation_ExtIEs__extensionValue_PR {
+	X2N_AS_SecurityInformation_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_AS_SecurityInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR {
+	X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellBasedMDT_ExtIEs__extensionValue_PR {
+	X2N_CellBasedMDT_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CellBasedMDT_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellBasedQMC_ExtIEs__extensionValue_PR {
+	X2N_CellBasedQMC_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CellBasedQMC_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellReplacingInfo_ExtIEs__extensionValue_PR {
+	X2N_CellReplacingInfo_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CellReplacingInfo_ExtIEs__extensionValue_PR;
+typedef enum X2N_CellType_ExtIEs__extensionValue_PR {
+	X2N_CellType_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CellType_ExtIEs__extensionValue_PR;
+typedef enum X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue_PR {
+	X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue_PR {
+	X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_CoMPInformation_ExtIEs__extensionValue_PR {
+	X2N_CoMPInformation_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CoMPInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_CoMPInformationItem_ExtIEs__extensionValue_PR {
+	X2N_CoMPInformationItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CoMPInformationItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_CoMPInformationStartTime_ExtIEs__extensionValue_PR {
+	X2N_CoMPInformationStartTime_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CoMPInformationStartTime_ExtIEs__extensionValue_PR;
+typedef enum X2N_CompositeAvailableCapacity_ExtIEs__extensionValue_PR {
+	X2N_CompositeAvailableCapacity_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CompositeAvailableCapacity_ExtIEs__extensionValue_PR;
+typedef enum X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR {
+	X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR;
+typedef enum X2N_COUNTvalue_ExtIEs__extensionValue_PR {
+	X2N_COUNTvalue_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_COUNTvalue_ExtIEs__extensionValue_PR;
+typedef enum X2N_COUNTValueExtended_ExtIEs__extensionValue_PR {
+	X2N_COUNTValueExtended_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_COUNTValueExtended_ExtIEs__extensionValue_PR;
+typedef enum X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR {
+	X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR;
+typedef enum X2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR {
+	X2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR;
+typedef enum X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR {
+	X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR;
+typedef enum X2N_CSIReportList_ExtIEs__extensionValue_PR {
+	X2N_CSIReportList_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CSIReportList_ExtIEs__extensionValue_PR;
+typedef enum X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue_PR {
+	X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue_PR;
+typedef enum X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR {
+	X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_DataTrafficResourceIndication_ExtIEs__extensionValue_PR {
+	X2N_DataTrafficResourceIndication_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_DataTrafficResourceIndication_ExtIEs__extensionValue_PR;
+typedef enum X2N_DeliveryStatus_ExtIEs__extensionValue_PR {
+	X2N_DeliveryStatus_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_DeliveryStatus_ExtIEs__extensionValue_PR;
+typedef enum X2N_DynamicNAICSInformation_ExtIEs__extensionValue_PR {
+	X2N_DynamicNAICSInformation_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_DynamicNAICSInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_ECGI_ExtIEs__extensionValue_PR {
+	X2N_ECGI_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ECGI_ExtIEs__extensionValue_PR;
+typedef enum X2N_EnhancedRNTP_ExtIEs__extensionValue_PR {
+	X2N_EnhancedRNTP_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_EnhancedRNTP_ExtIEs__extensionValue_PR;
+typedef enum X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue_PR {
+	X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue_PR;
+typedef enum X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue_PR {
+	X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue_PR;
+typedef enum X2N_ERABActivityNotifyItem_ExtIEs__extensionValue_PR {
+	X2N_ERABActivityNotifyItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ERABActivityNotifyItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR {
+	X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR_Packet_LossRate
+} X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RAB_Item_ExtIEs__extensionValue_PR {
+	X2N_E_RAB_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RAB_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_E_RABUsageReport_Item_ExtIEs__extensionValue_PR {
+	X2N_E_RABUsageReport_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_E_RABUsageReport_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ExpectedUEBehaviour_ExtIEs__extensionValue_PR {
+	X2N_ExpectedUEBehaviour_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ExpectedUEBehaviour_ExtIEs__extensionValue_PR;
+typedef enum X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR {
+	X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR;
+typedef enum X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR {
+	X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR;
+typedef enum X2N_FDD_Info_ExtIEs__extensionValue_PR {
+	X2N_FDD_Info_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_FDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension,
+	X2N_FDD_Info_ExtIEs__extensionValue_PR_OffsetOfNbiotChannelNumberToEARFCN,
+	X2N_FDD_Info_ExtIEs__extensionValue_PR_NRS_NSSS_PowerOffset,
+	X2N_FDD_Info_ExtIEs__extensionValue_PR_NSSS_NumOccasionDifferentPrecoder
+} X2N_FDD_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_ForbiddenTAs_Item_ExtIEs__extensionValue_PR {
+	X2N_ForbiddenTAs_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ForbiddenTAs_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ForbiddenLAs_Item_ExtIEs__extensionValue_PR {
+	X2N_ForbiddenLAs_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ForbiddenLAs_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_FreqBandNrItem_ExtIEs__extensionValue_PR {
+	X2N_FreqBandNrItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_FreqBandNrItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_GBR_QosInformation_ExtIEs__extensionValue_PR {
+	X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_GBR_QosInformation_ExtIEs__extensionValue_PR_ExtendedBitRate
+} X2N_GBR_QosInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_GlobalENB_ID_ExtIEs__extensionValue_PR {
+	X2N_GlobalENB_ID_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_GlobalENB_ID_ExtIEs__extensionValue_PR;
+typedef enum X2N_GlobalGNB_ID_ExtIEs__extensionValue_PR {
+	X2N_GlobalGNB_ID_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_GlobalGNB_ID_ExtIEs__extensionValue_PR;
+typedef enum X2N_GTPtunnelEndpoint_ExtIEs__extensionValue_PR {
+	X2N_GTPtunnelEndpoint_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_GTPtunnelEndpoint_ExtIEs__extensionValue_PR;
+typedef enum X2N_GU_Group_ID_ExtIEs__extensionValue_PR {
+	X2N_GU_Group_ID_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_GU_Group_ID_ExtIEs__extensionValue_PR;
+typedef enum X2N_GUMMEI_ExtIEs__extensionValue_PR {
+	X2N_GUMMEI_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_GUMMEI_ExtIEs__extensionValue_PR;
+typedef enum X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR {
+	X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR_NRrestrictioninEPSasSecondaryRAT,
+	X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR_CNTypeRestrictions,
+	X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR_NRrestrictionin5GS
+} X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR;
+typedef enum X2N_HWLoadIndicator_ExtIEs__extensionValue_PR {
+	X2N_HWLoadIndicator_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_HWLoadIndicator_ExtIEs__extensionValue_PR;
+typedef enum X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR {
+	X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_Time_UE_StayedInCell_EnhancedGranularity,
+	X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR_Cause
+} X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_LocationReportingInformation_ExtIEs__extensionValue_PR {
+	X2N_LocationReportingInformation_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_LocationReportingInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_M1PeriodicReporting_ExtIEs__extensionValue_PR {
+	X2N_M1PeriodicReporting_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M1PeriodicReporting_ExtIEs__extensionValue_PR;
+typedef enum X2N_M1ThresholdEventA2_ExtIEs__extensionValue_PR {
+	X2N_M1ThresholdEventA2_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M1ThresholdEventA2_ExtIEs__extensionValue_PR;
+typedef enum X2N_M3Configuration_ExtIEs__extensionValue_PR {
+	X2N_M3Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M3Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_M4Configuration_ExtIEs__extensionValue_PR {
+	X2N_M4Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M4Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_M5Configuration_ExtIEs__extensionValue_PR {
+	X2N_M5Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M5Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_M6Configuration_ExtIEs__extensionValue_PR {
+	X2N_M6Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M6Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_M7Configuration_ExtIEs__extensionValue_PR {
+	X2N_M7Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_M7Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_MDT_Configuration_ExtIEs__extensionValue_PR {
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_M3Configuration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_M4Configuration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_M5Configuration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_MDT_Location_Info,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_MDTPLMNList,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_M6Configuration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_M7Configuration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_BluetoothMeasurementConfiguration,
+	X2N_MDT_Configuration_ExtIEs__extensionValue_PR_WLANMeasurementConfiguration
+} X2N_MDT_Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR {
+	X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_NRCGI,
+	X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR_MeNBCoordinationAssistanceInformation
+} X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR;
+typedef enum X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue_PR {
+	X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_BandInfo_ExtIEs__extensionValue_PR {
+	X2N_BandInfo_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_BandInfo_ExtIEs__extensionValue_PR;
+typedef enum X2N_SplitSRB_ExtIEs__extensionValue_PR {
+	X2N_SplitSRB_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SplitSRB_ExtIEs__extensionValue_PR;
+typedef enum X2N_UENRMeasurement_ExtIEs__extensionValue_PR {
+	X2N_UENRMeasurement_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UENRMeasurement_ExtIEs__extensionValue_PR;
+typedef enum X2N_Neighbour_Information_ExtIEs__extensionValue_PR {
+	X2N_Neighbour_Information_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_Neighbour_Information_ExtIEs__extensionValue_PR_TAC,
+	X2N_Neighbour_Information_ExtIEs__extensionValue_PR_EARFCNExtension
+} X2N_Neighbour_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_NRFreqInfo_ExtIEs__extensionValue_PR {
+	X2N_NRFreqInfo_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_NRFreqInfo_ExtIEs__extensionValue_PR;
+typedef enum X2N_NRCGI_ExtIEs__extensionValue_PR {
+	X2N_NRCGI_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_NRCGI_ExtIEs__extensionValue_PR;
+typedef enum X2N_NR_TxBW_ExtIEs__extensionValue_PR {
+	X2N_NR_TxBW_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_NR_TxBW_ExtIEs__extensionValue_PR;
+typedef enum X2N_NRUESecurityCapabilities_ExtIEs__extensionValue_PR {
+	X2N_NRUESecurityCapabilities_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_NRUESecurityCapabilities_ExtIEs__extensionValue_PR;
+typedef enum X2N_PRACH_Configuration_ExtIEs__extensionValue_PR {
+	X2N_PRACH_Configuration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_PRACH_Configuration_ExtIEs__extensionValue_PR;
+typedef enum X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue_PR {
+	X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue_PR;
+typedef enum X2N_ProSeAuthorized_ExtIEs__extensionValue_PR {
+	X2N_ProSeAuthorized_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_ProSeAuthorized_ExtIEs__extensionValue_PR_ProSeUEtoNetworkRelaying
+} X2N_ProSeAuthorized_ExtIEs__extensionValue_PR;
+typedef enum X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR {
+	X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR;
+typedef enum X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR {
+	X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR;
+typedef enum X2N_ProtectedResourceList_Item_ExtIEs__extensionValue_PR {
+	X2N_ProtectedResourceList_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ProtectedResourceList_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_RadioResourceStatus_ExtIEs__extensionValue_PR {
+	X2N_RadioResourceStatus_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_RadioResourceStatus_ExtIEs__extensionValue_PR_DL_scheduling_PDCCH_CCE_usage,
+	X2N_RadioResourceStatus_ExtIEs__extensionValue_PR_UL_scheduling_PDCCH_CCE_usage
+} X2N_RadioResourceStatus_ExtIEs__extensionValue_PR;
+typedef enum X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR {
+	X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR_EnhancedRNTP
+} X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR;
+typedef enum X2N_ReservedSubframePattern_ExtIEs__extensionValue_PR {
+	X2N_ReservedSubframePattern_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ReservedSubframePattern_ExtIEs__extensionValue_PR;
+typedef enum X2N_RLC_Status_ExtIEs__extensionValue_PR {
+	X2N_RLC_Status_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_RLC_Status_ExtIEs__extensionValue_PR;
+typedef enum X2N_RSRPMeasurementResult_ExtIEs__extensionValue_PR {
+	X2N_RSRPMeasurementResult_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_RSRPMeasurementResult_ExtIEs__extensionValue_PR;
+typedef enum X2N_RSRPMRList_ExtIEs__extensionValue_PR {
+	X2N_RSRPMRList_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_RSRPMRList_ExtIEs__extensionValue_PR_UEID
+} X2N_RSRPMRList_ExtIEs__extensionValue_PR;
+typedef enum X2N_S1TNLLoadIndicator_ExtIEs__extensionValue_PR {
+	X2N_S1TNLLoadIndicator_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_S1TNLLoadIndicator_ExtIEs__extensionValue_PR;
+typedef enum X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR {
+	X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedCell_ExtIEs__extensionValue_PR {
+	X2N_ServedCell_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ServedCell_ExtIEs__extensionValue_PR;
+typedef enum X2N_ServedCell_Information_ExtIEs__extensionValue_PR {
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_Number_of_Antennaports,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_PRACH_Configuration,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_MBSFN_Subframe_Infolist,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_CSG_Id,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_MBMS_Service_Area_Identity_List,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_MultibandInfoList,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_FreqBandIndicatorPriority,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_BandwidthReducedSI,
+	X2N_ServedCell_Information_ExtIEs__extensionValue_PR_ProtectedEUTRAResourceIndication
+} X2N_ServedCell_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR {
+	X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_ECGI,
+	X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR_SgNBCoordinationAssistanceInformation
+} X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR;
+typedef enum X2N_SpecialSubframe_Info_ExtIEs__extensionValue_PR {
+	X2N_SpecialSubframe_Info_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SpecialSubframe_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_SubbandCQI_ExtIEs__extensionValue_PR {
+	X2N_SubbandCQI_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SubbandCQI_ExtIEs__extensionValue_PR;
+typedef enum X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR {
+	X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR;
+typedef enum X2N_ScheduledCommunicationTime_ExtIEs__extensionValue_PR {
+	X2N_ScheduledCommunicationTime_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ScheduledCommunicationTime_ExtIEs__extensionValue_PR;
+typedef enum X2N_SubbandCQIItem_ExtIEs__extensionValue_PR {
+	X2N_SubbandCQIItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SubbandCQIItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_SULInformation_ExtIEs__extensionValue_PR {
+	X2N_SULInformation_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SULInformation_ExtIEs__extensionValue_PR;
+typedef enum X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue_PR {
+	X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue_PR;
+typedef enum X2N_TABasedMDT_ExtIEs__extensionValue_PR {
+	X2N_TABasedMDT_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TABasedMDT_ExtIEs__extensionValue_PR;
+typedef enum X2N_TAIBasedMDT_ExtIEs__extensionValue_PR {
+	X2N_TAIBasedMDT_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TAIBasedMDT_ExtIEs__extensionValue_PR;
+typedef enum X2N_TAI_Item_ExtIEs__extensionValue_PR {
+	X2N_TAI_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TAI_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_TABasedQMC_ExtIEs__extensionValue_PR {
+	X2N_TABasedQMC_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TABasedQMC_ExtIEs__extensionValue_PR;
+typedef enum X2N_TAIBasedQMC_ExtIEs__extensionValue_PR {
+	X2N_TAIBasedQMC_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_TAIBasedQMC_ExtIEs__extensionValue_PR;
+typedef enum X2N_TDD_Info_ExtIEs__extensionValue_PR {
+	X2N_TDD_Info_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_TDD_Info_ExtIEs__extensionValue_PR_AdditionalSpecialSubframe_Info,
+	X2N_TDD_Info_ExtIEs__extensionValue_PR_EARFCNExtension,
+	X2N_TDD_Info_ExtIEs__extensionValue_PR_AdditionalSpecialSubframeExtension_Info
+} X2N_TDD_Info_ExtIEs__extensionValue_PR;
+typedef enum X2N_TraceActivation_ExtIEs__extensionValue_PR {
+	X2N_TraceActivation_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_TraceActivation_ExtIEs__extensionValue_PR_MDT_Configuration,
+	X2N_TraceActivation_ExtIEs__extensionValue_PR_UEAppLayerMeasConfig
+} X2N_TraceActivation_ExtIEs__extensionValue_PR;
+typedef enum X2N_Tunnel_Information_ExtIEs__extensionValue_PR {
+	X2N_Tunnel_Information_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_Tunnel_Information_ExtIEs__extensionValue_PR;
+typedef enum X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR {
+	X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR_ExtendedBitRate
+} X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR;
+typedef enum X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue_PR {
+	X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue_PR_NOTHING,	/* No components present */
+	X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue_PR_ServiceType
+} X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue_PR;
+typedef enum X2N_UESecurityCapabilities_ExtIEs__extensionValue_PR {
+	X2N_UESecurityCapabilities_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UESecurityCapabilities_ExtIEs__extensionValue_PR;
+typedef enum X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR {
+	X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR;
+typedef enum X2N_UEsToBeResetList_Item_ExtIEs__extensionValue_PR {
+	X2N_UEsToBeResetList_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UEsToBeResetList_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ULandDLSharing_ExtIEs__extensionValue_PR {
+	X2N_ULandDLSharing_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ULandDLSharing_ExtIEs__extensionValue_PR;
+typedef enum X2N_ULConfiguration_ExtIEs__extensionValue_PR {
+	X2N_ULConfiguration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ULConfiguration_ExtIEs__extensionValue_PR;
+typedef enum X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR {
+	X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR;
+typedef enum X2N_ULOnlySharing_ExtIEs__extensionValue_PR {
+	X2N_ULOnlySharing_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_ULOnlySharing_ExtIEs__extensionValue_PR;
+typedef enum X2N_UsableABSInformationFDD_ExtIEs__extensionValue_PR {
+	X2N_UsableABSInformationFDD_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UsableABSInformationFDD_ExtIEs__extensionValue_PR;
+typedef enum X2N_UsableABSInformationTDD_ExtIEs__extensionValue_PR {
+	X2N_UsableABSInformationTDD_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_UsableABSInformationTDD_ExtIEs__extensionValue_PR;
+typedef enum X2N_V2XServicesAuthorized_ExtIEs__extensionValue_PR {
+	X2N_V2XServicesAuthorized_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_V2XServicesAuthorized_ExtIEs__extensionValue_PR;
+typedef enum X2N_WidebandCQI_ExtIEs__extensionValue_PR {
+	X2N_WidebandCQI_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_WidebandCQI_ExtIEs__extensionValue_PR;
+typedef enum X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue_PR {
+	X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue_PR_NOTHING	/* No components present */
+	
+} X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue_PR;
+
+/* X2N_ProtocolExtensionField */
+typedef struct X2N_UE_ContextInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextInformation_ExtIEs__extensionValue {
+		X2N_UE_ContextInformation_ExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextInformation_ExtIEs__X2N_extensionValue_u {
+			X2N_ManagementBasedMDTallowed_t	 ManagementBasedMDTallowed;
+			X2N_MDTPLMNList_t	 MDTPLMNList;
+			X2N_UESidelinkAggregateMaximumBitRate_t	 UESidelinkAggregateMaximumBitRate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformation_ExtIEs_t;
+typedef struct X2N_E_RABs_ToBeSetup_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeSetup_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeSetup_ItemExtIEs__X2N_extensionValue_u {
+			X2N_BearerType_t	 BearerType;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetup_ItemExtIEs_t;
+typedef struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue {
+		X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextReferenceAtSeNB_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_t;
+typedef struct X2N_UE_ContextReferenceAtWT_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue {
+		X2N_UE_ContextReferenceAtWT_ItemExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextReferenceAtWT_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtWT_ItemExtIEs_t;
+typedef struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue {
+		X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextReferenceAtSgNB_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_Item_ExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_Item_ExtIEs_t;
+typedef struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue {
+		X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs__X2N_extensionValue_u {
+			X2N_ReceiveStatusOfULPDCPSDUsExtended_t	 ReceiveStatusOfULPDCPSDUsExtended;
+			X2N_COUNTValueExtended_t	 COUNTValueExtended;
+			X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_t	 ReceiveStatusOfULPDCPSDUsPDCP_SNlength18;
+			X2N_COUNTvaluePDCP_SNlength18_t	 COUNTvaluePDCP_SNlength18;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_t;
+typedef struct X2N_CellInformation_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellInformation_Item_ExtIEs__extensionValue {
+		X2N_CellInformation_Item_ExtIEs__extensionValue_PR present;
+		union X2N_CellInformation_Item_ExtIEs__X2N_extensionValue_u {
+			X2N_ABSInformation_t	 ABSInformation;
+			X2N_InvokeIndication_t	 InvokeIndication;
+			X2N_SubframeAssignment_t	 SubframeAssignment;
+			X2N_ExtendedULInterferenceOverloadInfo_t	 ExtendedULInterferenceOverloadInfo;
+			X2N_CoMPInformation_t	 CoMPInformation;
+			X2N_DynamicDLTransmissionInformation_t	 DynamicDLTransmissionInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellInformation_Item_ExtIEs_t;
+typedef struct X2N_ServedCellsToModify_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedCellsToModify_Item_ExtIEs__extensionValue {
+		X2N_ServedCellsToModify_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ServedCellsToModify_Item_ExtIEs__X2N_extensionValue_u {
+			X2N_DeactivationIndication_t	 DeactivationIndication;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToModify_Item_ExtIEs_t;
+typedef struct X2N_CellToReport_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellToReport_Item_ExtIEs__extensionValue {
+		X2N_CellToReport_Item_ExtIEs__extensionValue_PR present;
+		union X2N_CellToReport_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellToReport_Item_ExtIEs_t;
+typedef struct X2N_MeasurementInitiationResult_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue {
+		X2N_MeasurementInitiationResult_Item_ExtIEs__extensionValue_PR present;
+		union X2N_MeasurementInitiationResult_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementInitiationResult_Item_ExtIEs_t;
+typedef struct X2N_MeasurementFailureCause_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue {
+		X2N_MeasurementFailureCause_Item_ExtIEs__extensionValue_PR present;
+		union X2N_MeasurementFailureCause_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementFailureCause_Item_ExtIEs_t;
+typedef struct X2N_CompleteFailureCauseInformation_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue {
+		X2N_CompleteFailureCauseInformation_Item_ExtIEs__extensionValue_PR present;
+		union X2N_CompleteFailureCauseInformation_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompleteFailureCauseInformation_Item_ExtIEs_t;
+typedef struct X2N_CellMeasurementResult_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellMeasurementResult_Item_ExtIEs__extensionValue {
+		X2N_CellMeasurementResult_Item_ExtIEs__extensionValue_PR present;
+		union X2N_CellMeasurementResult_Item_ExtIEs__X2N_extensionValue_u {
+			X2N_CompositeAvailableCapacityGroup_t	 CompositeAvailableCapacityGroup;
+			X2N_ABS_Status_t	 ABS_Status;
+			X2N_RSRPMRList_t	 RSRPMRList;
+			X2N_CSIReportList_t	 CSIReportList;
+			X2N_CellReportingIndicator_t	 CellReportingIndicator;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellMeasurementResult_Item_ExtIEs_t;
+typedef struct X2N_ServedCellsToActivate_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue {
+		X2N_ServedCellsToActivate_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ServedCellsToActivate_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToActivate_Item_ExtIEs_t;
+typedef struct X2N_ActivatedCellList_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ActivatedCellList_Item_ExtIEs__extensionValue {
+		X2N_ActivatedCellList_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ActivatedCellList_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedCellList_Item_ExtIEs_t;
+typedef struct X2N_RNL_Header_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RNL_Header_Item_ExtIEs__extensionValue {
+		X2N_RNL_Header_Item_ExtIEs__extensionValue_PR present;
+		union X2N_RNL_Header_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RNL_Header_Item_ExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs__X2N_extensionValue_u {
+			X2N_Correlation_ID_t	 Correlation_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_t;
+typedef struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue {
+		X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__extensionValue_PR present;
+		union X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_t;
+typedef struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue {
+		X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR present;
+		union X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_t;
+typedef struct X2N_UE_ContextInformationSeNBModReqExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue {
+		X2N_UE_ContextInformationSeNBModReqExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextInformationSeNBModReqExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformationSeNBModReqExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+			X2N_Correlation_ID_t	 Correlation_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_t;
+typedef struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue {
+		X2N_E_RABs_SubjectToCounterCheckItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_SubjectToCounterCheckItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToCounterCheckItemExtIEs_t;
+typedef struct X2N_UE_ContextInformationRetrieve_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue {
+		X2N_UE_ContextInformationRetrieve_ExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextInformationRetrieve_ExtIEs__X2N_extensionValue_u {
+			X2N_UESidelinkAggregateMaximumBitRate_t	 UESidelinkAggregateMaximumBitRate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformationRetrieve_ExtIEs_t;
+typedef struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs__X2N_extensionValue_u {
+			X2N_GTPtunnelEndpoint_t	 GTPtunnelEndpoint;
+			X2N_DL_Forwarding_t	 DL_Forwarding;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_RLCMode_t	 RLCMode;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+			X2N_DuplicationActivation_t	 DuplicationActivation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_LCID_t	 LCID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue {
+		X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__extensionValue_PR present;
+		union X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_t;
+typedef struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue {
+		X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__extensionValue_PR present;
+		union X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_t;
+typedef struct X2N_UE_ContextInformationSgNBModReqExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue {
+		X2N_UE_ContextInformationSgNBModReqExtIEs__extensionValue_PR present;
+		union X2N_UE_ContextInformationSgNBModReqExtIEs__X2N_extensionValue_u {
+			X2N_SubscriberProfileIDforRFP_t	 SubscriberProfileIDforRFP;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformationSgNBModReqExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_RLCMode_t	 RLCMode;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+			X2N_DuplicationActivation_t	 DuplicationActivation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_RLC_Status_t	 RLC_Status;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+			X2N_GTPtunnelEndpoint_t	 GTPtunnelEndpoint;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_LCID_t	 LCID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_GTPtunnelEndpoint_t	 GTPtunnelEndpoint;
+			X2N_RLC_Status_t	 RLC_Status;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs__X2N_extensionValue_u {
+			X2N_RLCMode_t	 RLCMode;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+			X2N_NewDRBIDrequest_t	 NewDRBIDrequest;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_RLC_Status_t	 RLC_Status;
+			X2N_LCID_t	 LCID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_t;
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+			X2N_PDCPSnLength_t	 PDCPSnLength;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue {
+		X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue {
+		X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_t;
+typedef struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue {
+		X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__extensionValue_PR present;
+		union X2N_ServedEUTRAcellsENDCX2Management_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_t;
+typedef struct X2N_En_gNBServedCells_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNBServedCells_ExtIEs__extensionValue {
+		X2N_En_gNBServedCells_ExtIEs__extensionValue_PR present;
+		union X2N_En_gNBServedCells_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNBServedCells_ExtIEs_t;
+typedef struct X2N_ServedNRCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedNRCell_Information_ExtIEs__extensionValue {
+		X2N_ServedNRCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_ServedNRCell_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCell_Information_ExtIEs_t;
+typedef struct X2N_FDD_InfoServedNRCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue {
+		X2N_FDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_FDD_InfoServedNRCell_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_InfoServedNRCell_Information_ExtIEs_t;
+typedef struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue {
+		X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_t;
+typedef struct X2N_TDD_InfoServedNRCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue {
+		X2N_TDD_InfoServedNRCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_TDD_InfoServedNRCell_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_InfoServedNRCell_Information_ExtIEs_t;
+typedef struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue {
+		X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_t;
+typedef struct X2N_NRNeighbour_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_NRNeighbour_Information_ExtIEs__extensionValue {
+		X2N_NRNeighbour_Information_ExtIEs__extensionValue_PR present;
+		union X2N_NRNeighbour_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRNeighbour_Information_ExtIEs_t;
+typedef struct X2N_Limited_list_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_Limited_list_ExtIEs__extensionValue {
+		X2N_Limited_list_ExtIEs__extensionValue_PR present;
+		union X2N_Limited_list_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Limited_list_ExtIEs_t;
+typedef struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue {
+		X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__extensionValue_PR present;
+		union X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_t;
+typedef struct X2N_ServedNRCellsToModify_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue {
+		X2N_ServedNRCellsToModify_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ServedNRCellsToModify_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCellsToModify_Item_ExtIEs_t;
+typedef struct X2N_ServedNRCellsToActivate_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue {
+		X2N_ServedNRCellsToActivate_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ServedNRCellsToActivate_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCellsToActivate_Item_ExtIEs_t;
+typedef struct X2N_ActivatedNRCellList_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue {
+		X2N_ActivatedNRCellList_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ActivatedNRCellList_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ActivatedNRCellList_Item_ExtIEs_t;
+typedef struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue {
+		X2N_E_RABs_DataForwardingAddress_ItemExtIEs__extensionValue_PR present;
+		union X2N_E_RABs_DataForwardingAddress_ItemExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_DataForwardingAddress_ItemExtIEs_t;
+typedef struct X2N_ABSInformationFDD_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ABSInformationFDD_ExtIEs__extensionValue {
+		X2N_ABSInformationFDD_ExtIEs__extensionValue_PR present;
+		union X2N_ABSInformationFDD_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABSInformationFDD_ExtIEs_t;
+typedef struct X2N_ABSInformationTDD_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ABSInformationTDD_ExtIEs__extensionValue {
+		X2N_ABSInformationTDD_ExtIEs__extensionValue_PR present;
+		union X2N_ABSInformationTDD_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABSInformationTDD_ExtIEs_t;
+typedef struct X2N_ABS_Status_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ABS_Status_ExtIEs__extensionValue {
+		X2N_ABS_Status_ExtIEs__extensionValue_PR present;
+		union X2N_ABS_Status_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ABS_Status_ExtIEs_t;
+typedef struct X2N_AdditionalSpecialSubframe_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue {
+		X2N_AdditionalSpecialSubframe_Info_ExtIEs__extensionValue_PR present;
+		union X2N_AdditionalSpecialSubframe_Info_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AdditionalSpecialSubframe_Info_ExtIEs_t;
+typedef struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue {
+		X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__extensionValue_PR present;
+		union X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_t;
+typedef struct X2N_AllocationAndRetentionPriority_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue {
+		X2N_AllocationAndRetentionPriority_ExtIEs__extensionValue_PR present;
+		union X2N_AllocationAndRetentionPriority_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AllocationAndRetentionPriority_ExtIEs_t;
+typedef struct X2N_AS_SecurityInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_AS_SecurityInformation_ExtIEs__extensionValue {
+		X2N_AS_SecurityInformation_ExtIEs__extensionValue_PR present;
+		union X2N_AS_SecurityInformation_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_AS_SecurityInformation_ExtIEs_t;
+typedef struct X2N_BluetoothMeasurementConfiguration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue {
+		X2N_BluetoothMeasurementConfiguration_ExtIEs__extensionValue_PR present;
+		union X2N_BluetoothMeasurementConfiguration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BluetoothMeasurementConfiguration_ExtIEs_t;
+typedef struct X2N_CellBasedMDT_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellBasedMDT_ExtIEs__extensionValue {
+		X2N_CellBasedMDT_ExtIEs__extensionValue_PR present;
+		union X2N_CellBasedMDT_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellBasedMDT_ExtIEs_t;
+typedef struct X2N_CellBasedQMC_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellBasedQMC_ExtIEs__extensionValue {
+		X2N_CellBasedQMC_ExtIEs__extensionValue_PR present;
+		union X2N_CellBasedQMC_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellBasedQMC_ExtIEs_t;
+typedef struct X2N_CellReplacingInfo_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellReplacingInfo_ExtIEs__extensionValue {
+		X2N_CellReplacingInfo_ExtIEs__extensionValue_PR present;
+		union X2N_CellReplacingInfo_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellReplacingInfo_ExtIEs_t;
+typedef struct X2N_CellType_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellType_ExtIEs__extensionValue {
+		X2N_CellType_ExtIEs__extensionValue_PR present;
+		union X2N_CellType_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellType_ExtIEs_t;
+typedef struct X2N_CNTypeRestrictionsItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue {
+		X2N_CNTypeRestrictionsItem_ExtIEs__extensionValue_PR present;
+		union X2N_CNTypeRestrictionsItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CNTypeRestrictionsItem_ExtIEs_t;
+typedef struct X2N_CoMPHypothesisSetItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue {
+		X2N_CoMPHypothesisSetItem_ExtIEs__extensionValue_PR present;
+		union X2N_CoMPHypothesisSetItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPHypothesisSetItem_ExtIEs_t;
+typedef struct X2N_CoMPInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CoMPInformation_ExtIEs__extensionValue {
+		X2N_CoMPInformation_ExtIEs__extensionValue_PR present;
+		union X2N_CoMPInformation_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformation_ExtIEs_t;
+typedef struct X2N_CoMPInformationItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CoMPInformationItem_ExtIEs__extensionValue {
+		X2N_CoMPInformationItem_ExtIEs__extensionValue_PR present;
+		union X2N_CoMPInformationItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformationItem_ExtIEs_t;
+typedef struct X2N_CoMPInformationStartTime_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CoMPInformationStartTime_ExtIEs__extensionValue {
+		X2N_CoMPInformationStartTime_ExtIEs__extensionValue_PR present;
+		union X2N_CoMPInformationStartTime_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CoMPInformationStartTime_ExtIEs_t;
+typedef struct X2N_CompositeAvailableCapacity_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CompositeAvailableCapacity_ExtIEs__extensionValue {
+		X2N_CompositeAvailableCapacity_ExtIEs__extensionValue_PR present;
+		union X2N_CompositeAvailableCapacity_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompositeAvailableCapacity_ExtIEs_t;
+typedef struct X2N_CompositeAvailableCapacityGroup_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue {
+		X2N_CompositeAvailableCapacityGroup_ExtIEs__extensionValue_PR present;
+		union X2N_CompositeAvailableCapacityGroup_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompositeAvailableCapacityGroup_ExtIEs_t;
+typedef struct X2N_COUNTvalue_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_COUNTvalue_ExtIEs__extensionValue {
+		X2N_COUNTvalue_ExtIEs__extensionValue_PR present;
+		union X2N_COUNTvalue_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTvalue_ExtIEs_t;
+typedef struct X2N_COUNTValueExtended_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_COUNTValueExtended_ExtIEs__extensionValue {
+		X2N_COUNTValueExtended_ExtIEs__extensionValue_PR present;
+		union X2N_COUNTValueExtended_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTValueExtended_ExtIEs_t;
+typedef struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue {
+		X2N_COUNTvaluePDCP_SNlength18_ExtIEs__extensionValue_PR present;
+		union X2N_COUNTvaluePDCP_SNlength18_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_COUNTvaluePDCP_SNlength18_ExtIEs_t;
+typedef struct X2N_CriticalityDiagnostics_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CriticalityDiagnostics_ExtIEs__extensionValue {
+		X2N_CriticalityDiagnostics_ExtIEs__extensionValue_PR present;
+		union X2N_CriticalityDiagnostics_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CriticalityDiagnostics_ExtIEs_t;
+typedef struct X2N_CriticalityDiagnostics_IE_List_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue {
+		X2N_CriticalityDiagnostics_IE_List_ExtIEs__extensionValue_PR present;
+		union X2N_CriticalityDiagnostics_IE_List_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CriticalityDiagnostics_IE_List_ExtIEs_t;
+typedef struct X2N_CSIReportList_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CSIReportList_ExtIEs__extensionValue {
+		X2N_CSIReportList_ExtIEs__extensionValue_PR present;
+		union X2N_CSIReportList_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportList_ExtIEs_t;
+typedef struct X2N_CSIReportPerCSIProcess_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue {
+		X2N_CSIReportPerCSIProcess_ExtIEs__extensionValue_PR present;
+		union X2N_CSIReportPerCSIProcess_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportPerCSIProcess_ExtIEs_t;
+typedef struct X2N_CSIReportPerCSIProcessItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue {
+		X2N_CSIReportPerCSIProcessItem_ExtIEs__extensionValue_PR present;
+		union X2N_CSIReportPerCSIProcessItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CSIReportPerCSIProcessItem_ExtIEs_t;
+typedef struct X2N_DataTrafficResourceIndication_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_DataTrafficResourceIndication_ExtIEs__extensionValue {
+		X2N_DataTrafficResourceIndication_ExtIEs__extensionValue_PR present;
+		union X2N_DataTrafficResourceIndication_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DataTrafficResourceIndication_ExtIEs_t;
+typedef struct X2N_DeliveryStatus_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_DeliveryStatus_ExtIEs__extensionValue {
+		X2N_DeliveryStatus_ExtIEs__extensionValue_PR present;
+		union X2N_DeliveryStatus_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DeliveryStatus_ExtIEs_t;
+typedef struct X2N_DynamicNAICSInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_DynamicNAICSInformation_ExtIEs__extensionValue {
+		X2N_DynamicNAICSInformation_ExtIEs__extensionValue_PR present;
+		union X2N_DynamicNAICSInformation_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DynamicNAICSInformation_ExtIEs_t;
+typedef struct X2N_ECGI_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ECGI_ExtIEs__extensionValue {
+		X2N_ECGI_ExtIEs__extensionValue_PR present;
+		union X2N_ECGI_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ECGI_ExtIEs_t;
+typedef struct X2N_EnhancedRNTP_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_EnhancedRNTP_ExtIEs__extensionValue {
+		X2N_EnhancedRNTP_ExtIEs__extensionValue_PR present;
+		union X2N_EnhancedRNTP_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EnhancedRNTP_ExtIEs_t;
+typedef struct X2N_EnhancedRNTPStartTime_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue {
+		X2N_EnhancedRNTPStartTime_ExtIEs__extensionValue_PR present;
+		union X2N_EnhancedRNTPStartTime_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EnhancedRNTPStartTime_ExtIEs_t;
+typedef struct X2N_EN_DC_ResourceConfigurationExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue {
+		X2N_EN_DC_ResourceConfigurationExtIEs__extensionValue_PR present;
+		union X2N_EN_DC_ResourceConfigurationExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EN_DC_ResourceConfigurationExtIEs_t;
+typedef struct X2N_ERABActivityNotifyItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ERABActivityNotifyItem_ExtIEs__extensionValue {
+		X2N_ERABActivityNotifyItem_ExtIEs__extensionValue_PR present;
+		union X2N_ERABActivityNotifyItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ERABActivityNotifyItem_ExtIEs_t;
+typedef struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue {
+		X2N_E_RAB_Level_QoS_Parameters_ExtIEs__extensionValue_PR present;
+		union X2N_E_RAB_Level_QoS_Parameters_ExtIEs__X2N_extensionValue_u {
+			X2N_Packet_LossRate_t	 Packet_LossRate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_Level_QoS_Parameters_ExtIEs_t;
+typedef struct X2N_E_RAB_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RAB_Item_ExtIEs__extensionValue {
+		X2N_E_RAB_Item_ExtIEs__extensionValue_PR present;
+		union X2N_E_RAB_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_Item_ExtIEs_t;
+typedef struct X2N_E_RABUsageReport_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABUsageReport_Item_ExtIEs__extensionValue {
+		X2N_E_RABUsageReport_Item_ExtIEs__extensionValue_PR present;
+		union X2N_E_RABUsageReport_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABUsageReport_Item_ExtIEs_t;
+typedef struct X2N_ExpectedUEBehaviour_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ExpectedUEBehaviour_ExtIEs__extensionValue {
+		X2N_ExpectedUEBehaviour_ExtIEs__extensionValue_PR present;
+		union X2N_ExpectedUEBehaviour_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExpectedUEBehaviour_ExtIEs_t;
+typedef struct X2N_ExpectedUEActivityBehaviour_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue {
+		X2N_ExpectedUEActivityBehaviour_ExtIEs__extensionValue_PR present;
+		union X2N_ExpectedUEActivityBehaviour_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExpectedUEActivityBehaviour_ExtIEs_t;
+typedef struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue {
+		X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__extensionValue_PR present;
+		union X2N_ExtendedULInterferenceOverloadInfo_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_t;
+typedef struct X2N_FDD_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_FDD_Info_ExtIEs__extensionValue {
+		X2N_FDD_Info_ExtIEs__extensionValue_PR present;
+		union X2N_FDD_Info_ExtIEs__X2N_extensionValue_u {
+			X2N_EARFCNExtension_t	 EARFCNExtension;
+			X2N_OffsetOfNbiotChannelNumberToEARFCN_t	 OffsetOfNbiotChannelNumberToEARFCN;
+			X2N_NRS_NSSS_PowerOffset_t	 NRS_NSSS_PowerOffset;
+			X2N_NSSS_NumOccasionDifferentPrecoder_t	 NSSS_NumOccasionDifferentPrecoder;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FDD_Info_ExtIEs_t;
+typedef struct X2N_ForbiddenTAs_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ForbiddenTAs_Item_ExtIEs__extensionValue {
+		X2N_ForbiddenTAs_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ForbiddenTAs_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenTAs_Item_ExtIEs_t;
+typedef struct X2N_ForbiddenLAs_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ForbiddenLAs_Item_ExtIEs__extensionValue {
+		X2N_ForbiddenLAs_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ForbiddenLAs_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ForbiddenLAs_Item_ExtIEs_t;
+typedef struct X2N_FreqBandNrItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_FreqBandNrItem_ExtIEs__extensionValue {
+		X2N_FreqBandNrItem_ExtIEs__extensionValue_PR present;
+		union X2N_FreqBandNrItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_FreqBandNrItem_ExtIEs_t;
+typedef struct X2N_GBR_QosInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GBR_QosInformation_ExtIEs__extensionValue {
+		X2N_GBR_QosInformation_ExtIEs__extensionValue_PR present;
+		union X2N_GBR_QosInformation_ExtIEs__X2N_extensionValue_u {
+			X2N_ExtendedBitRate_t	 ExtendedBitRate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GBR_QosInformation_ExtIEs_t;
+typedef struct X2N_GlobalENB_ID_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GlobalENB_ID_ExtIEs__extensionValue {
+		X2N_GlobalENB_ID_ExtIEs__extensionValue_PR present;
+		union X2N_GlobalENB_ID_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GlobalENB_ID_ExtIEs_t;
+typedef struct X2N_GlobalGNB_ID_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GlobalGNB_ID_ExtIEs__extensionValue {
+		X2N_GlobalGNB_ID_ExtIEs__extensionValue_PR present;
+		union X2N_GlobalGNB_ID_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GlobalGNB_ID_ExtIEs_t;
+typedef struct X2N_GTPtunnelEndpoint_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GTPtunnelEndpoint_ExtIEs__extensionValue {
+		X2N_GTPtunnelEndpoint_ExtIEs__extensionValue_PR present;
+		union X2N_GTPtunnelEndpoint_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GTPtunnelEndpoint_ExtIEs_t;
+typedef struct X2N_GU_Group_ID_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GU_Group_ID_ExtIEs__extensionValue {
+		X2N_GU_Group_ID_ExtIEs__extensionValue_PR present;
+		union X2N_GU_Group_ID_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GU_Group_ID_ExtIEs_t;
+typedef struct X2N_GUMMEI_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GUMMEI_ExtIEs__extensionValue {
+		X2N_GUMMEI_ExtIEs__extensionValue_PR present;
+		union X2N_GUMMEI_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GUMMEI_ExtIEs_t;
+typedef struct X2N_HandoverRestrictionList_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverRestrictionList_ExtIEs__extensionValue {
+		X2N_HandoverRestrictionList_ExtIEs__extensionValue_PR present;
+		union X2N_HandoverRestrictionList_ExtIEs__X2N_extensionValue_u {
+			X2N_NRrestrictioninEPSasSecondaryRAT_t	 NRrestrictioninEPSasSecondaryRAT;
+			X2N_CNTypeRestrictions_t	 CNTypeRestrictions;
+			X2N_NRrestrictionin5GS_t	 NRrestrictionin5GS;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRestrictionList_ExtIEs_t;
+typedef struct X2N_HWLoadIndicator_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HWLoadIndicator_ExtIEs__extensionValue {
+		X2N_HWLoadIndicator_ExtIEs__extensionValue_PR present;
+		union X2N_HWLoadIndicator_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HWLoadIndicator_ExtIEs_t;
+typedef struct X2N_LastVisitedEUTRANCellInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue {
+		X2N_LastVisitedEUTRANCellInformation_ExtIEs__extensionValue_PR present;
+		union X2N_LastVisitedEUTRANCellInformation_ExtIEs__X2N_extensionValue_u {
+			X2N_Time_UE_StayedInCell_EnhancedGranularity_t	 Time_UE_StayedInCell_EnhancedGranularity;
+			X2N_Cause_t	 Cause;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LastVisitedEUTRANCellInformation_ExtIEs_t;
+typedef struct X2N_LocationReportingInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_LocationReportingInformation_ExtIEs__extensionValue {
+		X2N_LocationReportingInformation_ExtIEs__extensionValue_PR present;
+		union X2N_LocationReportingInformation_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LocationReportingInformation_ExtIEs_t;
+typedef struct X2N_M1PeriodicReporting_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M1PeriodicReporting_ExtIEs__extensionValue {
+		X2N_M1PeriodicReporting_ExtIEs__extensionValue_PR present;
+		union X2N_M1PeriodicReporting_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M1PeriodicReporting_ExtIEs_t;
+typedef struct X2N_M1ThresholdEventA2_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M1ThresholdEventA2_ExtIEs__extensionValue {
+		X2N_M1ThresholdEventA2_ExtIEs__extensionValue_PR present;
+		union X2N_M1ThresholdEventA2_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M1ThresholdEventA2_ExtIEs_t;
+typedef struct X2N_M3Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M3Configuration_ExtIEs__extensionValue {
+		X2N_M3Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_M3Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M3Configuration_ExtIEs_t;
+typedef struct X2N_M4Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M4Configuration_ExtIEs__extensionValue {
+		X2N_M4Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_M4Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M4Configuration_ExtIEs_t;
+typedef struct X2N_M5Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M5Configuration_ExtIEs__extensionValue {
+		X2N_M5Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_M5Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M5Configuration_ExtIEs_t;
+typedef struct X2N_M6Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M6Configuration_ExtIEs__extensionValue {
+		X2N_M6Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_M6Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M6Configuration_ExtIEs_t;
+typedef struct X2N_M7Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_M7Configuration_ExtIEs__extensionValue {
+		X2N_M7Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_M7Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_M7Configuration_ExtIEs_t;
+typedef struct X2N_MDT_Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MDT_Configuration_ExtIEs__extensionValue {
+		X2N_MDT_Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_MDT_Configuration_ExtIEs__X2N_extensionValue_u {
+			X2N_M3Configuration_t	 M3Configuration;
+			X2N_M4Configuration_t	 M4Configuration;
+			X2N_M5Configuration_t	 M5Configuration;
+			X2N_MDT_Location_Info_t	 MDT_Location_Info;
+			X2N_MDTPLMNList_t	 MDTPLMNList;
+			X2N_M6Configuration_t	 M6Configuration;
+			X2N_M7Configuration_t	 M7Configuration;
+			X2N_BluetoothMeasurementConfiguration_t	 BluetoothMeasurementConfiguration;
+			X2N_WLANMeasurementConfiguration_t	 WLANMeasurementConfiguration;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MDT_Configuration_ExtIEs_t;
+typedef struct X2N_MeNBResourceCoordinationInformationExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue {
+		X2N_MeNBResourceCoordinationInformationExtIEs__extensionValue_PR present;
+		union X2N_MeNBResourceCoordinationInformationExtIEs__X2N_extensionValue_u {
+			X2N_NRCGI_t	 NRCGI;
+			X2N_MeNBCoordinationAssistanceInformation_t	 MeNBCoordinationAssistanceInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeNBResourceCoordinationInformationExtIEs_t;
+typedef struct X2N_MBSFN_Subframe_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue {
+		X2N_MBSFN_Subframe_Info_ExtIEs__extensionValue_PR present;
+		union X2N_MBSFN_Subframe_Info_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MBSFN_Subframe_Info_ExtIEs_t;
+typedef struct X2N_BandInfo_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_BandInfo_ExtIEs__extensionValue {
+		X2N_BandInfo_ExtIEs__extensionValue_PR present;
+		union X2N_BandInfo_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_BandInfo_ExtIEs_t;
+typedef struct X2N_SplitSRB_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SplitSRB_ExtIEs__extensionValue {
+		X2N_SplitSRB_ExtIEs__extensionValue_PR present;
+		union X2N_SplitSRB_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SplitSRB_ExtIEs_t;
+typedef struct X2N_UENRMeasurement_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UENRMeasurement_ExtIEs__extensionValue {
+		X2N_UENRMeasurement_ExtIEs__extensionValue_PR present;
+		union X2N_UENRMeasurement_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UENRMeasurement_ExtIEs_t;
+typedef struct X2N_Neighbour_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_Neighbour_Information_ExtIEs__extensionValue {
+		X2N_Neighbour_Information_ExtIEs__extensionValue_PR present;
+		union X2N_Neighbour_Information_ExtIEs__X2N_extensionValue_u {
+			X2N_TAC_t	 TAC;
+			X2N_EARFCNExtension_t	 EARFCNExtension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Neighbour_Information_ExtIEs_t;
+typedef struct X2N_NRFreqInfo_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_NRFreqInfo_ExtIEs__extensionValue {
+		X2N_NRFreqInfo_ExtIEs__extensionValue_PR present;
+		union X2N_NRFreqInfo_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRFreqInfo_ExtIEs_t;
+typedef struct X2N_NRCGI_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_NRCGI_ExtIEs__extensionValue {
+		X2N_NRCGI_ExtIEs__extensionValue_PR present;
+		union X2N_NRCGI_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRCGI_ExtIEs_t;
+typedef struct X2N_NR_TxBW_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_NR_TxBW_ExtIEs__extensionValue {
+		X2N_NR_TxBW_ExtIEs__extensionValue_PR present;
+		union X2N_NR_TxBW_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NR_TxBW_ExtIEs_t;
+typedef struct X2N_NRUESecurityCapabilities_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_NRUESecurityCapabilities_ExtIEs__extensionValue {
+		X2N_NRUESecurityCapabilities_ExtIEs__extensionValue_PR present;
+		union X2N_NRUESecurityCapabilities_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_NRUESecurityCapabilities_ExtIEs_t;
+typedef struct X2N_PRACH_Configuration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_PRACH_Configuration_ExtIEs__extensionValue {
+		X2N_PRACH_Configuration_ExtIEs__extensionValue_PR present;
+		union X2N_PRACH_Configuration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PRACH_Configuration_ExtIEs_t;
+typedef struct X2N_PLMNAreaBasedQMC_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue {
+		X2N_PLMNAreaBasedQMC_ExtIEs__extensionValue_PR present;
+		union X2N_PLMNAreaBasedQMC_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_PLMNAreaBasedQMC_ExtIEs_t;
+typedef struct X2N_ProSeAuthorized_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ProSeAuthorized_ExtIEs__extensionValue {
+		X2N_ProSeAuthorized_ExtIEs__extensionValue_PR present;
+		union X2N_ProSeAuthorized_ExtIEs__X2N_extensionValue_u {
+			X2N_ProSeUEtoNetworkRelaying_t	 ProSeUEtoNetworkRelaying;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProSeAuthorized_ExtIEs_t;
+typedef struct X2N_ProtectedEUTRAResourceIndication_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue {
+		X2N_ProtectedEUTRAResourceIndication_ExtIEs__extensionValue_PR present;
+		union X2N_ProtectedEUTRAResourceIndication_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedEUTRAResourceIndication_ExtIEs_t;
+typedef struct X2N_ProtectedFootprintTimePattern_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue {
+		X2N_ProtectedFootprintTimePattern_ExtIEs__extensionValue_PR present;
+		union X2N_ProtectedFootprintTimePattern_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedFootprintTimePattern_ExtIEs_t;
+typedef struct X2N_ProtectedResourceList_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ProtectedResourceList_Item_ExtIEs__extensionValue {
+		X2N_ProtectedResourceList_Item_ExtIEs__extensionValue_PR present;
+		union X2N_ProtectedResourceList_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtectedResourceList_Item_ExtIEs_t;
+typedef struct X2N_RadioResourceStatus_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RadioResourceStatus_ExtIEs__extensionValue {
+		X2N_RadioResourceStatus_ExtIEs__extensionValue_PR present;
+		union X2N_RadioResourceStatus_ExtIEs__X2N_extensionValue_u {
+			X2N_DL_scheduling_PDCCH_CCE_usage_t	 DL_scheduling_PDCCH_CCE_usage;
+			X2N_UL_scheduling_PDCCH_CCE_usage_t	 UL_scheduling_PDCCH_CCE_usage;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RadioResourceStatus_ExtIEs_t;
+typedef struct X2N_RelativeNarrowbandTxPower_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue {
+		X2N_RelativeNarrowbandTxPower_ExtIEs__extensionValue_PR present;
+		union X2N_RelativeNarrowbandTxPower_ExtIEs__X2N_extensionValue_u {
+			X2N_EnhancedRNTP_t	 EnhancedRNTP;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RelativeNarrowbandTxPower_ExtIEs_t;
+typedef struct X2N_ReservedSubframePattern_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ReservedSubframePattern_ExtIEs__extensionValue {
+		X2N_ReservedSubframePattern_ExtIEs__extensionValue_PR present;
+		union X2N_ReservedSubframePattern_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ReservedSubframePattern_ExtIEs_t;
+typedef struct X2N_RLC_Status_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RLC_Status_ExtIEs__extensionValue {
+		X2N_RLC_Status_ExtIEs__extensionValue_PR present;
+		union X2N_RLC_Status_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RLC_Status_ExtIEs_t;
+typedef struct X2N_RSRPMeasurementResult_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RSRPMeasurementResult_ExtIEs__extensionValue {
+		X2N_RSRPMeasurementResult_ExtIEs__extensionValue_PR present;
+		union X2N_RSRPMeasurementResult_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RSRPMeasurementResult_ExtIEs_t;
+typedef struct X2N_RSRPMRList_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RSRPMRList_ExtIEs__extensionValue {
+		X2N_RSRPMRList_ExtIEs__extensionValue_PR present;
+		union X2N_RSRPMRList_ExtIEs__X2N_extensionValue_u {
+			X2N_UEID_t	 UEID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RSRPMRList_ExtIEs_t;
+typedef struct X2N_S1TNLLoadIndicator_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_S1TNLLoadIndicator_ExtIEs__extensionValue {
+		X2N_S1TNLLoadIndicator_ExtIEs__extensionValue_PR present;
+		union X2N_S1TNLLoadIndicator_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_S1TNLLoadIndicator_ExtIEs_t;
+typedef struct X2N_SecondaryRATUsageReport_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue {
+		X2N_SecondaryRATUsageReport_Item_ExtIEs__extensionValue_PR present;
+		union X2N_SecondaryRATUsageReport_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATUsageReport_Item_ExtIEs_t;
+typedef struct X2N_ServedCell_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedCell_ExtIEs__extensionValue {
+		X2N_ServedCell_ExtIEs__extensionValue_PR present;
+		union X2N_ServedCell_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCell_ExtIEs_t;
+typedef struct X2N_ServedCell_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ServedCell_Information_ExtIEs__extensionValue {
+		X2N_ServedCell_Information_ExtIEs__extensionValue_PR present;
+		union X2N_ServedCell_Information_ExtIEs__X2N_extensionValue_u {
+			X2N_Number_of_Antennaports_t	 Number_of_Antennaports;
+			X2N_PRACH_Configuration_t	 PRACH_Configuration;
+			X2N_MBSFN_Subframe_Infolist_t	 MBSFN_Subframe_Infolist;
+			X2N_CSG_Id_t	 CSG_Id;
+			X2N_MBMS_Service_Area_Identity_List_t	 MBMS_Service_Area_Identity_List;
+			X2N_MultibandInfoList_t	 MultibandInfoList;
+			X2N_FreqBandIndicatorPriority_t	 FreqBandIndicatorPriority;
+			X2N_BandwidthReducedSI_t	 BandwidthReducedSI;
+			X2N_ProtectedEUTRAResourceIndication_t	 ProtectedEUTRAResourceIndication;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCell_Information_ExtIEs_t;
+typedef struct X2N_SgNBResourceCoordinationInformationExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue {
+		X2N_SgNBResourceCoordinationInformationExtIEs__extensionValue_PR present;
+		union X2N_SgNBResourceCoordinationInformationExtIEs__X2N_extensionValue_u {
+			X2N_ECGI_t	 ECGI;
+			X2N_SgNBCoordinationAssistanceInformation_t	 SgNBCoordinationAssistanceInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBResourceCoordinationInformationExtIEs_t;
+typedef struct X2N_SpecialSubframe_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SpecialSubframe_Info_ExtIEs__extensionValue {
+		X2N_SpecialSubframe_Info_ExtIEs__extensionValue_PR present;
+		union X2N_SpecialSubframe_Info_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SpecialSubframe_Info_ExtIEs_t;
+typedef struct X2N_SubbandCQI_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SubbandCQI_ExtIEs__extensionValue {
+		X2N_SubbandCQI_ExtIEs__extensionValue_PR present;
+		union X2N_SubbandCQI_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQI_ExtIEs_t;
+typedef struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue {
+		X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__extensionValue_PR present;
+		union X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_t;
+typedef struct X2N_ScheduledCommunicationTime_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ScheduledCommunicationTime_ExtIEs__extensionValue {
+		X2N_ScheduledCommunicationTime_ExtIEs__extensionValue_PR present;
+		union X2N_ScheduledCommunicationTime_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ScheduledCommunicationTime_ExtIEs_t;
+typedef struct X2N_SubbandCQIItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SubbandCQIItem_ExtIEs__extensionValue {
+		X2N_SubbandCQIItem_ExtIEs__extensionValue_PR present;
+		union X2N_SubbandCQIItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQIItem_ExtIEs_t;
+typedef struct X2N_SULInformation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SULInformation_ExtIEs__extensionValue {
+		X2N_SULInformation_ExtIEs__extensionValue_PR present;
+		union X2N_SULInformation_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SULInformation_ExtIEs_t;
+typedef struct X2N_SupportedSULFreqBandItem_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue {
+		X2N_SupportedSULFreqBandItem_ExtIEs__extensionValue_PR present;
+		union X2N_SupportedSULFreqBandItem_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SupportedSULFreqBandItem_ExtIEs_t;
+typedef struct X2N_TABasedMDT_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TABasedMDT_ExtIEs__extensionValue {
+		X2N_TABasedMDT_ExtIEs__extensionValue_PR present;
+		union X2N_TABasedMDT_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TABasedMDT_ExtIEs_t;
+typedef struct X2N_TAIBasedMDT_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TAIBasedMDT_ExtIEs__extensionValue {
+		X2N_TAIBasedMDT_ExtIEs__extensionValue_PR present;
+		union X2N_TAIBasedMDT_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIBasedMDT_ExtIEs_t;
+typedef struct X2N_TAI_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TAI_Item_ExtIEs__extensionValue {
+		X2N_TAI_Item_ExtIEs__extensionValue_PR present;
+		union X2N_TAI_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAI_Item_ExtIEs_t;
+typedef struct X2N_TABasedQMC_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TABasedQMC_ExtIEs__extensionValue {
+		X2N_TABasedQMC_ExtIEs__extensionValue_PR present;
+		union X2N_TABasedQMC_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TABasedQMC_ExtIEs_t;
+typedef struct X2N_TAIBasedQMC_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TAIBasedQMC_ExtIEs__extensionValue {
+		X2N_TAIBasedQMC_ExtIEs__extensionValue_PR present;
+		union X2N_TAIBasedQMC_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIBasedQMC_ExtIEs_t;
+typedef struct X2N_TDD_Info_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TDD_Info_ExtIEs__extensionValue {
+		X2N_TDD_Info_ExtIEs__extensionValue_PR present;
+		union X2N_TDD_Info_ExtIEs__X2N_extensionValue_u {
+			X2N_AdditionalSpecialSubframe_Info_t	 AdditionalSpecialSubframe_Info;
+			X2N_EARFCNExtension_t	 EARFCNExtension;
+			X2N_AdditionalSpecialSubframeExtension_Info_t	 AdditionalSpecialSubframeExtension_Info;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_Info_ExtIEs_t;
+typedef struct X2N_TraceActivation_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_TraceActivation_ExtIEs__extensionValue {
+		X2N_TraceActivation_ExtIEs__extensionValue_PR present;
+		union X2N_TraceActivation_ExtIEs__X2N_extensionValue_u {
+			X2N_MDT_Configuration_t	 MDT_Configuration;
+			X2N_UEAppLayerMeasConfig_t	 UEAppLayerMeasConfig;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TraceActivation_ExtIEs_t;
+typedef struct X2N_Tunnel_Information_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_Tunnel_Information_ExtIEs__extensionValue {
+		X2N_Tunnel_Information_ExtIEs__extensionValue_PR present;
+		union X2N_Tunnel_Information_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Tunnel_Information_ExtIEs_t;
+typedef struct X2N_UEAggregate_MaximumBitrate_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue {
+		X2N_UEAggregate_MaximumBitrate_ExtIEs__extensionValue_PR present;
+		union X2N_UEAggregate_MaximumBitrate_ExtIEs__X2N_extensionValue_u {
+			X2N_ExtendedBitRate_t	 ExtendedBitRate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEAggregate_MaximumBitrate_ExtIEs_t;
+typedef struct X2N_UEAppLayerMeasConfig_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue {
+		X2N_UEAppLayerMeasConfig_ExtIEs__extensionValue_PR present;
+		union X2N_UEAppLayerMeasConfig_ExtIEs__X2N_extensionValue_u {
+			X2N_ServiceType_t	 ServiceType;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEAppLayerMeasConfig_ExtIEs_t;
+typedef struct X2N_UESecurityCapabilities_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UESecurityCapabilities_ExtIEs__extensionValue {
+		X2N_UESecurityCapabilities_ExtIEs__extensionValue_PR present;
+		union X2N_UESecurityCapabilities_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UESecurityCapabilities_ExtIEs_t;
+typedef struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue {
+		X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__extensionValue_PR present;
+		union X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_t;
+typedef struct X2N_UEsToBeResetList_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UEsToBeResetList_Item_ExtIEs__extensionValue {
+		X2N_UEsToBeResetList_Item_ExtIEs__extensionValue_PR present;
+		union X2N_UEsToBeResetList_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEsToBeResetList_Item_ExtIEs_t;
+typedef struct X2N_ULandDLSharing_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ULandDLSharing_ExtIEs__extensionValue {
+		X2N_ULandDLSharing_ExtIEs__extensionValue_PR present;
+		union X2N_ULandDLSharing_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULandDLSharing_ExtIEs_t;
+typedef struct X2N_ULConfiguration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ULConfiguration_ExtIEs__extensionValue {
+		X2N_ULConfiguration_ExtIEs__extensionValue_PR present;
+		union X2N_ULConfiguration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULConfiguration_ExtIEs_t;
+typedef struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue {
+		X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__extensionValue_PR present;
+		union X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_t;
+typedef struct X2N_ULOnlySharing_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ULOnlySharing_ExtIEs__extensionValue {
+		X2N_ULOnlySharing_ExtIEs__extensionValue_PR present;
+		union X2N_ULOnlySharing_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULOnlySharing_ExtIEs_t;
+typedef struct X2N_UsableABSInformationFDD_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UsableABSInformationFDD_ExtIEs__extensionValue {
+		X2N_UsableABSInformationFDD_ExtIEs__extensionValue_PR present;
+		union X2N_UsableABSInformationFDD_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UsableABSInformationFDD_ExtIEs_t;
+typedef struct X2N_UsableABSInformationTDD_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UsableABSInformationTDD_ExtIEs__extensionValue {
+		X2N_UsableABSInformationTDD_ExtIEs__extensionValue_PR present;
+		union X2N_UsableABSInformationTDD_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UsableABSInformationTDD_ExtIEs_t;
+typedef struct X2N_V2XServicesAuthorized_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_V2XServicesAuthorized_ExtIEs__extensionValue {
+		X2N_V2XServicesAuthorized_ExtIEs__extensionValue_PR present;
+		union X2N_V2XServicesAuthorized_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_V2XServicesAuthorized_ExtIEs_t;
+typedef struct X2N_WidebandCQI_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_WidebandCQI_ExtIEs__extensionValue {
+		X2N_WidebandCQI_ExtIEs__extensionValue_PR present;
+		union X2N_WidebandCQI_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WidebandCQI_ExtIEs_t;
+typedef struct X2N_WLANMeasurementConfiguration_ExtIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue {
+		X2N_WLANMeasurementConfiguration_ExtIEs__extensionValue_PR present;
+		union X2N_WLANMeasurementConfiguration_ExtIEs__X2N_extensionValue_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} extensionValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WLANMeasurementConfiguration_ExtIEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformation_ExtIEs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformation_ExtIEs_1[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ItemExtIEs_specs_5;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ItemExtIEs_5[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_specs_9;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSeNB_ItemExtIEs_9[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtWT_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtWT_ItemExtIEs_specs_13;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtWT_ItemExtIEs_13[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_specs_17;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSgNB_ItemExtIEs_17[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_Item_ExtIEs_specs_21;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_Item_ExtIEs_21[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_specs_25;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemExtIEs_25[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellInformation_Item_ExtIEs_specs_29;
+extern asn_TYPE_member_t asn_MBR_X2N_CellInformation_Item_ExtIEs_29[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToModify_Item_ExtIEs_specs_33;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCellsToModify_Item_ExtIEs_33[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellToReport_Item_ExtIEs_specs_37;
+extern asn_TYPE_member_t asn_MBR_X2N_CellToReport_Item_ExtIEs_37[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementInitiationResult_Item_ExtIEs_specs_41;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_Item_ExtIEs_41[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementFailureCause_Item_ExtIEs_specs_45;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_Item_ExtIEs_45[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_Item_ExtIEs_specs_49;
+extern asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_Item_ExtIEs_49[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellMeasurementResult_Item_ExtIEs_specs_53;
+extern asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_Item_ExtIEs_53[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToActivate_Item_ExtIEs_specs_57;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCellsToActivate_Item_ExtIEs_57[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedCellList_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedCellList_Item_ExtIEs_specs_61;
+extern asn_TYPE_member_t asn_MBR_X2N_ActivatedCellList_Item_ExtIEs_61[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RNL_Header_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RNL_Header_Item_ExtIEs_specs_65;
+extern asn_TYPE_member_t asn_MBR_X2N_RNL_Header_Item_ExtIEs_65[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_specs_69;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_SCG_BearerExtIEs_69[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_specs_73;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_Item_Split_BearerExtIEs_73[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_specs_77;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs_77[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_specs_81;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs_81[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_specs_85;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItemExtIEs_85[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_specs_89;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs_89[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSeNBModReqExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationSeNBModReqExtIEs_specs_93;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationSeNBModReqExtIEs_93[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_specs_97;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs_97[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_specs_101;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs_101[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_specs_105;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs_105[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_specs_109;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs_109[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_specs_113;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs_113[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_specs_117;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs_117[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_specs_121;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs_121[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_specs_125;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs_125[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_specs_129;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs_129[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_specs_133;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs_133[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_specs_137;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs_137[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_specs_141;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs_141[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_specs_145;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemExtIEs_145[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_specs_149;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs_149[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_specs_153;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs_153[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_specs_157;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs_157[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_specs_161;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs_161[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_specs_165;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemExtIEs_165[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationRetrieve_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationRetrieve_ExtIEs_specs_169;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationRetrieve_ExtIEs_169[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_specs_173;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemExtIEs_173[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_specs_177;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs_177[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_specs_181;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs_181[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_specs_185;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs_185[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_specs_189;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs_189[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_specs_193;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs_193[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_specs_197;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs_197[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_specs_201;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItemExtIEs_201[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_specs_205;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs_205[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSgNBModReqExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationSgNBModReqExtIEs_specs_209;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationSgNBModReqExtIEs_209[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_specs_213;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs_213[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_217;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs_217[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_221;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_221[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_specs_225;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemExtIEs_225[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_229;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs_229[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_233;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_233[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_specs_237;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs_237[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_specs_241;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs_241[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_specs_245;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs_245[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_specs_249;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs_249[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_253;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs_253[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_257;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_257[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_specs_261;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs_261[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_265;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs_265[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_269;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_269[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_specs_273;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs_273[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_specs_277;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs_277[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_specs_281;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs_281[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_specs_285;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs_285[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_specs_289;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs_289[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_specs_293;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs_293[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_specs_297;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs_297[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_specs_301;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs_301[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_specs_305;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs_305[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_specs_309;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs_309[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_specs_313;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs_313[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_specs_317;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs_317[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_specs_321;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs_321[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_specs_325;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs_325[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_specs_329;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs_329[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_specs_333;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs_333[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_specs_337;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs_337[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_specs_341;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs_341[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_specs_345;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs_345[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_specs_349;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs_349[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_specs_353;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs_353[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_specs_357;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs_357[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_specs_361;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsENDCX2Management_ExtIEs_361[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNBServedCells_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNBServedCells_ExtIEs_specs_365;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNBServedCells_ExtIEs_365[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCell_Information_ExtIEs_specs_369;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCell_Information_ExtIEs_369[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoServedNRCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoServedNRCell_Information_ExtIEs_specs_373;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_InfoServedNRCell_Information_ExtIEs_373[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_377;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_InfoNeighbourServedNRCell_Information_ExtIEs_377[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoServedNRCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoServedNRCell_Information_ExtIEs_specs_381;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_InfoServedNRCell_Information_ExtIEs_381[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_specs_385;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_ExtIEs_385[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRNeighbour_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRNeighbour_Information_ExtIEs_specs_389;
+extern asn_TYPE_member_t asn_MBR_X2N_NRNeighbour_Information_ExtIEs_389[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Limited_list_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_Limited_list_ExtIEs_specs_393;
+extern asn_TYPE_member_t asn_MBR_X2N_Limited_list_ExtIEs_393[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_specs_397;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs_397[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToModify_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToModify_Item_ExtIEs_specs_401;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToModify_Item_ExtIEs_401[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToActivate_Item_ExtIEs_specs_405;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToActivate_Item_ExtIEs_405[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ActivatedNRCellList_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ActivatedNRCellList_Item_ExtIEs_specs_409;
+extern asn_TYPE_member_t asn_MBR_X2N_ActivatedNRCellList_Item_ExtIEs_409[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_specs_413;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemExtIEs_413[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationFDD_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationFDD_ExtIEs_specs_417;
+extern asn_TYPE_member_t asn_MBR_X2N_ABSInformationFDD_ExtIEs_417[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABSInformationTDD_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ABSInformationTDD_ExtIEs_specs_421;
+extern asn_TYPE_member_t asn_MBR_X2N_ABSInformationTDD_ExtIEs_421[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ABS_Status_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ABS_Status_ExtIEs_specs_425;
+extern asn_TYPE_member_t asn_MBR_X2N_ABS_Status_ExtIEs_425[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframe_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframe_Info_ExtIEs_specs_429;
+extern asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframe_Info_ExtIEs_429[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_specs_433;
+extern asn_TYPE_member_t asn_MBR_X2N_AdditionalSpecialSubframeExtension_Info_ExtIEs_433[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AllocationAndRetentionPriority_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AllocationAndRetentionPriority_ExtIEs_specs_437;
+extern asn_TYPE_member_t asn_MBR_X2N_AllocationAndRetentionPriority_ExtIEs_437[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_AS_SecurityInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_AS_SecurityInformation_ExtIEs_specs_441;
+extern asn_TYPE_member_t asn_MBR_X2N_AS_SecurityInformation_ExtIEs_441[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BluetoothMeasurementConfiguration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_BluetoothMeasurementConfiguration_ExtIEs_specs_445;
+extern asn_TYPE_member_t asn_MBR_X2N_BluetoothMeasurementConfiguration_ExtIEs_445[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedMDT_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedMDT_ExtIEs_specs_449;
+extern asn_TYPE_member_t asn_MBR_X2N_CellBasedMDT_ExtIEs_449[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellBasedQMC_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellBasedQMC_ExtIEs_specs_453;
+extern asn_TYPE_member_t asn_MBR_X2N_CellBasedQMC_ExtIEs_453[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellReplacingInfo_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellReplacingInfo_ExtIEs_specs_457;
+extern asn_TYPE_member_t asn_MBR_X2N_CellReplacingInfo_ExtIEs_457[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellType_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellType_ExtIEs_specs_461;
+extern asn_TYPE_member_t asn_MBR_X2N_CellType_ExtIEs_461[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CNTypeRestrictionsItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CNTypeRestrictionsItem_ExtIEs_specs_465;
+extern asn_TYPE_member_t asn_MBR_X2N_CNTypeRestrictionsItem_ExtIEs_465[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPHypothesisSetItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPHypothesisSetItem_ExtIEs_specs_469;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPHypothesisSetItem_ExtIEs_469[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformation_ExtIEs_specs_473;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPInformation_ExtIEs_473[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformationItem_ExtIEs_specs_477;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPInformationItem_ExtIEs_477[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CoMPInformationStartTime_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CoMPInformationStartTime_ExtIEs_specs_481;
+extern asn_TYPE_member_t asn_MBR_X2N_CoMPInformationStartTime_ExtIEs_481[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacity_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacity_ExtIEs_specs_485;
+extern asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacity_ExtIEs_485[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompositeAvailableCapacityGroup_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CompositeAvailableCapacityGroup_ExtIEs_specs_489;
+extern asn_TYPE_member_t asn_MBR_X2N_CompositeAvailableCapacityGroup_ExtIEs_489[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvalue_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvalue_ExtIEs_specs_493;
+extern asn_TYPE_member_t asn_MBR_X2N_COUNTvalue_ExtIEs_493[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTValueExtended_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTValueExtended_ExtIEs_specs_497;
+extern asn_TYPE_member_t asn_MBR_X2N_COUNTValueExtended_ExtIEs_497[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_COUNTvaluePDCP_SNlength18_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_specs_501;
+extern asn_TYPE_member_t asn_MBR_X2N_COUNTvaluePDCP_SNlength18_ExtIEs_501[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CriticalityDiagnostics_ExtIEs_specs_505;
+extern asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_ExtIEs_505[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CriticalityDiagnostics_IE_List_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CriticalityDiagnostics_IE_List_ExtIEs_specs_509;
+extern asn_TYPE_member_t asn_MBR_X2N_CriticalityDiagnostics_IE_List_ExtIEs_509[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportList_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportList_ExtIEs_specs_513;
+extern asn_TYPE_member_t asn_MBR_X2N_CSIReportList_ExtIEs_513[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcess_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportPerCSIProcess_ExtIEs_specs_517;
+extern asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcess_ExtIEs_517[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CSIReportPerCSIProcessItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CSIReportPerCSIProcessItem_ExtIEs_specs_521;
+extern asn_TYPE_member_t asn_MBR_X2N_CSIReportPerCSIProcessItem_ExtIEs_521[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DataTrafficResourceIndication_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DataTrafficResourceIndication_ExtIEs_specs_525;
+extern asn_TYPE_member_t asn_MBR_X2N_DataTrafficResourceIndication_ExtIEs_525[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DeliveryStatus_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DeliveryStatus_ExtIEs_specs_529;
+extern asn_TYPE_member_t asn_MBR_X2N_DeliveryStatus_ExtIEs_529[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DynamicNAICSInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DynamicNAICSInformation_ExtIEs_specs_533;
+extern asn_TYPE_member_t asn_MBR_X2N_DynamicNAICSInformation_ExtIEs_533[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ECGI_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ECGI_ExtIEs_specs_537;
+extern asn_TYPE_member_t asn_MBR_X2N_ECGI_ExtIEs_537[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTP_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTP_ExtIEs_specs_541;
+extern asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTP_ExtIEs_541[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EnhancedRNTPStartTime_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EnhancedRNTPStartTime_ExtIEs_specs_545;
+extern asn_TYPE_member_t asn_MBR_X2N_EnhancedRNTPStartTime_ExtIEs_545[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EN_DC_ResourceConfigurationExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EN_DC_ResourceConfigurationExtIEs_specs_549;
+extern asn_TYPE_member_t asn_MBR_X2N_EN_DC_ResourceConfigurationExtIEs_549[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ERABActivityNotifyItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ERABActivityNotifyItem_ExtIEs_specs_553;
+extern asn_TYPE_member_t asn_MBR_X2N_ERABActivityNotifyItem_ExtIEs_553[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Level_QoS_Parameters_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_specs_557;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RAB_Level_QoS_Parameters_ExtIEs_557[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_Item_ExtIEs_specs_561;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RAB_Item_ExtIEs_561[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABUsageReport_Item_ExtIEs_specs_565;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReport_Item_ExtIEs_565[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEBehaviour_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEBehaviour_ExtIEs_specs_569;
+extern asn_TYPE_member_t asn_MBR_X2N_ExpectedUEBehaviour_ExtIEs_569[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExpectedUEActivityBehaviour_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ExpectedUEActivityBehaviour_ExtIEs_specs_573;
+extern asn_TYPE_member_t asn_MBR_X2N_ExpectedUEActivityBehaviour_ExtIEs_573[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_specs_577;
+extern asn_TYPE_member_t asn_MBR_X2N_ExtendedULInterferenceOverloadInfo_ExtIEs_577[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FDD_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FDD_Info_ExtIEs_specs_581;
+extern asn_TYPE_member_t asn_MBR_X2N_FDD_Info_ExtIEs_581[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenTAs_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenTAs_Item_ExtIEs_specs_585;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenTAs_Item_ExtIEs_585[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ForbiddenLAs_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ForbiddenLAs_Item_ExtIEs_specs_589;
+extern asn_TYPE_member_t asn_MBR_X2N_ForbiddenLAs_Item_ExtIEs_589[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_FreqBandNrItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_FreqBandNrItem_ExtIEs_specs_593;
+extern asn_TYPE_member_t asn_MBR_X2N_FreqBandNrItem_ExtIEs_593[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GBR_QosInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GBR_QosInformation_ExtIEs_specs_597;
+extern asn_TYPE_member_t asn_MBR_X2N_GBR_QosInformation_ExtIEs_597[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GlobalENB_ID_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalENB_ID_ExtIEs_specs_601;
+extern asn_TYPE_member_t asn_MBR_X2N_GlobalENB_ID_ExtIEs_601[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GlobalGNB_ID_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GlobalGNB_ID_ExtIEs_specs_605;
+extern asn_TYPE_member_t asn_MBR_X2N_GlobalGNB_ID_ExtIEs_605[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GTPtunnelEndpoint_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GTPtunnelEndpoint_ExtIEs_specs_609;
+extern asn_TYPE_member_t asn_MBR_X2N_GTPtunnelEndpoint_ExtIEs_609[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GU_Group_ID_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GU_Group_ID_ExtIEs_specs_613;
+extern asn_TYPE_member_t asn_MBR_X2N_GU_Group_ID_ExtIEs_613[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GUMMEI_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GUMMEI_ExtIEs_specs_617;
+extern asn_TYPE_member_t asn_MBR_X2N_GUMMEI_ExtIEs_617[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRestrictionList_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRestrictionList_ExtIEs_specs_621;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRestrictionList_ExtIEs_621[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HWLoadIndicator_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HWLoadIndicator_ExtIEs_specs_625;
+extern asn_TYPE_member_t asn_MBR_X2N_HWLoadIndicator_ExtIEs_625[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LastVisitedEUTRANCellInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LastVisitedEUTRANCellInformation_ExtIEs_specs_629;
+extern asn_TYPE_member_t asn_MBR_X2N_LastVisitedEUTRANCellInformation_ExtIEs_629[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LocationReportingInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LocationReportingInformation_ExtIEs_specs_633;
+extern asn_TYPE_member_t asn_MBR_X2N_LocationReportingInformation_ExtIEs_633[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M1PeriodicReporting_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M1PeriodicReporting_ExtIEs_specs_637;
+extern asn_TYPE_member_t asn_MBR_X2N_M1PeriodicReporting_ExtIEs_637[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M1ThresholdEventA2_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M1ThresholdEventA2_ExtIEs_specs_641;
+extern asn_TYPE_member_t asn_MBR_X2N_M1ThresholdEventA2_ExtIEs_641[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M3Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M3Configuration_ExtIEs_specs_645;
+extern asn_TYPE_member_t asn_MBR_X2N_M3Configuration_ExtIEs_645[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M4Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M4Configuration_ExtIEs_specs_649;
+extern asn_TYPE_member_t asn_MBR_X2N_M4Configuration_ExtIEs_649[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M5Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M5Configuration_ExtIEs_specs_653;
+extern asn_TYPE_member_t asn_MBR_X2N_M5Configuration_ExtIEs_653[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M6Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M6Configuration_ExtIEs_specs_657;
+extern asn_TYPE_member_t asn_MBR_X2N_M6Configuration_ExtIEs_657[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_M7Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_M7Configuration_ExtIEs_specs_661;
+extern asn_TYPE_member_t asn_MBR_X2N_M7Configuration_ExtIEs_661[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MDT_Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MDT_Configuration_ExtIEs_specs_665;
+extern asn_TYPE_member_t asn_MBR_X2N_MDT_Configuration_ExtIEs_665[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeNBResourceCoordinationInformationExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MeNBResourceCoordinationInformationExtIEs_specs_669;
+extern asn_TYPE_member_t asn_MBR_X2N_MeNBResourceCoordinationInformationExtIEs_669[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MBSFN_Subframe_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MBSFN_Subframe_Info_ExtIEs_specs_673;
+extern asn_TYPE_member_t asn_MBR_X2N_MBSFN_Subframe_Info_ExtIEs_673[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_BandInfo_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_BandInfo_ExtIEs_specs_677;
+extern asn_TYPE_member_t asn_MBR_X2N_BandInfo_ExtIEs_677[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRB_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SplitSRB_ExtIEs_specs_681;
+extern asn_TYPE_member_t asn_MBR_X2N_SplitSRB_ExtIEs_681[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UENRMeasurement_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UENRMeasurement_ExtIEs_specs_685;
+extern asn_TYPE_member_t asn_MBR_X2N_UENRMeasurement_ExtIEs_685[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Neighbour_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_Neighbour_Information_ExtIEs_specs_689;
+extern asn_TYPE_member_t asn_MBR_X2N_Neighbour_Information_ExtIEs_689[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRFreqInfo_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRFreqInfo_ExtIEs_specs_693;
+extern asn_TYPE_member_t asn_MBR_X2N_NRFreqInfo_ExtIEs_693[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRCGI_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRCGI_ExtIEs_specs_697;
+extern asn_TYPE_member_t asn_MBR_X2N_NRCGI_ExtIEs_697[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NR_TxBW_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NR_TxBW_ExtIEs_specs_701;
+extern asn_TYPE_member_t asn_MBR_X2N_NR_TxBW_ExtIEs_701[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_NRUESecurityCapabilities_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_NRUESecurityCapabilities_ExtIEs_specs_705;
+extern asn_TYPE_member_t asn_MBR_X2N_NRUESecurityCapabilities_ExtIEs_705[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PRACH_Configuration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_PRACH_Configuration_ExtIEs_specs_709;
+extern asn_TYPE_member_t asn_MBR_X2N_PRACH_Configuration_ExtIEs_709[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_PLMNAreaBasedQMC_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_PLMNAreaBasedQMC_ExtIEs_specs_713;
+extern asn_TYPE_member_t asn_MBR_X2N_PLMNAreaBasedQMC_ExtIEs_713[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProSeAuthorized_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProSeAuthorized_ExtIEs_specs_717;
+extern asn_TYPE_member_t asn_MBR_X2N_ProSeAuthorized_ExtIEs_717[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedEUTRAResourceIndication_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedEUTRAResourceIndication_ExtIEs_specs_721;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedEUTRAResourceIndication_ExtIEs_721[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedFootprintTimePattern_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedFootprintTimePattern_ExtIEs_specs_725;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedFootprintTimePattern_ExtIEs_725[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtectedResourceList_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ProtectedResourceList_Item_ExtIEs_specs_729;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtectedResourceList_Item_ExtIEs_729[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RadioResourceStatus_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RadioResourceStatus_ExtIEs_specs_733;
+extern asn_TYPE_member_t asn_MBR_X2N_RadioResourceStatus_ExtIEs_733[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RelativeNarrowbandTxPower_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RelativeNarrowbandTxPower_ExtIEs_specs_737;
+extern asn_TYPE_member_t asn_MBR_X2N_RelativeNarrowbandTxPower_ExtIEs_737[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReservedSubframePattern_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ReservedSubframePattern_ExtIEs_specs_741;
+extern asn_TYPE_member_t asn_MBR_X2N_ReservedSubframePattern_ExtIEs_741[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RLC_Status_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RLC_Status_ExtIEs_specs_745;
+extern asn_TYPE_member_t asn_MBR_X2N_RLC_Status_ExtIEs_745[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMeasurementResult_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RSRPMeasurementResult_ExtIEs_specs_749;
+extern asn_TYPE_member_t asn_MBR_X2N_RSRPMeasurementResult_ExtIEs_749[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMRList_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RSRPMRList_ExtIEs_specs_753;
+extern asn_TYPE_member_t asn_MBR_X2N_RSRPMRList_ExtIEs_753[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_S1TNLLoadIndicator_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_S1TNLLoadIndicator_ExtIEs_specs_757;
+extern asn_TYPE_member_t asn_MBR_X2N_S1TNLLoadIndicator_ExtIEs_757[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATUsageReport_Item_ExtIEs_specs_761;
+extern asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReport_Item_ExtIEs_761[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_ExtIEs_specs_765;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCell_ExtIEs_765[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_Information_ExtIEs_specs_769;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCell_Information_ExtIEs_769[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBResourceCoordinationInformationExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBResourceCoordinationInformationExtIEs_specs_773;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBResourceCoordinationInformationExtIEs_773[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframe_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SpecialSubframe_Info_ExtIEs_specs_777;
+extern asn_TYPE_member_t asn_MBR_X2N_SpecialSubframe_Info_ExtIEs_777[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQI_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQI_ExtIEs_specs_781;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQI_ExtIEs_781[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_specs_785;
+extern asn_TYPE_member_t asn_MBR_X2N_Subscription_Based_UE_DifferentiationInfo_ExtIEs_785[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ScheduledCommunicationTime_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ScheduledCommunicationTime_ExtIEs_specs_789;
+extern asn_TYPE_member_t asn_MBR_X2N_ScheduledCommunicationTime_ExtIEs_789[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQIItem_ExtIEs_specs_793;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQIItem_ExtIEs_793[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SULInformation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SULInformation_ExtIEs_specs_797;
+extern asn_TYPE_member_t asn_MBR_X2N_SULInformation_ExtIEs_797[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SupportedSULFreqBandItem_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SupportedSULFreqBandItem_ExtIEs_specs_801;
+extern asn_TYPE_member_t asn_MBR_X2N_SupportedSULFreqBandItem_ExtIEs_801[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TABasedMDT_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedMDT_ExtIEs_specs_805;
+extern asn_TYPE_member_t asn_MBR_X2N_TABasedMDT_ExtIEs_805[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedMDT_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedMDT_ExtIEs_specs_809;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIBasedMDT_ExtIEs_809[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAI_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAI_Item_ExtIEs_specs_813;
+extern asn_TYPE_member_t asn_MBR_X2N_TAI_Item_ExtIEs_813[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TABasedQMC_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedQMC_ExtIEs_specs_817;
+extern asn_TYPE_member_t asn_MBR_X2N_TABasedQMC_ExtIEs_817[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedQMC_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedQMC_ExtIEs_specs_821;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIBasedQMC_ExtIEs_821[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_Info_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_Info_ExtIEs_specs_825;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_Info_ExtIEs_825[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TraceActivation_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TraceActivation_ExtIEs_specs_829;
+extern asn_TYPE_member_t asn_MBR_X2N_TraceActivation_ExtIEs_829[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Tunnel_Information_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_Tunnel_Information_ExtIEs_specs_833;
+extern asn_TYPE_member_t asn_MBR_X2N_Tunnel_Information_ExtIEs_833[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEAggregate_MaximumBitrate_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAggregate_MaximumBitrate_ExtIEs_specs_837;
+extern asn_TYPE_member_t asn_MBR_X2N_UEAggregate_MaximumBitrate_ExtIEs_837[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEAppLayerMeasConfig_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAppLayerMeasConfig_ExtIEs_specs_841;
+extern asn_TYPE_member_t asn_MBR_X2N_UEAppLayerMeasConfig_ExtIEs_841[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UESecurityCapabilities_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UESecurityCapabilities_ExtIEs_specs_845;
+extern asn_TYPE_member_t asn_MBR_X2N_UESecurityCapabilities_ExtIEs_845[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_specs_849;
+extern asn_TYPE_member_t asn_MBR_X2N_UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs_849[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEsToBeResetList_Item_ExtIEs_specs_853;
+extern asn_TYPE_member_t asn_MBR_X2N_UEsToBeResetList_Item_ExtIEs_853[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULandDLSharing_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULandDLSharing_ExtIEs_specs_857;
+extern asn_TYPE_member_t asn_MBR_X2N_ULandDLSharing_ExtIEs_857[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULConfiguration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULConfiguration_ExtIEs_specs_861;
+extern asn_TYPE_member_t asn_MBR_X2N_ULConfiguration_ExtIEs_861[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_specs_865;
+extern asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_ExtIEs_865[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULOnlySharing_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULOnlySharing_ExtIEs_specs_869;
+extern asn_TYPE_member_t asn_MBR_X2N_ULOnlySharing_ExtIEs_869[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationFDD_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationFDD_ExtIEs_specs_873;
+extern asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationFDD_ExtIEs_873[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationTDD_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationTDD_ExtIEs_specs_877;
+extern asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationTDD_ExtIEs_877[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_V2XServicesAuthorized_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_V2XServicesAuthorized_ExtIEs_specs_881;
+extern asn_TYPE_member_t asn_MBR_X2N_V2XServicesAuthorized_ExtIEs_881[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQI_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_WidebandCQI_ExtIEs_specs_885;
+extern asn_TYPE_member_t asn_MBR_X2N_WidebandCQI_ExtIEs_885[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasurementConfiguration_ExtIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_WLANMeasurementConfiguration_ExtIEs_specs_889;
+extern asn_TYPE_member_t asn_MBR_X2N_WLANMeasurementConfiguration_ExtIEs_889[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolExtensionField_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-Container.c b/asn1c_defs/X2N_ProtocolIE-Container.c
new file mode 100644
index 0000000..3b4a929
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Container.c
@@ -0,0 +1,4250 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-Container.h"
+
+#include "X2N_ProtocolIE-Field.h"
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P0_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P1_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P2_constr_5 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P3_constr_7 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P4_constr_9 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P5_constr_11 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P6_constr_13 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P7_constr_15 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P8_constr_17 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P9_constr_19 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P10_constr_21 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P11_constr_23 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P12_constr_25 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P13_constr_27 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P14_constr_29 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P15_constr_31 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P16_constr_33 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P17_constr_35 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P18_constr_37 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P19_constr_39 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P20_constr_41 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P21_constr_43 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P22_constr_45 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P23_constr_47 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P24_constr_49 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P25_constr_51 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P26_constr_53 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P27_constr_55 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P28_constr_57 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P29_constr_59 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P30_constr_61 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P31_constr_63 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P32_constr_65 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P33_constr_67 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P34_constr_69 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P35_constr_71 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P36_constr_73 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P37_constr_75 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P38_constr_77 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P39_constr_79 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P40_constr_81 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P41_constr_83 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P42_constr_85 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P43_constr_87 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P44_constr_89 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P45_constr_91 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P46_constr_93 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P47_constr_95 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P48_constr_97 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P49_constr_99 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P50_constr_101 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P51_constr_103 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P52_constr_105 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P53_constr_107 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P54_constr_109 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P55_constr_111 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P56_constr_113 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P57_constr_115 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P58_constr_117 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P59_constr_119 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P60_constr_121 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P61_constr_123 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P62_constr_125 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P63_constr_127 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P64_constr_129 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P65_constr_131 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P66_constr_133 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P67_constr_135 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P68_constr_137 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P69_constr_139 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P70_constr_141 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P71_constr_143 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P72_constr_145 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P73_constr_147 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P74_constr_149 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P75_constr_151 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P76_constr_153 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P77_constr_155 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P78_constr_157 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P79_constr_159 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P80_constr_161 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P81_constr_163 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P82_constr_165 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P83_constr_167 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P84_constr_169 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P85_constr_171 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P86_constr_173 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P87_constr_175 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P88_constr_177 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P89_constr_179 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P90_constr_181 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P91_constr_183 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P92_constr_185 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P93_constr_187 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P94_constr_189 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P95_constr_191 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P96_constr_193 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P97_constr_195 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P98_constr_197 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P99_constr_199 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P100_constr_201 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P101_constr_203 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P102_constr_205 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P103_constr_207 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P104_constr_209 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P105_constr_211 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P0_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P0_specs_1 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P0),
+	offsetof(struct X2N_ProtocolIE_Container_8180P0, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P0 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P0_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P0_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P0_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P0_specs_1	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P1_3[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P1_specs_3 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P1),
+	offsetof(struct X2N_ProtocolIE_Container_8180P1, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P1 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P1_tags_3[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P1_constr_3, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P1_3,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P1_specs_3	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P2_5[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverPreparationFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P2_specs_5 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P2),
+	offsetof(struct X2N_ProtocolIE_Container_8180P2, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P2 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P2_tags_5[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P2_constr_5, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P2_5,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P2_specs_5	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P3_7[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverReport_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P3_specs_7 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P3),
+	offsetof(struct X2N_ProtocolIE_Container_8180P3, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P3 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P3_tags_7[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P3_constr_7, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P3_7,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P3_specs_7	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P4_9[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SNStatusTransfer_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P4_specs_9 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P4),
+	offsetof(struct X2N_ProtocolIE_Container_8180P4, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P4 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P4_tags_9[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P4_constr_9, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P4_9,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P4_specs_9	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P5_11[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEContextRelease_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P5_specs_11 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P5),
+	offsetof(struct X2N_ProtocolIE_Container_8180P5, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P5 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P5_tags_11[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P5_constr_11, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P5_11,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P5_specs_11	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P6_13[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverCancel_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P6_specs_13 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P6),
+	offsetof(struct X2N_ProtocolIE_Container_8180P6, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P6 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P6_tags_13[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P6_constr_13, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P6_13,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P6_specs_13	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P7_15[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ErrorIndication_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P7_specs_15 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P7),
+	offsetof(struct X2N_ProtocolIE_Container_8180P7, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P7 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P7_tags_15[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P7_constr_15, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P7_15,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P7_specs_15	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P8_17[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResetRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P8_specs_17 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P8),
+	offsetof(struct X2N_ProtocolIE_Container_8180P8, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P8 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P8_tags_17[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P8_constr_17, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P8_17,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P8_specs_17	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P9_19[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResetResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P9_specs_19 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P9),
+	offsetof(struct X2N_ProtocolIE_Container_8180P9, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P9 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P9_tags_19[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P9_constr_19, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P9_19,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P9_specs_19	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P10_21[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P10_specs_21 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P10),
+	offsetof(struct X2N_ProtocolIE_Container_8180P10, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P10 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P10_tags_21[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P10_constr_21, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P10_21,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P10_specs_21	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P11_23[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P11_specs_23 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P11),
+	offsetof(struct X2N_ProtocolIE_Container_8180P11, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P11 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P11_tags_23[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P11_constr_23, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P11_23,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P11_specs_23	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P12_25[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P12_specs_25 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P12),
+	offsetof(struct X2N_ProtocolIE_Container_8180P12, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P12 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P12_tags_25[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P12_constr_25, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P12_25,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P12_specs_25	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P13_27[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_LoadInformation_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P13_specs_27 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P13),
+	offsetof(struct X2N_ProtocolIE_Container_8180P13, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P13 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P13_tags_27[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P13_constr_27, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P13_27,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P13_specs_27	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P14_29[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P14_specs_29 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P14),
+	offsetof(struct X2N_ProtocolIE_Container_8180P14, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P14 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P14_tags_29[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P14_constr_29, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P14_29,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P14_specs_29	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P15_31[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P15_specs_31 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P15),
+	offsetof(struct X2N_ProtocolIE_Container_8180P15, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P15 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P15_tags_31[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P15_constr_31, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P15_31,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P15_specs_31	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P16_33[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P16_specs_33 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P16),
+	offsetof(struct X2N_ProtocolIE_Container_8180P16, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P16 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P16_tags_33[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P16_constr_33, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P16_33,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P16_specs_33	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P17_35[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P17_specs_35 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P17),
+	offsetof(struct X2N_ProtocolIE_Container_8180P17, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P17 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P17_tags_35[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P17_constr_35, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P17_35,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P17_specs_35	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P18_37[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P18_specs_37 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P18),
+	offsetof(struct X2N_ProtocolIE_Container_8180P18, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P18 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P18_tags_37[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P18_constr_37, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P18_37,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P18_specs_37	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P19_39[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P19_specs_39 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P19),
+	offsetof(struct X2N_ProtocolIE_Container_8180P19, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P19 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P19_tags_39[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P19_constr_39, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P19_39,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P19_specs_39	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P20_41[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P20_specs_41 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P20),
+	offsetof(struct X2N_ProtocolIE_Container_8180P20, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P20 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P20_tags_41[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P20_constr_41, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P20_41,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P20_specs_41	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P21_43[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P21_specs_43 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P21),
+	offsetof(struct X2N_ProtocolIE_Container_8180P21, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P21 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P21_tags_43[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P21_constr_43, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P21_43,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P21_specs_43	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P22_45[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P22_specs_45 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P22),
+	offsetof(struct X2N_ProtocolIE_Container_8180P22, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P22 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P22_tags_45[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P22_constr_45, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P22_45,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P22_specs_45	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P23_47[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P23_specs_47 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P23),
+	offsetof(struct X2N_ProtocolIE_Container_8180P23, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P23 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P23_tags_47[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P23_constr_47, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P23_47,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P23_specs_47	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P24_49[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RLFIndication_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P24_specs_49 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P24),
+	offsetof(struct X2N_ProtocolIE_Container_8180P24, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P24 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P24_tags_49[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P24_constr_49, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P24_49,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P24_specs_49	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P25_51[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P25_specs_51 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P25),
+	offsetof(struct X2N_ProtocolIE_Container_8180P25, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P25 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P25_tags_51[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P25_constr_51, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P25_51,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P25_specs_51	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P26_53[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P26_specs_53 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P26),
+	offsetof(struct X2N_ProtocolIE_Container_8180P26, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P26 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P26_tags_53[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P26_constr_53, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P26_53,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P26_specs_53	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P27_55[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P27_specs_55 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P27),
+	offsetof(struct X2N_ProtocolIE_Container_8180P27, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P27 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P27_tags_55[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P27_constr_55, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P27_55,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P27_specs_55	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P28_57[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2Release_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P28_specs_57 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P28),
+	offsetof(struct X2N_ProtocolIE_Container_8180P28, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P28 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P28_tags_57[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P28_constr_57, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P28_57,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P28_specs_57	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P29_59[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2APMessageTransfer_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P29_specs_59 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P29),
+	offsetof(struct X2N_ProtocolIE_Container_8180P29, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P29 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P29_tags_59[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P29_constr_59, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P29_59,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P29_specs_59	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P30_61[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P30_specs_61 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P30),
+	offsetof(struct X2N_ProtocolIE_Container_8180P30, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P30 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P30_tags_61[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P30_constr_61, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P30_61,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P30_specs_61	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P31_63[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P31_specs_63 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P31),
+	offsetof(struct X2N_ProtocolIE_Container_8180P31, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P31 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P31_tags_63[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P31_constr_63, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P31_63,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P31_specs_63	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P32_65[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequestReject_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P32_specs_65 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P32),
+	offsetof(struct X2N_ProtocolIE_Container_8180P32, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P32 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P32_tags_65[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P32_constr_65, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P32_65,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P32_specs_65	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P33_67[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReconfigurationComplete_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P33_specs_67 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P33),
+	offsetof(struct X2N_ProtocolIE_Container_8180P33, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P33 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P33_tags_67[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P33_constr_67, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P33_67,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P33_specs_67	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P34_69[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P34_specs_69 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P34),
+	offsetof(struct X2N_ProtocolIE_Container_8180P34, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P34 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P34_tags_69[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P34_constr_69, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P34_69,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P34_specs_69	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P35_71[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P35_specs_71 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P35),
+	offsetof(struct X2N_ProtocolIE_Container_8180P35, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P35 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P35_tags_71[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P35_constr_71, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P35_71,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P35_specs_71	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P36_73[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequestReject_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P36_specs_73 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P36),
+	offsetof(struct X2N_ProtocolIE_Container_8180P36, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P36 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P36_tags_73[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P36_constr_73, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P36_73,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P36_specs_73	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P37_75[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P37_specs_75 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P37),
+	offsetof(struct X2N_ProtocolIE_Container_8180P37, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P37 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P37_tags_75[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P37_constr_75, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P37_75,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P37_specs_75	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P38_77[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P38_specs_77 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P38),
+	offsetof(struct X2N_ProtocolIE_Container_8180P38, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P38 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P38_tags_77[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P38_constr_77, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P38_77,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P38_specs_77	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P39_79[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRefuse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P39_specs_79 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P39),
+	offsetof(struct X2N_ProtocolIE_Container_8180P39, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P39 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P39_tags_79[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P39_constr_79, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P39_79,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P39_specs_79	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P40_81[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P40_specs_81 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P40),
+	offsetof(struct X2N_ProtocolIE_Container_8180P40, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P40 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P40_tags_81[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P40_constr_81, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P40_81,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P40_specs_81	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P41_83[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P41_specs_83 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P41),
+	offsetof(struct X2N_ProtocolIE_Container_8180P41, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P41 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P41_tags_83[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P41_constr_83, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P41_83,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P41_specs_83	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P42_85[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P42_specs_85 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P42),
+	offsetof(struct X2N_ProtocolIE_Container_8180P42, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P42 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P42_tags_85[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P42_constr_85, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P42_85,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P42_specs_85	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P43_87[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBCounterCheckRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P43_specs_87 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P43),
+	offsetof(struct X2N_ProtocolIE_Container_8180P43, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P43 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P43_tags_87[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P43_constr_87, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P43_87,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P43_specs_87	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P44_89[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P44_specs_89 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P44),
+	offsetof(struct X2N_ProtocolIE_Container_8180P44, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P44 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P44_tags_89[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P44_constr_89, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P44_89,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P44_specs_89	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P45_91[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P45_specs_91 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P45),
+	offsetof(struct X2N_ProtocolIE_Container_8180P45, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P45 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P45_tags_91[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P45_constr_91, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P45_91,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P45_specs_91	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P46_93[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P46_specs_93 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P46),
+	offsetof(struct X2N_ProtocolIE_Container_8180P46, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P46 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P46_tags_93[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P46_constr_93, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P46_93,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P46_specs_93	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P47_95[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P47_specs_95 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P47),
+	offsetof(struct X2N_ProtocolIE_Container_8180P47, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P47 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P47_tags_95[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P47_constr_95, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P47_95,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P47_specs_95	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P48_97[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P48_specs_97 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P48),
+	offsetof(struct X2N_ProtocolIE_Container_8180P48, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P48 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P48_tags_97[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P48_constr_97, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P48_97,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P48_specs_97	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P49_99[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P49_specs_99 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P49),
+	offsetof(struct X2N_ProtocolIE_Container_8180P49, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P49 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P49_tags_99[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P49_constr_99, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P49_99,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P49_specs_99	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P50_101[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P50_specs_101 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P50),
+	offsetof(struct X2N_ProtocolIE_Container_8180P50, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P50 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P50_tags_101[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P50_constr_101, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P50_101,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P50_specs_101	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P51_103[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P51_specs_103 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P51),
+	offsetof(struct X2N_ProtocolIE_Container_8180P51, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P51 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P51_tags_103[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P51_constr_103, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P51_103,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P51_specs_103	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P52_105[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequestReject_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P52_specs_105 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P52),
+	offsetof(struct X2N_ProtocolIE_Container_8180P52, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P52 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P52_tags_105[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P52_constr_105, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P52_105,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P52_specs_105	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P53_107[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReconfigurationComplete_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P53_specs_107 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P53),
+	offsetof(struct X2N_ProtocolIE_Container_8180P53, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P53 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P53_tags_107[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P53_constr_107, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P53_107,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P53_specs_107	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P54_109[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P54_specs_109 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P54),
+	offsetof(struct X2N_ProtocolIE_Container_8180P54, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P54 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P54_tags_109[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P54_constr_109, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P54_109,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P54_specs_109	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P55_111[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P55_specs_111 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P55),
+	offsetof(struct X2N_ProtocolIE_Container_8180P55, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P55 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P55_tags_111[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P55_constr_111, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P55_111,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P55_specs_111	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P56_113[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequestReject_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P56_specs_113 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P56),
+	offsetof(struct X2N_ProtocolIE_Container_8180P56, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P56 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P56_tags_113[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P56_constr_113, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P56_113,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P56_specs_113	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P57_115[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P57_specs_115 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P57),
+	offsetof(struct X2N_ProtocolIE_Container_8180P57, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P57 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P57_tags_115[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P57_constr_115, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P57_115,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P57_specs_115	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P58_117[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P58_specs_117 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P58),
+	offsetof(struct X2N_ProtocolIE_Container_8180P58, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P58 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P58_tags_117[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P58_constr_117, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P58_117,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P58_specs_117	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P59_119[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRefuse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P59_specs_119 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P59),
+	offsetof(struct X2N_ProtocolIE_Container_8180P59, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P59 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P59_tags_119[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P59_constr_119, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P59_119,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P59_specs_119	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P60_121[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P60_specs_121 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P60),
+	offsetof(struct X2N_ProtocolIE_Container_8180P60, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P60 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P60_tags_121[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P60_constr_121, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P60_121,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P60_specs_121	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P61_123[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P61_specs_123 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P61),
+	offsetof(struct X2N_ProtocolIE_Container_8180P61, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P61 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P61_tags_123[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P61_constr_123, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P61_123,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P61_specs_123	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P62_125[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequestReject_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P62_specs_125 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P62),
+	offsetof(struct X2N_ProtocolIE_Container_8180P62, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P62 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P62_tags_125[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P62_constr_125, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P62_125,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P62_specs_125	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P63_127[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P63_specs_127 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P63),
+	offsetof(struct X2N_ProtocolIE_Container_8180P63, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P63 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P63_tags_127[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P63_constr_127, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P63_127,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P63_specs_127	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P64_129[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P64_specs_129 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P64),
+	offsetof(struct X2N_ProtocolIE_Container_8180P64, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P64 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P64_tags_129[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P64_constr_129, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P64_129,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P64_specs_129	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P65_131[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBCounterCheckRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P65_specs_131 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P65),
+	offsetof(struct X2N_ProtocolIE_Container_8180P65, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P65 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P65_tags_131[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P65_constr_131, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P65_131,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P65_specs_131	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P66_133[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P66_specs_133 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P66),
+	offsetof(struct X2N_ProtocolIE_Container_8180P66, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P66 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P66_tags_133[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P66_constr_133, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P66_133,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P66_specs_133	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P67_135[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P67_specs_135 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P67),
+	offsetof(struct X2N_ProtocolIE_Container_8180P67, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P67 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P67_tags_135[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P67_constr_135, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P67_135,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P67_specs_135	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P68_137[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RRCTransfer_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P68_specs_137 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P68),
+	offsetof(struct X2N_ProtocolIE_Container_8180P68, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P68 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P68_tags_137[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P68_constr_137, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P68_137,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P68_specs_137	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P69_139[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeRefuse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P69_specs_139 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P69),
+	offsetof(struct X2N_ProtocolIE_Container_8180P69, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P69 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P69_tags_139[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P69_constr_139, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P69_139,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P69_specs_139	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P70_141[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P70_specs_141 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P70),
+	offsetof(struct X2N_ProtocolIE_Container_8180P70, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P70 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P70_tags_141[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P70_constr_141, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P70_141,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P70_specs_141	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P71_143[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCX2SetupReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P71_specs_143 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P71),
+	offsetof(struct X2N_ProtocolIE_Container_8180P71, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P71 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P71_tags_143[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P71_constr_143, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P71_143,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P71_specs_143	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P72_145[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P72_specs_145 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P72),
+	offsetof(struct X2N_ProtocolIE_Container_8180P72, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P72 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P72_tags_145[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P72_constr_145, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P72_145,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P72_specs_145	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P73_147[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P73_specs_147 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P73),
+	offsetof(struct X2N_ProtocolIE_Container_8180P73, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P73 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P73_tags_147[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P73_constr_147, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P73_147,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P73_specs_147	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P74_149[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P74_specs_149 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P74),
+	offsetof(struct X2N_ProtocolIE_Container_8180P74, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P74 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P74_tags_149[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P74_constr_149, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P74_149,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P74_specs_149	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P75_151[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P75_specs_151 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P75),
+	offsetof(struct X2N_ProtocolIE_Container_8180P75, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P75 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P75_tags_151[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P75_constr_151, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P75_151,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P75_specs_151	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P76_153[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P76_specs_153 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P76),
+	offsetof(struct X2N_ProtocolIE_Container_8180P76, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P76 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P76_tags_153[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P76_constr_153, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P76_153,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P76_specs_153	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P77_155[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdate_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P77_specs_155 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P77),
+	offsetof(struct X2N_ProtocolIE_Container_8180P77, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P77 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P77_tags_155[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P77_constr_155, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P77_155,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P77_specs_155	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P78_157[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCConfigUpdateIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P78_specs_157 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P78),
+	offsetof(struct X2N_ProtocolIE_Container_8180P78, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P78 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P78_tags_157[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P78_constr_157, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P78_157,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P78_specs_157	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P79_159[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P79_specs_159 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P79),
+	offsetof(struct X2N_ProtocolIE_Container_8180P79, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P79 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P79_tags_159[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P79_constr_159, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P79_159,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P79_specs_159	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P80_161[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P80_specs_161 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P80),
+	offsetof(struct X2N_ProtocolIE_Container_8180P80, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P80 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P80_tags_161[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P80_constr_161, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P80_161,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P80_specs_161	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P81_163[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P81_specs_163 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P81),
+	offsetof(struct X2N_ProtocolIE_Container_8180P81, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P81 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P81_tags_163[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P81_constr_163, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P81_163,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P81_specs_163	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P82_165[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P82_specs_165 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P82),
+	offsetof(struct X2N_ProtocolIE_Container_8180P82, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P82 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P82_tags_165[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P82_constr_165, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P82_165,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P82_specs_165	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P83_167[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P83_specs_167 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P83),
+	offsetof(struct X2N_ProtocolIE_Container_8180P83, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P83 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P83_tags_167[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P83_constr_167, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P83_167,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P83_specs_167	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P84_169[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P84_specs_169 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P84),
+	offsetof(struct X2N_ProtocolIE_Container_8180P84, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P84 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P84_tags_169[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P84_constr_169, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P84_169,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P84_specs_169	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P85_171[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P85_specs_171 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P85),
+	offsetof(struct X2N_ProtocolIE_Container_8180P85, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P85 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P85_tags_171[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P85_constr_171, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P85_171,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P85_specs_171	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P86_173[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P86_specs_173 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P86),
+	offsetof(struct X2N_ProtocolIE_Container_8180P86, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P86 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P86_tags_173[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P86_constr_173, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P86_173,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P86_specs_173	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P87_175[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SecondaryRATDataUsageReport_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P87_specs_175 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P87),
+	offsetof(struct X2N_ProtocolIE_Container_8180P87, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P87 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P87_tags_175[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P87_constr_175, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P87_175,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P87_specs_175	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P88_177[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBActivityNotification_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P88_specs_177 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P88),
+	offsetof(struct X2N_ProtocolIE_Container_8180P88, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P88 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P88_tags_177[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P88_constr_177, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P88_177,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P88_specs_177	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P89_179[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCPartialResetRequired_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P89_specs_179 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P89),
+	offsetof(struct X2N_ProtocolIE_Container_8180P89, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P89 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P89_tags_179[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P89_constr_179, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P89_179,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P89_specs_179	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P90_181[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCPartialResetConfirm_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P90_specs_181 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P90),
+	offsetof(struct X2N_ProtocolIE_Container_8180P90, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P90 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P90_tags_181[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P90_constr_181, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P90_181,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P90_specs_181	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P91_183[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P91_specs_183 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P91),
+	offsetof(struct X2N_ProtocolIE_Container_8180P91, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P91 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P91_tags_183[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P91_constr_183, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P91_183,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P91_specs_183	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P92_185[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P92_specs_185 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P92),
+	offsetof(struct X2N_ProtocolIE_Container_8180P92, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P92 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P92_tags_185[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P92_constr_185, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P92_185,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P92_specs_185	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P93_187[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P93_specs_187 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P93),
+	offsetof(struct X2N_ProtocolIE_Container_8180P93, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P93 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P93_tags_187[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P93_constr_187, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P93_187,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P93_specs_187	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P94_189[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P94_specs_189 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P94),
+	offsetof(struct X2N_ProtocolIE_Container_8180P94, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P94 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P94_tags_189[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P94_constr_189, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P94_189,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P94_specs_189	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P95_191[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P95_specs_191 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P95),
+	offsetof(struct X2N_ProtocolIE_Container_8180P95, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P95 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P95_tags_191[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P95_constr_191, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P95_191,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P95_specs_191	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P96_193[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P96_specs_193 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P96),
+	offsetof(struct X2N_ProtocolIE_Container_8180P96, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P96 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P96_tags_193[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P96_constr_193, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P96_193,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P96_specs_193	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P97_195[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalRequest_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P97_specs_195 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P97),
+	offsetof(struct X2N_ProtocolIE_Container_8180P97, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P97 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P97_tags_195[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P97_constr_195, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P97_195,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P97_specs_195	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P98_197[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P98_specs_197 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P98),
+	offsetof(struct X2N_ProtocolIE_Container_8180P98, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P98 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P98_tags_197[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P98_constr_197, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P98_197,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P98_specs_197	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P99_199[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P99_specs_199 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P99),
+	offsetof(struct X2N_ProtocolIE_Container_8180P99, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P99 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P99_tags_199[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P99_constr_199, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P99_199,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P99_specs_199	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P100_201[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalResponse_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P100_specs_201 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P100),
+	offsetof(struct X2N_ProtocolIE_Container_8180P100, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P100 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P100_tags_201[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P100_constr_201, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P100_201,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P100_specs_201	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P101_203[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P101_specs_203 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P101),
+	offsetof(struct X2N_ProtocolIE_Container_8180P101, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P101 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P101_tags_203[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P101_constr_203, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P101_203,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P101_specs_203	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P102_205[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P102_specs_205 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P102),
+	offsetof(struct X2N_ProtocolIE_Container_8180P102, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P102 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P102_tags_205[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P102_constr_205, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P102_205,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P102_specs_205	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P103_207[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalFailure_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P103_specs_207 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P103),
+	offsetof(struct X2N_ProtocolIE_Container_8180P103, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P103 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P103_tags_207[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P103_constr_207, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P103_207,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P103_specs_207	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P104_209[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataForwardingAddressIndication_IEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P104_specs_209 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P104),
+	offsetof(struct X2N_ProtocolIE_Container_8180P104, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P104 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P104_tags_209[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P104_constr_209, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P104_209,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P104_specs_209	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P105_211[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GNBStatusIndicationIEs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P105_specs_211 = {
+	sizeof(struct X2N_ProtocolIE_Container_8180P105),
+	offsetof(struct X2N_ProtocolIE_Container_8180P105, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P105 = {
+	"ProtocolIE-Container",
+	"ProtocolIE-Container",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211,
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Container_8180P105_tags_211[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_Container_8180P105_constr_211, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ProtocolIE_Container_8180P105_211,
+	1,	/* Single element */
+	&asn_SPC_X2N_ProtocolIE_Container_8180P105_specs_211	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolIE-Container.h b/asn1c_defs/X2N_ProtocolIE-Container.h
new file mode 100644
index 0000000..6fef580
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Container.h
@@ -0,0 +1,1199 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_Container_H_
+#define	_X2N_ProtocolIE_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_HandoverRequest_IEs;
+struct X2N_HandoverRequestAcknowledge_IEs;
+struct X2N_HandoverPreparationFailure_IEs;
+struct X2N_HandoverReport_IEs;
+struct X2N_SNStatusTransfer_IEs;
+struct X2N_UEContextRelease_IEs;
+struct X2N_HandoverCancel_IEs;
+struct X2N_ErrorIndication_IEs;
+struct X2N_ResetRequest_IEs;
+struct X2N_ResetResponse_IEs;
+struct X2N_X2SetupRequest_IEs;
+struct X2N_X2SetupResponse_IEs;
+struct X2N_X2SetupFailure_IEs;
+struct X2N_LoadInformation_IEs;
+struct X2N_ENBConfigurationUpdate_IEs;
+struct X2N_ENBConfigurationUpdateAcknowledge_IEs;
+struct X2N_ENBConfigurationUpdateFailure_IEs;
+struct X2N_ResourceStatusRequest_IEs;
+struct X2N_ResourceStatusResponse_IEs;
+struct X2N_ResourceStatusFailure_IEs;
+struct X2N_ResourceStatusUpdate_IEs;
+struct X2N_MobilityChangeRequest_IEs;
+struct X2N_MobilityChangeAcknowledge_IEs;
+struct X2N_MobilityChangeFailure_IEs;
+struct X2N_RLFIndication_IEs;
+struct X2N_CellActivationRequest_IEs;
+struct X2N_CellActivationResponse_IEs;
+struct X2N_CellActivationFailure_IEs;
+struct X2N_X2Release_IEs;
+struct X2N_X2APMessageTransfer_IEs;
+struct X2N_SeNBAdditionRequest_IEs;
+struct X2N_SeNBAdditionRequestAcknowledge_IEs;
+struct X2N_SeNBAdditionRequestReject_IEs;
+struct X2N_SeNBReconfigurationComplete_IEs;
+struct X2N_SeNBModificationRequest_IEs;
+struct X2N_SeNBModificationRequestAcknowledge_IEs;
+struct X2N_SeNBModificationRequestReject_IEs;
+struct X2N_SeNBModificationRequired_IEs;
+struct X2N_SeNBModificationConfirm_IEs;
+struct X2N_SeNBModificationRefuse_IEs;
+struct X2N_SeNBReleaseRequest_IEs;
+struct X2N_SeNBReleaseRequired_IEs;
+struct X2N_SeNBReleaseConfirm_IEs;
+struct X2N_SeNBCounterCheckRequest_IEs;
+struct X2N_X2RemovalRequest_IEs;
+struct X2N_X2RemovalResponse_IEs;
+struct X2N_X2RemovalFailure_IEs;
+struct X2N_RetrieveUEContextRequest_IEs;
+struct X2N_RetrieveUEContextResponse_IEs;
+struct X2N_RetrieveUEContextFailure_IEs;
+struct X2N_SgNBAdditionRequest_IEs;
+struct X2N_SgNBAdditionRequestAcknowledge_IEs;
+struct X2N_SgNBAdditionRequestReject_IEs;
+struct X2N_SgNBReconfigurationComplete_IEs;
+struct X2N_SgNBModificationRequest_IEs;
+struct X2N_SgNBModificationRequestAcknowledge_IEs;
+struct X2N_SgNBModificationRequestReject_IEs;
+struct X2N_SgNBModificationRequired_IEs;
+struct X2N_SgNBModificationConfirm_IEs;
+struct X2N_SgNBModificationRefuse_IEs;
+struct X2N_SgNBReleaseRequest_IEs;
+struct X2N_SgNBReleaseRequestAcknowledge_IEs;
+struct X2N_SgNBReleaseRequestReject_IEs;
+struct X2N_SgNBReleaseRequired_IEs;
+struct X2N_SgNBReleaseConfirm_IEs;
+struct X2N_SgNBCounterCheckRequest_IEs;
+struct X2N_SgNBChangeRequired_IEs;
+struct X2N_SgNBChangeConfirm_IEs;
+struct X2N_RRCTransfer_IEs;
+struct X2N_SgNBChangeRefuse_IEs;
+struct X2N_ENDCX2SetupRequest_IEs;
+struct X2N_ENB_ENDCX2SetupReqIEs;
+struct X2N_En_gNB_ENDCX2SetupReqIEs;
+struct X2N_ENDCX2SetupResponse_IEs;
+struct X2N_ENB_ENDCX2SetupReqAckIEs;
+struct X2N_En_gNB_ENDCX2SetupReqAckIEs;
+struct X2N_ENDCX2SetupFailure_IEs;
+struct X2N_ENDCConfigurationUpdate_IEs;
+struct X2N_ENB_ENDCConfigUpdateIEs;
+struct X2N_En_gNB_ENDCConfigUpdateIEs;
+struct X2N_ENDCConfigurationUpdateAcknowledge_IEs;
+struct X2N_ENB_ENDCConfigUpdateAckIEs;
+struct X2N_En_gNB_ENDCConfigUpdateAckIEs;
+struct X2N_ENDCConfigurationUpdateFailure_IEs;
+struct X2N_ENDCCellActivationRequest_IEs;
+struct X2N_ENDCCellActivationResponse_IEs;
+struct X2N_ENDCCellActivationFailure_IEs;
+struct X2N_SecondaryRATDataUsageReport_IEs;
+struct X2N_SgNBActivityNotification_IEs;
+struct X2N_ENDCPartialResetRequired_IEs;
+struct X2N_ENDCPartialResetConfirm_IEs;
+struct X2N_EUTRANRCellResourceCoordinationRequest_IEs;
+struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs;
+struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs;
+struct X2N_EUTRANRCellResourceCoordinationResponse_IEs;
+struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs;
+struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs;
+struct X2N_ENDCX2RemovalRequest_IEs;
+struct X2N_ENB_ENDCX2RemovalReqIEs;
+struct X2N_En_gNB_ENDCX2RemovalReqIEs;
+struct X2N_ENDCX2RemovalResponse_IEs;
+struct X2N_ENB_ENDCX2RemovalReqAckIEs;
+struct X2N_En_gNB_ENDCX2RemovalReqAckIEs;
+struct X2N_ENDCX2RemovalFailure_IEs;
+struct X2N_DataForwardingAddressIndication_IEs;
+struct X2N_GNBStatusIndicationIEs;
+
+/* X2N_ProtocolIE-Container */
+typedef struct X2N_ProtocolIE_Container_8180P0 {
+	A_SEQUENCE_OF(struct X2N_HandoverRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P0_t;
+typedef struct X2N_ProtocolIE_Container_8180P1 {
+	A_SEQUENCE_OF(struct X2N_HandoverRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P1_t;
+typedef struct X2N_ProtocolIE_Container_8180P2 {
+	A_SEQUENCE_OF(struct X2N_HandoverPreparationFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P2_t;
+typedef struct X2N_ProtocolIE_Container_8180P3 {
+	A_SEQUENCE_OF(struct X2N_HandoverReport_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P3_t;
+typedef struct X2N_ProtocolIE_Container_8180P4 {
+	A_SEQUENCE_OF(struct X2N_SNStatusTransfer_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P4_t;
+typedef struct X2N_ProtocolIE_Container_8180P5 {
+	A_SEQUENCE_OF(struct X2N_UEContextRelease_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P5_t;
+typedef struct X2N_ProtocolIE_Container_8180P6 {
+	A_SEQUENCE_OF(struct X2N_HandoverCancel_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P6_t;
+typedef struct X2N_ProtocolIE_Container_8180P7 {
+	A_SEQUENCE_OF(struct X2N_ErrorIndication_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P7_t;
+typedef struct X2N_ProtocolIE_Container_8180P8 {
+	A_SEQUENCE_OF(struct X2N_ResetRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P8_t;
+typedef struct X2N_ProtocolIE_Container_8180P9 {
+	A_SEQUENCE_OF(struct X2N_ResetResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P9_t;
+typedef struct X2N_ProtocolIE_Container_8180P10 {
+	A_SEQUENCE_OF(struct X2N_X2SetupRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P10_t;
+typedef struct X2N_ProtocolIE_Container_8180P11 {
+	A_SEQUENCE_OF(struct X2N_X2SetupResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P11_t;
+typedef struct X2N_ProtocolIE_Container_8180P12 {
+	A_SEQUENCE_OF(struct X2N_X2SetupFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P12_t;
+typedef struct X2N_ProtocolIE_Container_8180P13 {
+	A_SEQUENCE_OF(struct X2N_LoadInformation_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P13_t;
+typedef struct X2N_ProtocolIE_Container_8180P14 {
+	A_SEQUENCE_OF(struct X2N_ENBConfigurationUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P14_t;
+typedef struct X2N_ProtocolIE_Container_8180P15 {
+	A_SEQUENCE_OF(struct X2N_ENBConfigurationUpdateAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P15_t;
+typedef struct X2N_ProtocolIE_Container_8180P16 {
+	A_SEQUENCE_OF(struct X2N_ENBConfigurationUpdateFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P16_t;
+typedef struct X2N_ProtocolIE_Container_8180P17 {
+	A_SEQUENCE_OF(struct X2N_ResourceStatusRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P17_t;
+typedef struct X2N_ProtocolIE_Container_8180P18 {
+	A_SEQUENCE_OF(struct X2N_ResourceStatusResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P18_t;
+typedef struct X2N_ProtocolIE_Container_8180P19 {
+	A_SEQUENCE_OF(struct X2N_ResourceStatusFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P19_t;
+typedef struct X2N_ProtocolIE_Container_8180P20 {
+	A_SEQUENCE_OF(struct X2N_ResourceStatusUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P20_t;
+typedef struct X2N_ProtocolIE_Container_8180P21 {
+	A_SEQUENCE_OF(struct X2N_MobilityChangeRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P21_t;
+typedef struct X2N_ProtocolIE_Container_8180P22 {
+	A_SEQUENCE_OF(struct X2N_MobilityChangeAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P22_t;
+typedef struct X2N_ProtocolIE_Container_8180P23 {
+	A_SEQUENCE_OF(struct X2N_MobilityChangeFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P23_t;
+typedef struct X2N_ProtocolIE_Container_8180P24 {
+	A_SEQUENCE_OF(struct X2N_RLFIndication_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P24_t;
+typedef struct X2N_ProtocolIE_Container_8180P25 {
+	A_SEQUENCE_OF(struct X2N_CellActivationRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P25_t;
+typedef struct X2N_ProtocolIE_Container_8180P26 {
+	A_SEQUENCE_OF(struct X2N_CellActivationResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P26_t;
+typedef struct X2N_ProtocolIE_Container_8180P27 {
+	A_SEQUENCE_OF(struct X2N_CellActivationFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P27_t;
+typedef struct X2N_ProtocolIE_Container_8180P28 {
+	A_SEQUENCE_OF(struct X2N_X2Release_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P28_t;
+typedef struct X2N_ProtocolIE_Container_8180P29 {
+	A_SEQUENCE_OF(struct X2N_X2APMessageTransfer_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P29_t;
+typedef struct X2N_ProtocolIE_Container_8180P30 {
+	A_SEQUENCE_OF(struct X2N_SeNBAdditionRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P30_t;
+typedef struct X2N_ProtocolIE_Container_8180P31 {
+	A_SEQUENCE_OF(struct X2N_SeNBAdditionRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P31_t;
+typedef struct X2N_ProtocolIE_Container_8180P32 {
+	A_SEQUENCE_OF(struct X2N_SeNBAdditionRequestReject_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P32_t;
+typedef struct X2N_ProtocolIE_Container_8180P33 {
+	A_SEQUENCE_OF(struct X2N_SeNBReconfigurationComplete_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P33_t;
+typedef struct X2N_ProtocolIE_Container_8180P34 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P34_t;
+typedef struct X2N_ProtocolIE_Container_8180P35 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P35_t;
+typedef struct X2N_ProtocolIE_Container_8180P36 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationRequestReject_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P36_t;
+typedef struct X2N_ProtocolIE_Container_8180P37 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P37_t;
+typedef struct X2N_ProtocolIE_Container_8180P38 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P38_t;
+typedef struct X2N_ProtocolIE_Container_8180P39 {
+	A_SEQUENCE_OF(struct X2N_SeNBModificationRefuse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P39_t;
+typedef struct X2N_ProtocolIE_Container_8180P40 {
+	A_SEQUENCE_OF(struct X2N_SeNBReleaseRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P40_t;
+typedef struct X2N_ProtocolIE_Container_8180P41 {
+	A_SEQUENCE_OF(struct X2N_SeNBReleaseRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P41_t;
+typedef struct X2N_ProtocolIE_Container_8180P42 {
+	A_SEQUENCE_OF(struct X2N_SeNBReleaseConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P42_t;
+typedef struct X2N_ProtocolIE_Container_8180P43 {
+	A_SEQUENCE_OF(struct X2N_SeNBCounterCheckRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P43_t;
+typedef struct X2N_ProtocolIE_Container_8180P44 {
+	A_SEQUENCE_OF(struct X2N_X2RemovalRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P44_t;
+typedef struct X2N_ProtocolIE_Container_8180P45 {
+	A_SEQUENCE_OF(struct X2N_X2RemovalResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P45_t;
+typedef struct X2N_ProtocolIE_Container_8180P46 {
+	A_SEQUENCE_OF(struct X2N_X2RemovalFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P46_t;
+typedef struct X2N_ProtocolIE_Container_8180P47 {
+	A_SEQUENCE_OF(struct X2N_RetrieveUEContextRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P47_t;
+typedef struct X2N_ProtocolIE_Container_8180P48 {
+	A_SEQUENCE_OF(struct X2N_RetrieveUEContextResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P48_t;
+typedef struct X2N_ProtocolIE_Container_8180P49 {
+	A_SEQUENCE_OF(struct X2N_RetrieveUEContextFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P49_t;
+typedef struct X2N_ProtocolIE_Container_8180P50 {
+	A_SEQUENCE_OF(struct X2N_SgNBAdditionRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P50_t;
+typedef struct X2N_ProtocolIE_Container_8180P51 {
+	A_SEQUENCE_OF(struct X2N_SgNBAdditionRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P51_t;
+typedef struct X2N_ProtocolIE_Container_8180P52 {
+	A_SEQUENCE_OF(struct X2N_SgNBAdditionRequestReject_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P52_t;
+typedef struct X2N_ProtocolIE_Container_8180P53 {
+	A_SEQUENCE_OF(struct X2N_SgNBReconfigurationComplete_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P53_t;
+typedef struct X2N_ProtocolIE_Container_8180P54 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P54_t;
+typedef struct X2N_ProtocolIE_Container_8180P55 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P55_t;
+typedef struct X2N_ProtocolIE_Container_8180P56 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationRequestReject_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P56_t;
+typedef struct X2N_ProtocolIE_Container_8180P57 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P57_t;
+typedef struct X2N_ProtocolIE_Container_8180P58 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P58_t;
+typedef struct X2N_ProtocolIE_Container_8180P59 {
+	A_SEQUENCE_OF(struct X2N_SgNBModificationRefuse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P59_t;
+typedef struct X2N_ProtocolIE_Container_8180P60 {
+	A_SEQUENCE_OF(struct X2N_SgNBReleaseRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P60_t;
+typedef struct X2N_ProtocolIE_Container_8180P61 {
+	A_SEQUENCE_OF(struct X2N_SgNBReleaseRequestAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P61_t;
+typedef struct X2N_ProtocolIE_Container_8180P62 {
+	A_SEQUENCE_OF(struct X2N_SgNBReleaseRequestReject_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P62_t;
+typedef struct X2N_ProtocolIE_Container_8180P63 {
+	A_SEQUENCE_OF(struct X2N_SgNBReleaseRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P63_t;
+typedef struct X2N_ProtocolIE_Container_8180P64 {
+	A_SEQUENCE_OF(struct X2N_SgNBReleaseConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P64_t;
+typedef struct X2N_ProtocolIE_Container_8180P65 {
+	A_SEQUENCE_OF(struct X2N_SgNBCounterCheckRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P65_t;
+typedef struct X2N_ProtocolIE_Container_8180P66 {
+	A_SEQUENCE_OF(struct X2N_SgNBChangeRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P66_t;
+typedef struct X2N_ProtocolIE_Container_8180P67 {
+	A_SEQUENCE_OF(struct X2N_SgNBChangeConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P67_t;
+typedef struct X2N_ProtocolIE_Container_8180P68 {
+	A_SEQUENCE_OF(struct X2N_RRCTransfer_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P68_t;
+typedef struct X2N_ProtocolIE_Container_8180P69 {
+	A_SEQUENCE_OF(struct X2N_SgNBChangeRefuse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P69_t;
+typedef struct X2N_ProtocolIE_Container_8180P70 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2SetupRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P70_t;
+typedef struct X2N_ProtocolIE_Container_8180P71 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCX2SetupReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P71_t;
+typedef struct X2N_ProtocolIE_Container_8180P72 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCX2SetupReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P72_t;
+typedef struct X2N_ProtocolIE_Container_8180P73 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2SetupResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P73_t;
+typedef struct X2N_ProtocolIE_Container_8180P74 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCX2SetupReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P74_t;
+typedef struct X2N_ProtocolIE_Container_8180P75 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCX2SetupReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P75_t;
+typedef struct X2N_ProtocolIE_Container_8180P76 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2SetupFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P76_t;
+typedef struct X2N_ProtocolIE_Container_8180P77 {
+	A_SEQUENCE_OF(struct X2N_ENDCConfigurationUpdate_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P77_t;
+typedef struct X2N_ProtocolIE_Container_8180P78 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCConfigUpdateIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P78_t;
+typedef struct X2N_ProtocolIE_Container_8180P79 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCConfigUpdateIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P79_t;
+typedef struct X2N_ProtocolIE_Container_8180P80 {
+	A_SEQUENCE_OF(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P80_t;
+typedef struct X2N_ProtocolIE_Container_8180P81 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCConfigUpdateAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P81_t;
+typedef struct X2N_ProtocolIE_Container_8180P82 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCConfigUpdateAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P82_t;
+typedef struct X2N_ProtocolIE_Container_8180P83 {
+	A_SEQUENCE_OF(struct X2N_ENDCConfigurationUpdateFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P83_t;
+typedef struct X2N_ProtocolIE_Container_8180P84 {
+	A_SEQUENCE_OF(struct X2N_ENDCCellActivationRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P84_t;
+typedef struct X2N_ProtocolIE_Container_8180P85 {
+	A_SEQUENCE_OF(struct X2N_ENDCCellActivationResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P85_t;
+typedef struct X2N_ProtocolIE_Container_8180P86 {
+	A_SEQUENCE_OF(struct X2N_ENDCCellActivationFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P86_t;
+typedef struct X2N_ProtocolIE_Container_8180P87 {
+	A_SEQUENCE_OF(struct X2N_SecondaryRATDataUsageReport_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P87_t;
+typedef struct X2N_ProtocolIE_Container_8180P88 {
+	A_SEQUENCE_OF(struct X2N_SgNBActivityNotification_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P88_t;
+typedef struct X2N_ProtocolIE_Container_8180P89 {
+	A_SEQUENCE_OF(struct X2N_ENDCPartialResetRequired_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P89_t;
+typedef struct X2N_ProtocolIE_Container_8180P90 {
+	A_SEQUENCE_OF(struct X2N_ENDCPartialResetConfirm_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P90_t;
+typedef struct X2N_ProtocolIE_Container_8180P91 {
+	A_SEQUENCE_OF(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P91_t;
+typedef struct X2N_ProtocolIE_Container_8180P92 {
+	A_SEQUENCE_OF(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P92_t;
+typedef struct X2N_ProtocolIE_Container_8180P93 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P93_t;
+typedef struct X2N_ProtocolIE_Container_8180P94 {
+	A_SEQUENCE_OF(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P94_t;
+typedef struct X2N_ProtocolIE_Container_8180P95 {
+	A_SEQUENCE_OF(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P95_t;
+typedef struct X2N_ProtocolIE_Container_8180P96 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P96_t;
+typedef struct X2N_ProtocolIE_Container_8180P97 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2RemovalRequest_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P97_t;
+typedef struct X2N_ProtocolIE_Container_8180P98 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCX2RemovalReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P98_t;
+typedef struct X2N_ProtocolIE_Container_8180P99 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCX2RemovalReqIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P99_t;
+typedef struct X2N_ProtocolIE_Container_8180P100 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2RemovalResponse_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P100_t;
+typedef struct X2N_ProtocolIE_Container_8180P101 {
+	A_SEQUENCE_OF(struct X2N_ENB_ENDCX2RemovalReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P101_t;
+typedef struct X2N_ProtocolIE_Container_8180P102 {
+	A_SEQUENCE_OF(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P102_t;
+typedef struct X2N_ProtocolIE_Container_8180P103 {
+	A_SEQUENCE_OF(struct X2N_ENDCX2RemovalFailure_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P103_t;
+typedef struct X2N_ProtocolIE_Container_8180P104 {
+	A_SEQUENCE_OF(struct X2N_DataForwardingAddressIndication_IEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P104_t;
+typedef struct X2N_ProtocolIE_Container_8180P105 {
+	A_SEQUENCE_OF(struct X2N_GNBStatusIndicationIEs) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ProtocolIE_Container_8180P105_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P0;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P0_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P1;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P1_3[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P1_constr_3;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P2;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P2_specs_5;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P2_5[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P2_constr_5;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P3;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P3_specs_7;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P3_7[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P3_constr_7;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P4;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P4_specs_9;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P4_9[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P4_constr_9;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P5;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P5_specs_11;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P5_11[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P5_constr_11;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P6;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P6_specs_13;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P6_13[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P6_constr_13;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P7;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P7_specs_15;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P7_15[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P7_constr_15;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P8;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P8_specs_17;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P8_17[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P8_constr_17;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P9;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P9_specs_19;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P9_19[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P9_constr_19;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P10;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P10_specs_21;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P10_21[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P10_constr_21;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P11;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P11_specs_23;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P11_23[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P11_constr_23;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P12;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P12_specs_25;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P12_25[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P12_constr_25;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P13;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P13_specs_27;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P13_27[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P13_constr_27;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P14;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P14_specs_29;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P14_29[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P14_constr_29;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P15;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P15_specs_31;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P15_31[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P15_constr_31;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P16;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P16_specs_33;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P16_33[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P16_constr_33;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P17;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P17_specs_35;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P17_35[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P17_constr_35;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P18;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P18_specs_37;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P18_37[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P18_constr_37;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P19;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P19_specs_39;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P19_39[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P19_constr_39;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P20;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P20_specs_41;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P20_41[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P20_constr_41;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P21;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P21_specs_43;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P21_43[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P21_constr_43;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P22;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P22_specs_45;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P22_45[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P22_constr_45;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P23;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P23_specs_47;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P23_47[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P23_constr_47;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P24;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P24_specs_49;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P24_49[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P24_constr_49;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P25;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P25_specs_51;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P25_51[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P25_constr_51;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P26;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P26_specs_53;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P26_53[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P26_constr_53;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P27;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P27_specs_55;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P27_55[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P27_constr_55;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P28;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P28_specs_57;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P28_57[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P28_constr_57;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P29;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P29_specs_59;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P29_59[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P29_constr_59;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P30;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P30_specs_61;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P30_61[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P30_constr_61;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P31;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P31_specs_63;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P31_63[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P31_constr_63;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P32;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P32_specs_65;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P32_65[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P32_constr_65;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P33;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P33_specs_67;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P33_67[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P33_constr_67;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P34;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P34_specs_69;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P34_69[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P34_constr_69;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P35;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P35_specs_71;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P35_71[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P35_constr_71;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P36;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P36_specs_73;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P36_73[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P36_constr_73;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P37;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P37_specs_75;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P37_75[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P37_constr_75;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P38;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P38_specs_77;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P38_77[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P38_constr_77;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P39;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P39_specs_79;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P39_79[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P39_constr_79;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P40;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P40_specs_81;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P40_81[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P40_constr_81;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P41;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P41_specs_83;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P41_83[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P41_constr_83;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P42;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P42_specs_85;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P42_85[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P42_constr_85;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P43;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P43_specs_87;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P43_87[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P43_constr_87;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P44;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P44_specs_89;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P44_89[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P44_constr_89;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P45;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P45_specs_91;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P45_91[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P45_constr_91;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P46;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P46_specs_93;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P46_93[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P46_constr_93;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P47;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P47_specs_95;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P47_95[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P47_constr_95;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P48;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P48_specs_97;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P48_97[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P48_constr_97;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P49;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P49_specs_99;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P49_99[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P49_constr_99;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P50;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P50_specs_101;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P50_101[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P50_constr_101;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P51;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P51_specs_103;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P51_103[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P51_constr_103;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P52;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P52_specs_105;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P52_105[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P52_constr_105;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P53;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P53_specs_107;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P53_107[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P53_constr_107;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P54;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P54_specs_109;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P54_109[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P54_constr_109;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P55;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P55_specs_111;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P55_111[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P55_constr_111;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P56;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P56_specs_113;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P56_113[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P56_constr_113;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P57;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P57_specs_115;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P57_115[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P57_constr_115;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P58;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P58_specs_117;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P58_117[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P58_constr_117;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P59;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P59_specs_119;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P59_119[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P59_constr_119;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P60;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P60_specs_121;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P60_121[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P60_constr_121;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P61;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P61_specs_123;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P61_123[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P61_constr_123;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P62;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P62_specs_125;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P62_125[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P62_constr_125;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P63;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P63_specs_127;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P63_127[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P63_constr_127;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P64;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P64_specs_129;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P64_129[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P64_constr_129;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P65;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P65_specs_131;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P65_131[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P65_constr_131;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P66;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P66_specs_133;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P66_133[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P66_constr_133;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P67;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P67_specs_135;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P67_135[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P67_constr_135;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P68;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P68_specs_137;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P68_137[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P68_constr_137;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P69;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P69_specs_139;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P69_139[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P69_constr_139;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P70;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P70_specs_141;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P70_141[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P70_constr_141;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P71;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P71_specs_143;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P71_143[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P71_constr_143;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P72;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P72_specs_145;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P72_145[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P72_constr_145;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P73;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P73_specs_147;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P73_147[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P73_constr_147;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P74;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P74_specs_149;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P74_149[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P74_constr_149;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P75;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P75_specs_151;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P75_151[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P75_constr_151;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P76;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P76_specs_153;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P76_153[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P76_constr_153;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P77;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P77_specs_155;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P77_155[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P77_constr_155;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P78;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P78_specs_157;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P78_157[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P78_constr_157;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P79;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P79_specs_159;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P79_159[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P79_constr_159;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P80;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P80_specs_161;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P80_161[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P80_constr_161;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P81;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P81_specs_163;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P81_163[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P81_constr_163;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P82;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P82_specs_165;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P82_165[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P82_constr_165;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P83;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P83_specs_167;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P83_167[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P83_constr_167;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P84;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P84_specs_169;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P84_169[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P84_constr_169;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P85;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P85_specs_171;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P85_171[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P85_constr_171;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P86;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P86_specs_173;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P86_173[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P86_constr_173;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P87;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P87_specs_175;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P87_175[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P87_constr_175;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P88;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P88_specs_177;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P88_177[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P88_constr_177;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P89;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P89_specs_179;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P89_179[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P89_constr_179;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P90;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P90_specs_181;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P90_181[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P90_constr_181;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P91;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P91_specs_183;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P91_183[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P91_constr_183;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P92;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P92_specs_185;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P92_185[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P92_constr_185;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P93;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P93_specs_187;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P93_187[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P93_constr_187;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P94;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P94_specs_189;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P94_189[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P94_constr_189;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P95;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P95_specs_191;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P95_191[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P95_constr_191;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P96;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P96_specs_193;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P96_193[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P96_constr_193;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P97;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P97_specs_195;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P97_195[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P97_constr_195;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P98;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P98_specs_197;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P98_197[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P98_constr_197;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P99;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P99_specs_199;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P99_199[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P99_constr_199;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P100;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P100_specs_201;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P100_201[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P100_constr_201;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P101;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P101_specs_203;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P101_203[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P101_constr_203;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P102;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P102_specs_205;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P102_205[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P102_constr_205;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P103;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P103_specs_207;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P103_207[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P103_constr_207;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P104;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P104_specs_209;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P104_209[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P104_constr_209;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Container_8180P105;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ProtocolIE_Container_8180P105_specs_211;
+extern asn_TYPE_member_t asn_MBR_X2N_ProtocolIE_Container_8180P105_211[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_Container_8180P105_constr_211;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerList.c b/asn1c_defs/X2N_ProtocolIE-ContainerList.c
new file mode 100644
index 0000000..4520986
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerList.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-ContainerList.h"
+
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerList.h b/asn1c_defs/X2N_ProtocolIE-ContainerList.h
new file mode 100644
index 0000000..22b791a
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerList.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_ContainerList_H_
+#define	_X2N_ProtocolIE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerPair.c b/asn1c_defs/X2N_ProtocolIE-ContainerPair.c
new file mode 100644
index 0000000..22f5e2e
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerPair.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-ContainerPair.h"
+
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerPair.h b/asn1c_defs/X2N_ProtocolIE-ContainerPair.h
new file mode 100644
index 0000000..d9ed7f0
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerPair.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_ContainerPair_H_
+#define	_X2N_ProtocolIE_ContainerPair_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_ContainerPair_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerPairList.c b/asn1c_defs/X2N_ProtocolIE-ContainerPairList.c
new file mode 100644
index 0000000..0686e13
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerPairList.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-ContainerPairList.h"
+
diff --git a/asn1c_defs/X2N_ProtocolIE-ContainerPairList.h b/asn1c_defs/X2N_ProtocolIE-ContainerPairList.h
new file mode 100644
index 0000000..b0aac3b
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ContainerPairList.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_ContainerPairList_H_
+#define	_X2N_ProtocolIE_ContainerPairList_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_ContainerPairList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-Field.c b/asn1c_defs/X2N_ProtocolIE-Field.c
new file mode 100644
index 0000000..838d904
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Field.c
@@ -0,0 +1,43048 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-Field.h"
+
+static const long asn_VAL_23_X2N_id_E_RABs_ToBeSetup_Item = 4;
+static const long asn_VAL_23_X2N_ignore = 1;
+static const long asn_VAL_23_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeSetup_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_23_X2N_id_E_RABs_ToBeSetup_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_23_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeSetup_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_23_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeSetup_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeSetup_ItemIEs_1_rows }
+};
+static const long asn_VAL_35_X2N_id_E_RABs_Admitted_Item = 0;
+static const long asn_VAL_35_X2N_ignore = 1;
+static const long asn_VAL_35_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_35_X2N_id_E_RABs_Admitted_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_35_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_35_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ItemIEs_1_rows }
+};
+static const long asn_VAL_56_X2N_id_E_RABs_SubjectToStatusTransfer_Item = 19;
+static const long asn_VAL_56_X2N_ignore = 1;
+static const long asn_VAL_56_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_56_X2N_id_E_RABs_SubjectToStatusTransfer_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_56_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_56_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_1_rows }
+};
+static const long asn_VAL_90_X2N_id_CellInformation_Item = 7;
+static const long asn_VAL_90_X2N_ignore = 1;
+static const long asn_VAL_90_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_CellInformation_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_90_X2N_id_CellInformation_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_90_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellInformation_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_90_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellInformation_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_CellInformation_ItemIEs_1_rows }
+};
+static const long asn_VAL_110_X2N_id_CellToReport_Item = 31;
+static const long asn_VAL_110_X2N_ignore = 1;
+static const long asn_VAL_110_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_CellToReport_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_110_X2N_id_CellToReport_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_110_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellToReport_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_110_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellToReport_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_CellToReport_ItemIEs_1_rows }
+};
+static const long asn_VAL_115_X2N_id_MeasurementInitiationResult_Item = 66;
+static const long asn_VAL_115_X2N_ignore = 1;
+static const long asn_VAL_115_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_MeasurementInitiationResult_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_115_X2N_id_MeasurementInitiationResult_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_115_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeasurementInitiationResult_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_115_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MeasurementInitiationResult_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_MeasurementInitiationResult_ItemIEs_1_rows }
+};
+static const long asn_VAL_116_X2N_id_MeasurementFailureCause_Item = 67;
+static const long asn_VAL_116_X2N_ignore = 1;
+static const long asn_VAL_116_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_MeasurementFailureCause_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_116_X2N_id_MeasurementFailureCause_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_116_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeasurementFailureCause_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_116_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MeasurementFailureCause_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_MeasurementFailureCause_ItemIEs_1_rows }
+};
+static const long asn_VAL_122_X2N_id_CompleteFailureCauseInformation_Item = 69;
+static const long asn_VAL_122_X2N_ignore = 1;
+static const long asn_VAL_122_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_CompleteFailureCauseInformation_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_122_X2N_id_CompleteFailureCauseInformation_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_122_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CompleteFailureCauseInformation_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_122_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CompleteFailureCauseInformation_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_CompleteFailureCauseInformation_ItemIEs_1_rows }
+};
+static const long asn_VAL_126_X2N_id_CellMeasurementResult_Item = 33;
+static const long asn_VAL_126_X2N_ignore = 1;
+static const long asn_VAL_126_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_CellMeasurementResult_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_126_X2N_id_CellMeasurementResult_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_126_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellMeasurementResult_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_126_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellMeasurementResult_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_CellMeasurementResult_ItemIEs_1_rows }
+};
+static const long asn_VAL_168_X2N_id_E_RABs_ToBeAdded_Item = 118;
+static const long asn_VAL_168_X2N_reject = 0;
+static const long asn_VAL_168_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_168_X2N_id_E_RABs_ToBeAdded_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_168_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_168_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_ItemIEs_1_rows }
+};
+static const long asn_VAL_180_X2N_id_E_RABs_Admitted_ToBeAdded_Item = 121;
+static const long asn_VAL_180_X2N_ignore = 1;
+static const long asn_VAL_180_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_180_X2N_id_E_RABs_Admitted_ToBeAdded_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_180_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_180_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_1_rows }
+};
+static const long asn_VAL_202_X2N_id_E_RABs_ToBeAdded_ModReqItem = 125;
+static const long asn_VAL_202_X2N_ignore = 1;
+static const long asn_VAL_202_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_202_X2N_id_E_RABs_ToBeAdded_ModReqItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_202_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_202_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItemIEs_1_rows }
+};
+static const long asn_VAL_203_X2N_id_E_RABs_ToBeModified_ModReqItem = 126;
+static const long asn_VAL_203_X2N_ignore = 1;
+static const long asn_VAL_203_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_ModReqItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_203_X2N_id_E_RABs_ToBeModified_ModReqItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_203_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_203_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_ModReqItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeModified_ModReqItemIEs_1_rows }
+};
+static const long asn_VAL_204_X2N_id_E_RABs_ToBeReleased_ModReqItem = 127;
+static const long asn_VAL_204_X2N_ignore = 1;
+static const long asn_VAL_204_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_ModReqItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_204_X2N_id_E_RABs_ToBeReleased_ModReqItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_204_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_204_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_ModReqItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_ModReqItemIEs_1_rows }
+};
+static const long asn_VAL_215_X2N_id_E_RABs_Admitted_ToBeAdded_ModAckItem = 131;
+static const long asn_VAL_215_X2N_ignore = 1;
+static const long asn_VAL_215_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_215_X2N_id_E_RABs_Admitted_ToBeAdded_ModAckItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_215_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_215_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1_rows }
+};
+static const long asn_VAL_216_X2N_id_E_RABs_Admitted_ToBeModified_ModAckItem = 132;
+static const long asn_VAL_216_X2N_ignore = 1;
+static const long asn_VAL_216_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_216_X2N_id_E_RABs_Admitted_ToBeModified_ModAckItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_216_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_216_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1_rows }
+};
+static const long asn_VAL_217_X2N_id_E_RABs_Admitted_ToBeReleased_ModAckItem = 133;
+static const long asn_VAL_217_X2N_ignore = 1;
+static const long asn_VAL_217_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_217_X2N_id_E_RABs_Admitted_ToBeReleased_ModAckItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_217_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToReleased_ModAckItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_217_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1_rows }
+};
+static const long asn_VAL_232_X2N_id_E_RABs_ToBeReleased_ModReqdItem = 135;
+static const long asn_VAL_232_X2N_ignore = 1;
+static const long asn_VAL_232_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_232_X2N_id_E_RABs_ToBeReleased_ModReqdItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_232_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_232_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_1_rows }
+};
+static const long asn_VAL_254_X2N_id_E_RABs_ToBeReleased_RelReqItem = 138;
+static const long asn_VAL_254_X2N_ignore = 1;
+static const long asn_VAL_254_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_RelReqItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_254_X2N_id_E_RABs_ToBeReleased_RelReqItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_254_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_254_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_RelReqItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_RelReqItemIEs_1_rows }
+};
+static const long asn_VAL_266_X2N_id_E_RABs_ToBeReleased_RelConfItem = 140;
+static const long asn_VAL_266_X2N_ignore = 1;
+static const long asn_VAL_266_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_RelConfItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_266_X2N_id_E_RABs_ToBeReleased_RelConfItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_266_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_266_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_RelConfItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_RelConfItemIEs_1_rows }
+};
+static const long asn_VAL_272_X2N_id_E_RABs_SubjectToCounterCheckItem = 142;
+static const long asn_VAL_272_X2N_ignore = 1;
+static const long asn_VAL_272_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_SubjectToCounterCheckItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_272_X2N_id_E_RABs_SubjectToCounterCheckItem },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_272_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_272_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_SubjectToCounterCheckItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_SubjectToCounterCheckItemIEs_1_rows }
+};
+static const long asn_VAL_301_X2N_id_E_RABs_ToBeSetupRetrieve_Item = 174;
+static const long asn_VAL_301_X2N_ignore = 1;
+static const long asn_VAL_301_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_301_X2N_id_E_RABs_ToBeSetupRetrieve_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_301_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_301_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_1_rows }
+};
+static const long asn_VAL_322_X2N_id_E_RABs_ToBeAdded_SgNBAddReq_Item = 209;
+static const long asn_VAL_322_X2N_reject = 0;
+static const long asn_VAL_322_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_322_X2N_id_E_RABs_ToBeAdded_SgNBAddReq_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_322_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_322_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1_rows }
+};
+static const long asn_VAL_333_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item = 213;
+static const long asn_VAL_333_X2N_ignore = 1;
+static const long asn_VAL_333_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_333_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_333_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_333_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_355_X2N_id_E_RABs_ToBeAdded_SgNBModReq_Item = 216;
+static const long asn_VAL_355_X2N_ignore = 1;
+static const long asn_VAL_355_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_355_X2N_id_E_RABs_ToBeAdded_SgNBModReq_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_355_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_355_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1_rows }
+};
+static const long asn_VAL_356_X2N_id_E_RABs_ToBeModified_SgNBModReq_Item = 217;
+static const long asn_VAL_356_X2N_ignore = 1;
+static const long asn_VAL_356_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_356_X2N_id_E_RABs_ToBeModified_SgNBModReq_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_356_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_356_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1_rows }
+};
+static const long asn_VAL_357_X2N_id_E_RABs_ToBeReleased_SgNBModReq_Item = 218;
+static const long asn_VAL_357_X2N_ignore = 1;
+static const long asn_VAL_357_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_357_X2N_id_E_RABs_ToBeReleased_SgNBModReq_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_357_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_357_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1_rows }
+};
+static const long asn_VAL_371_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item = 222;
+static const long asn_VAL_371_X2N_ignore = 1;
+static const long asn_VAL_371_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_371_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_371_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_371_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_372_X2N_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item = 223;
+static const long asn_VAL_372_X2N_ignore = 1;
+static const long asn_VAL_372_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_372_X2N_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_372_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_372_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_373_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item = 224;
+static const long asn_VAL_373_X2N_ignore = 1;
+static const long asn_VAL_373_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_373_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_373_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_373_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_389_X2N_id_E_RABs_ToBeReleased_SgNBModReqd_Item = 227;
+static const long asn_VAL_389_X2N_ignore = 1;
+static const long asn_VAL_389_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_389_X2N_id_E_RABs_ToBeReleased_SgNBModReqd_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_389_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_389_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1_rows }
+};
+static const long asn_VAL_390_X2N_id_E_RABs_ToBeModified_SgNBModReqd_Item = 228;
+static const long asn_VAL_390_X2N_ignore = 1;
+static const long asn_VAL_390_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_390_X2N_id_E_RABs_ToBeModified_SgNBModReqd_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_390_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_390_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1_rows }
+};
+static const long asn_VAL_398_X2N_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item = 295;
+static const long asn_VAL_398_X2N_ignore = 1;
+static const long asn_VAL_398_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_398_X2N_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_398_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_398_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1_rows }
+};
+static const long asn_VAL_412_X2N_id_E_RABs_ToBeReleased_SgNBRelReq_Item = 232;
+static const long asn_VAL_412_X2N_ignore = 1;
+static const long asn_VAL_412_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_412_X2N_id_E_RABs_ToBeReleased_SgNBRelReq_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_412_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_412_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1_rows }
+};
+static const long asn_VAL_418_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item = 319;
+static const long asn_VAL_418_X2N_ignore = 1;
+static const long asn_VAL_418_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_418_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_418_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_418_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1_rows }
+};
+static const long asn_VAL_429_X2N_id_E_RABs_ToBeReleased_SgNBRelReqd_Item = 321;
+static const long asn_VAL_429_X2N_ignore = 1;
+static const long asn_VAL_429_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_429_X2N_id_E_RABs_ToBeReleased_SgNBRelReqd_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_429_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_429_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1_rows }
+};
+static const long asn_VAL_435_X2N_id_E_RABs_ToBeReleased_SgNBRelConf_Item = 234;
+static const long asn_VAL_435_X2N_ignore = 1;
+static const long asn_VAL_435_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_435_X2N_id_E_RABs_ToBeReleased_SgNBRelConf_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_435_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_435_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1_rows }
+};
+static const long asn_VAL_440_X2N_id_E_RABs_SubjectToSgNBCounterCheck_Item = 236;
+static const long asn_VAL_440_X2N_ignore = 1;
+static const long asn_VAL_440_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_440_X2N_id_E_RABs_SubjectToSgNBCounterCheck_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_440_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_440_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1_rows }
+};
+static const long asn_VAL_452_X2N_id_E_RABs_ToBeReleased_SgNBChaConf_Item = 230;
+static const long asn_VAL_452_X2N_ignore = 1;
+static const long asn_VAL_452_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_452_X2N_id_E_RABs_ToBeReleased_SgNBChaConf_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_452_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_452_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1_rows }
+};
+static const long asn_VAL_536_X2N_id_E_RABs_DataForwardingAddress_Item = 308;
+static const long asn_VAL_536_X2N_ignore = 1;
+static const long asn_VAL_536_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABs_DataForwardingAddress_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_536_X2N_id_E_RABs_DataForwardingAddress_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_536_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_DataForwardingAddress_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_536_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABs_DataForwardingAddress_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABs_DataForwardingAddress_ItemIEs_1_rows }
+};
+static const long asn_VAL_538_X2N_id_E_RAB_Item = 2;
+static const long asn_VAL_538_X2N_ignore = 1;
+static const long asn_VAL_538_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RAB_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_538_X2N_id_E_RAB_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_538_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_538_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RAB_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RAB_ItemIEs_1_rows }
+};
+static const long asn_VAL_539_X2N_id_E_RABUsageReport_Item = 263;
+static const long asn_VAL_539_X2N_ignore = 1;
+static const long asn_VAL_539_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_E_RABUsageReport_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_539_X2N_id_E_RABUsageReport_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_539_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABUsageReport_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_539_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_E_RABUsageReport_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_E_RABUsageReport_ItemIEs_1_rows }
+};
+static const long asn_VAL_540_X2N_id_SecondaryRATUsageReport_Item = 266;
+static const long asn_VAL_540_X2N_reject = 0;
+static const long asn_VAL_540_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_SecondaryRATUsageReport_ItemIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_540_X2N_id_SecondaryRATUsageReport_Item },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_540_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SecondaryRATUsageReport_Item },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_540_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SecondaryRATUsageReport_ItemIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_SecondaryRATUsageReport_ItemIEs_1_rows }
+};
+static const long asn_VAL_1_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_1_X2N_reject = 0;
+static const long asn_VAL_1_X2N_mandatory = 2;
+static const long asn_VAL_2_X2N_id_Cause = 5;
+static const long asn_VAL_2_X2N_ignore = 1;
+static const long asn_VAL_2_X2N_mandatory = 2;
+static const long asn_VAL_3_X2N_id_TargetCell_ID = 11;
+static const long asn_VAL_3_X2N_reject = 0;
+static const long asn_VAL_3_X2N_mandatory = 2;
+static const long asn_VAL_4_X2N_id_GUMMEI_ID = 23;
+static const long asn_VAL_4_X2N_reject = 0;
+static const long asn_VAL_4_X2N_mandatory = 2;
+static const long asn_VAL_5_X2N_id_UE_ContextInformation = 14;
+static const long asn_VAL_5_X2N_reject = 0;
+static const long asn_VAL_5_X2N_mandatory = 2;
+static const long asn_VAL_6_X2N_id_UE_HistoryInformation = 15;
+static const long asn_VAL_6_X2N_ignore = 1;
+static const long asn_VAL_6_X2N_mandatory = 2;
+static const long asn_VAL_7_X2N_id_TraceActivation = 13;
+static const long asn_VAL_7_X2N_ignore = 1;
+static const long asn_VAL_7_X2N_optional = 0;
+static const long asn_VAL_8_X2N_id_SRVCCOperationPossible = 36;
+static const long asn_VAL_8_X2N_ignore = 1;
+static const long asn_VAL_8_X2N_optional = 0;
+static const long asn_VAL_9_X2N_id_CSGMembershipStatus = 71;
+static const long asn_VAL_9_X2N_reject = 0;
+static const long asn_VAL_9_X2N_optional = 0;
+static const long asn_VAL_10_X2N_id_MobilityInformation = 82;
+static const long asn_VAL_10_X2N_ignore = 1;
+static const long asn_VAL_10_X2N_optional = 0;
+static const long asn_VAL_11_X2N_id_Masked_IMEISV = 98;
+static const long asn_VAL_11_X2N_ignore = 1;
+static const long asn_VAL_11_X2N_optional = 0;
+static const long asn_VAL_12_X2N_id_UE_HistoryInformationFromTheUE = 105;
+static const long asn_VAL_12_X2N_ignore = 1;
+static const long asn_VAL_12_X2N_optional = 0;
+static const long asn_VAL_13_X2N_id_ExpectedUEBehaviour = 104;
+static const long asn_VAL_13_X2N_ignore = 1;
+static const long asn_VAL_13_X2N_optional = 0;
+static const long asn_VAL_14_X2N_id_ProSeAuthorized = 103;
+static const long asn_VAL_14_X2N_ignore = 1;
+static const long asn_VAL_14_X2N_optional = 0;
+static const long asn_VAL_15_X2N_id_UE_ContextReferenceAtSeNB = 153;
+static const long asn_VAL_15_X2N_ignore = 1;
+static const long asn_VAL_15_X2N_optional = 0;
+static const long asn_VAL_16_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_16_X2N_reject = 0;
+static const long asn_VAL_16_X2N_optional = 0;
+static const long asn_VAL_17_X2N_id_V2XServicesAuthorized = 176;
+static const long asn_VAL_17_X2N_ignore = 1;
+static const long asn_VAL_17_X2N_optional = 0;
+static const long asn_VAL_18_X2N_id_UE_ContextReferenceAtWT = 182;
+static const long asn_VAL_18_X2N_ignore = 1;
+static const long asn_VAL_18_X2N_optional = 0;
+static const long asn_VAL_19_X2N_id_NRUESecurityCapabilities = 248;
+static const long asn_VAL_19_X2N_ignore = 1;
+static const long asn_VAL_19_X2N_optional = 0;
+static const long asn_VAL_20_X2N_id_UE_ContextReferenceAtSgNB = 254;
+static const long asn_VAL_20_X2N_ignore = 1;
+static const long asn_VAL_20_X2N_optional = 0;
+static const long asn_VAL_21_X2N_id_AerialUEsubscriptionInformation = 277;
+static const long asn_VAL_21_X2N_ignore = 1;
+static const long asn_VAL_21_X2N_optional = 0;
+static const long asn_VAL_22_X2N_id_Subscription_Based_UE_DifferentiationInfo = 309;
+static const long asn_VAL_22_X2N_ignore = 1;
+static const long asn_VAL_22_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_1_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_1_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_1_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_2_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_2_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_2_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_3_X2N_id_TargetCell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_3_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_3_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_4_X2N_id_GUMMEI_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_4_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUMMEI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_4_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_5_X2N_id_UE_ContextInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_5_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_5_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_6_X2N_id_UE_HistoryInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_6_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_HistoryInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_6_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_7_X2N_id_TraceActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_7_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TraceActivation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_7_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_8_X2N_id_SRVCCOperationPossible },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_8_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SRVCCOperationPossible },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_8_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_9_X2N_id_CSGMembershipStatus },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_9_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CSGMembershipStatus },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_9_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_10_X2N_id_MobilityInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_10_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MobilityInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_10_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_11_X2N_id_Masked_IMEISV },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_11_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Masked_IMEISV },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_11_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_12_X2N_id_UE_HistoryInformationFromTheUE },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_12_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_HistoryInformationFromTheUE },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_12_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_13_X2N_id_ExpectedUEBehaviour },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_13_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ExpectedUEBehaviour },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_13_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_14_X2N_id_ProSeAuthorized },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_14_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ProSeAuthorized },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_14_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_15_X2N_id_UE_ContextReferenceAtSeNB },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_15_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextReferenceAtSeNB },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_15_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_16_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_16_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_16_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_17_X2N_id_V2XServicesAuthorized },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_17_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_V2XServicesAuthorized },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_17_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_18_X2N_id_UE_ContextReferenceAtWT },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_18_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextReferenceAtWT },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_18_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_19_X2N_id_NRUESecurityCapabilities },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_19_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_NRUESecurityCapabilities },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_19_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_20_X2N_id_UE_ContextReferenceAtSgNB },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_20_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextReferenceAtSgNB },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_20_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_21_X2N_id_AerialUEsubscriptionInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_21_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_AerialUEsubscriptionInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_21_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_22_X2N_id_Subscription_Based_UE_DifferentiationInfo },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_22_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_22_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverRequest_IEs_1[] = {
+	{ 22, 4, asn_IOS_X2N_HandoverRequest_IEs_1_rows }
+};
+static const long asn_VAL_24_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_24_X2N_ignore = 1;
+static const long asn_VAL_24_X2N_mandatory = 2;
+static const long asn_VAL_25_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_25_X2N_ignore = 1;
+static const long asn_VAL_25_X2N_mandatory = 2;
+static const long asn_VAL_26_X2N_id_E_RABs_Admitted_List = 1;
+static const long asn_VAL_26_X2N_ignore = 1;
+static const long asn_VAL_26_X2N_mandatory = 2;
+static const long asn_VAL_27_X2N_id_E_RABs_NotAdmitted_List = 3;
+static const long asn_VAL_27_X2N_ignore = 1;
+static const long asn_VAL_27_X2N_optional = 0;
+static const long asn_VAL_28_X2N_id_TargeteNBtoSource_eNBTransparentContainer = 12;
+static const long asn_VAL_28_X2N_ignore = 1;
+static const long asn_VAL_28_X2N_mandatory = 2;
+static const long asn_VAL_29_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_29_X2N_ignore = 1;
+static const long asn_VAL_29_X2N_optional = 0;
+static const long asn_VAL_30_X2N_id_UE_ContextKeptIndicator = 154;
+static const long asn_VAL_30_X2N_ignore = 1;
+static const long asn_VAL_30_X2N_optional = 0;
+static const long asn_VAL_31_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_31_X2N_ignore = 1;
+static const long asn_VAL_31_X2N_optional = 0;
+static const long asn_VAL_32_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_32_X2N_ignore = 1;
+static const long asn_VAL_32_X2N_optional = 0;
+static const long asn_VAL_33_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_33_X2N_reject = 0;
+static const long asn_VAL_33_X2N_optional = 0;
+static const long asn_VAL_34_X2N_id_WT_UE_ContextKeptIndicator = 183;
+static const long asn_VAL_34_X2N_ignore = 1;
+static const long asn_VAL_34_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_24_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_24_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_24_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_25_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_25_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_25_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_26_X2N_id_E_RABs_Admitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_26_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_26_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_27_X2N_id_E_RABs_NotAdmitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_27_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_27_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_28_X2N_id_TargeteNBtoSource_eNBTransparentContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_28_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_28_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_29_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_29_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_29_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_30_X2N_id_UE_ContextKeptIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_30_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextKeptIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_30_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_31_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_31_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_31_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_32_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_32_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_32_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_33_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_33_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_33_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_34_X2N_id_WT_UE_ContextKeptIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_34_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextKeptIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_34_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverRequestAcknowledge_IEs_1[] = {
+	{ 11, 4, asn_IOS_X2N_HandoverRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_36_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_36_X2N_ignore = 1;
+static const long asn_VAL_36_X2N_mandatory = 2;
+static const long asn_VAL_37_X2N_id_Cause = 5;
+static const long asn_VAL_37_X2N_ignore = 1;
+static const long asn_VAL_37_X2N_mandatory = 2;
+static const long asn_VAL_38_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_38_X2N_ignore = 1;
+static const long asn_VAL_38_X2N_optional = 0;
+static const long asn_VAL_39_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_39_X2N_ignore = 1;
+static const long asn_VAL_39_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverPreparationFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_36_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_36_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_36_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_37_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_37_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_37_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_38_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_38_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_38_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_39_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_39_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_39_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverPreparationFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_HandoverPreparationFailure_IEs_1_rows }
+};
+static const long asn_VAL_40_X2N_id_HandoverReportType = 54;
+static const long asn_VAL_40_X2N_ignore = 1;
+static const long asn_VAL_40_X2N_mandatory = 2;
+static const long asn_VAL_41_X2N_id_Cause = 5;
+static const long asn_VAL_41_X2N_ignore = 1;
+static const long asn_VAL_41_X2N_mandatory = 2;
+static const long asn_VAL_42_X2N_id_SourceCellECGI = 52;
+static const long asn_VAL_42_X2N_ignore = 1;
+static const long asn_VAL_42_X2N_mandatory = 2;
+static const long asn_VAL_43_X2N_id_FailureCellECGI = 53;
+static const long asn_VAL_43_X2N_ignore = 1;
+static const long asn_VAL_43_X2N_mandatory = 2;
+static const long asn_VAL_44_X2N_id_Re_establishmentCellECGI = 49;
+static const long asn_VAL_44_X2N_ignore = 1;
+static const long asn_VAL_44_X2N_conditional = 1;
+static const long asn_VAL_45_X2N_id_TargetCellInUTRAN = 81;
+static const long asn_VAL_45_X2N_ignore = 1;
+static const long asn_VAL_45_X2N_conditional = 1;
+static const long asn_VAL_46_X2N_id_SourceCellCRNTI = 83;
+static const long asn_VAL_46_X2N_ignore = 1;
+static const long asn_VAL_46_X2N_optional = 0;
+static const long asn_VAL_47_X2N_id_MobilityInformation = 82;
+static const long asn_VAL_47_X2N_ignore = 1;
+static const long asn_VAL_47_X2N_optional = 0;
+static const long asn_VAL_48_X2N_id_UE_RLF_Report_Container = 60;
+static const long asn_VAL_48_X2N_ignore = 1;
+static const long asn_VAL_48_X2N_optional = 0;
+static const long asn_VAL_49_X2N_id_UE_RLF_Report_Container_for_extended_bands = 107;
+static const long asn_VAL_49_X2N_ignore = 1;
+static const long asn_VAL_49_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverReport_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_40_X2N_id_HandoverReportType },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_40_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_HandoverReportType },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_40_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_41_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_41_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_41_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_42_X2N_id_SourceCellECGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_42_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_42_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_43_X2N_id_FailureCellECGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_43_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_43_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_44_X2N_id_Re_establishmentCellECGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_44_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_44_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_45_X2N_id_TargetCellInUTRAN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_45_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TargetCellInUTRAN },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_45_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_46_X2N_id_SourceCellCRNTI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_46_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CRNTI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_46_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_47_X2N_id_MobilityInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_47_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MobilityInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_47_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_48_X2N_id_UE_RLF_Report_Container },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_48_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_RLF_Report_Container },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_48_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_49_X2N_id_UE_RLF_Report_Container_for_extended_bands },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_49_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_49_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverReport_IEs_1[] = {
+	{ 10, 4, asn_IOS_X2N_HandoverReport_IEs_1_rows }
+};
+static const long asn_VAL_50_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_50_X2N_reject = 0;
+static const long asn_VAL_50_X2N_mandatory = 2;
+static const long asn_VAL_51_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_51_X2N_reject = 0;
+static const long asn_VAL_51_X2N_mandatory = 2;
+static const long asn_VAL_52_X2N_id_E_RABs_SubjectToStatusTransfer_List = 18;
+static const long asn_VAL_52_X2N_ignore = 1;
+static const long asn_VAL_52_X2N_mandatory = 2;
+static const long asn_VAL_53_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_53_X2N_reject = 0;
+static const long asn_VAL_53_X2N_optional = 0;
+static const long asn_VAL_54_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_54_X2N_reject = 0;
+static const long asn_VAL_54_X2N_optional = 0;
+static const long asn_VAL_55_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_55_X2N_ignore = 1;
+static const long asn_VAL_55_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SNStatusTransfer_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_50_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_50_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_50_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_51_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_51_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_51_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_52_X2N_id_E_RABs_SubjectToStatusTransfer_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_52_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_52_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_53_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_53_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_53_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_54_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_54_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_54_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_55_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_55_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_55_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SNStatusTransfer_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SNStatusTransfer_IEs_1_rows }
+};
+static const long asn_VAL_57_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_57_X2N_reject = 0;
+static const long asn_VAL_57_X2N_mandatory = 2;
+static const long asn_VAL_58_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_58_X2N_reject = 0;
+static const long asn_VAL_58_X2N_mandatory = 2;
+static const long asn_VAL_59_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_59_X2N_reject = 0;
+static const long asn_VAL_59_X2N_optional = 0;
+static const long asn_VAL_60_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_60_X2N_reject = 0;
+static const long asn_VAL_60_X2N_optional = 0;
+static const long asn_VAL_61_X2N_id_SIPTO_BearerDeactivationIndication = 164;
+static const long asn_VAL_61_X2N_ignore = 1;
+static const long asn_VAL_61_X2N_optional = 0;
+static const long asn_VAL_62_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_62_X2N_ignore = 1;
+static const long asn_VAL_62_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_UEContextRelease_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_57_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_57_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_57_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_58_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_58_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_58_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_59_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_59_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_59_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_60_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_60_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_60_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_61_X2N_id_SIPTO_BearerDeactivationIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_61_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SIPTOBearerDeactivationIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_61_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_62_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_62_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_62_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_UEContextRelease_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_UEContextRelease_IEs_1_rows }
+};
+static const long asn_VAL_63_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_63_X2N_reject = 0;
+static const long asn_VAL_63_X2N_mandatory = 2;
+static const long asn_VAL_64_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_64_X2N_ignore = 1;
+static const long asn_VAL_64_X2N_optional = 0;
+static const long asn_VAL_65_X2N_id_Cause = 5;
+static const long asn_VAL_65_X2N_ignore = 1;
+static const long asn_VAL_65_X2N_mandatory = 2;
+static const long asn_VAL_66_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_66_X2N_reject = 0;
+static const long asn_VAL_66_X2N_optional = 0;
+static const long asn_VAL_67_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_67_X2N_ignore = 1;
+static const long asn_VAL_67_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_HandoverCancel_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_63_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_63_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_63_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_64_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_64_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_64_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_65_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_65_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_65_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_66_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_66_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_66_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_67_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_67_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_67_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_HandoverCancel_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_HandoverCancel_IEs_1_rows }
+};
+static const long asn_VAL_68_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_68_X2N_ignore = 1;
+static const long asn_VAL_68_X2N_optional = 0;
+static const long asn_VAL_69_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_69_X2N_ignore = 1;
+static const long asn_VAL_69_X2N_optional = 0;
+static const long asn_VAL_70_X2N_id_Cause = 5;
+static const long asn_VAL_70_X2N_ignore = 1;
+static const long asn_VAL_70_X2N_optional = 0;
+static const long asn_VAL_71_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_71_X2N_ignore = 1;
+static const long asn_VAL_71_X2N_optional = 0;
+static const long asn_VAL_72_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_72_X2N_ignore = 1;
+static const long asn_VAL_72_X2N_optional = 0;
+static const long asn_VAL_73_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_73_X2N_ignore = 1;
+static const long asn_VAL_73_X2N_optional = 0;
+static const long asn_VAL_74_X2N_id_Old_SgNB_UE_X2AP_ID = 264;
+static const long asn_VAL_74_X2N_ignore = 1;
+static const long asn_VAL_74_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ErrorIndication_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_68_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_68_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_68_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_69_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_69_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_69_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_70_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_70_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_70_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_71_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_71_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_71_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_72_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_72_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_72_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_73_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_73_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_73_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_74_X2N_id_Old_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_74_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_74_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ErrorIndication_IEs_1[] = {
+	{ 7, 4, asn_IOS_X2N_ErrorIndication_IEs_1_rows }
+};
+static const long asn_VAL_75_X2N_id_Cause = 5;
+static const long asn_VAL_75_X2N_ignore = 1;
+static const long asn_VAL_75_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ResetRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_75_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_75_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_75_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResetRequest_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ResetRequest_IEs_1_rows }
+};
+static const long asn_VAL_76_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_76_X2N_ignore = 1;
+static const long asn_VAL_76_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ResetResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_76_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_76_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_76_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResetResponse_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ResetResponse_IEs_1_rows }
+};
+static const long asn_VAL_77_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_77_X2N_reject = 0;
+static const long asn_VAL_77_X2N_mandatory = 2;
+static const long asn_VAL_78_X2N_id_ServedCells = 20;
+static const long asn_VAL_78_X2N_reject = 0;
+static const long asn_VAL_78_X2N_mandatory = 2;
+static const long asn_VAL_79_X2N_id_GUGroupIDList = 24;
+static const long asn_VAL_79_X2N_reject = 0;
+static const long asn_VAL_79_X2N_optional = 0;
+static const long asn_VAL_80_X2N_id_LHN_ID = 159;
+static const long asn_VAL_80_X2N_ignore = 1;
+static const long asn_VAL_80_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2SetupRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_77_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_77_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_77_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_78_X2N_id_ServedCells },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_78_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedCells },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_78_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_79_X2N_id_GUGroupIDList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_79_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUGroupIDList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_79_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_80_X2N_id_LHN_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_80_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_LHN_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_80_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2SetupRequest_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_X2SetupRequest_IEs_1_rows }
+};
+static const long asn_VAL_81_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_81_X2N_reject = 0;
+static const long asn_VAL_81_X2N_mandatory = 2;
+static const long asn_VAL_82_X2N_id_ServedCells = 20;
+static const long asn_VAL_82_X2N_reject = 0;
+static const long asn_VAL_82_X2N_mandatory = 2;
+static const long asn_VAL_83_X2N_id_GUGroupIDList = 24;
+static const long asn_VAL_83_X2N_reject = 0;
+static const long asn_VAL_83_X2N_optional = 0;
+static const long asn_VAL_84_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_84_X2N_ignore = 1;
+static const long asn_VAL_84_X2N_optional = 0;
+static const long asn_VAL_85_X2N_id_LHN_ID = 159;
+static const long asn_VAL_85_X2N_ignore = 1;
+static const long asn_VAL_85_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2SetupResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_81_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_81_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_81_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_82_X2N_id_ServedCells },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_82_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedCells },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_82_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_83_X2N_id_GUGroupIDList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_83_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUGroupIDList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_83_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_84_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_84_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_84_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_85_X2N_id_LHN_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_85_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_LHN_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_85_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2SetupResponse_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_X2SetupResponse_IEs_1_rows }
+};
+static const long asn_VAL_86_X2N_id_Cause = 5;
+static const long asn_VAL_86_X2N_ignore = 1;
+static const long asn_VAL_86_X2N_mandatory = 2;
+static const long asn_VAL_87_X2N_id_TimeToWait = 22;
+static const long asn_VAL_87_X2N_ignore = 1;
+static const long asn_VAL_87_X2N_optional = 0;
+static const long asn_VAL_88_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_88_X2N_ignore = 1;
+static const long asn_VAL_88_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2SetupFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_86_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_86_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_86_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_87_X2N_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_87_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_87_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_88_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_88_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_88_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2SetupFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_X2SetupFailure_IEs_1_rows }
+};
+static const long asn_VAL_89_X2N_id_CellInformation = 6;
+static const long asn_VAL_89_X2N_ignore = 1;
+static const long asn_VAL_89_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_LoadInformation_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_89_X2N_id_CellInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_89_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellInformation_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_89_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_LoadInformation_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_LoadInformation_IEs_1_rows }
+};
+static const long asn_VAL_91_X2N_id_ServedCellsToAdd = 25;
+static const long asn_VAL_91_X2N_reject = 0;
+static const long asn_VAL_91_X2N_optional = 0;
+static const long asn_VAL_92_X2N_id_ServedCellsToModify = 26;
+static const long asn_VAL_92_X2N_reject = 0;
+static const long asn_VAL_92_X2N_optional = 0;
+static const long asn_VAL_93_X2N_id_ServedCellsToDelete = 27;
+static const long asn_VAL_93_X2N_reject = 0;
+static const long asn_VAL_93_X2N_optional = 0;
+static const long asn_VAL_94_X2N_id_GUGroupIDToAddList = 34;
+static const long asn_VAL_94_X2N_reject = 0;
+static const long asn_VAL_94_X2N_optional = 0;
+static const long asn_VAL_95_X2N_id_GUGroupIDToDeleteList = 35;
+static const long asn_VAL_95_X2N_reject = 0;
+static const long asn_VAL_95_X2N_optional = 0;
+static const long asn_VAL_96_X2N_id_CoverageModificationList = 143;
+static const long asn_VAL_96_X2N_reject = 0;
+static const long asn_VAL_96_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENBConfigurationUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_91_X2N_id_ServedCellsToAdd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_91_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedCells },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_91_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_92_X2N_id_ServedCellsToModify },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_92_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedCellsToModify },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_92_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_93_X2N_id_ServedCellsToDelete },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_93_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Old_ECGIs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_93_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_94_X2N_id_GUGroupIDToAddList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_94_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUGroupIDList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_94_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_95_X2N_id_GUGroupIDToDeleteList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_95_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUGroupIDList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_95_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_96_X2N_id_CoverageModificationList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_96_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CoverageModificationList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_96_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENBConfigurationUpdate_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_ENBConfigurationUpdate_IEs_1_rows }
+};
+static const long asn_VAL_97_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_97_X2N_ignore = 1;
+static const long asn_VAL_97_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENBConfigurationUpdateAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_97_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_97_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_97_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENBConfigurationUpdateAcknowledge_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENBConfigurationUpdateAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_98_X2N_id_Cause = 5;
+static const long asn_VAL_98_X2N_ignore = 1;
+static const long asn_VAL_98_X2N_mandatory = 2;
+static const long asn_VAL_99_X2N_id_TimeToWait = 22;
+static const long asn_VAL_99_X2N_ignore = 1;
+static const long asn_VAL_99_X2N_optional = 0;
+static const long asn_VAL_100_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_100_X2N_ignore = 1;
+static const long asn_VAL_100_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENBConfigurationUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_98_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_98_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_98_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_99_X2N_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_99_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_99_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_100_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_100_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_100_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENBConfigurationUpdateFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENBConfigurationUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_101_X2N_id_ENB1_Measurement_ID = 39;
+static const long asn_VAL_101_X2N_reject = 0;
+static const long asn_VAL_101_X2N_mandatory = 2;
+static const long asn_VAL_102_X2N_id_ENB2_Measurement_ID = 40;
+static const long asn_VAL_102_X2N_ignore = 1;
+static const long asn_VAL_102_X2N_conditional = 1;
+static const long asn_VAL_103_X2N_id_Registration_Request = 28;
+static const long asn_VAL_103_X2N_reject = 0;
+static const long asn_VAL_103_X2N_mandatory = 2;
+static const long asn_VAL_104_X2N_id_ReportCharacteristics = 38;
+static const long asn_VAL_104_X2N_reject = 0;
+static const long asn_VAL_104_X2N_optional = 0;
+static const long asn_VAL_105_X2N_id_CellToReport = 29;
+static const long asn_VAL_105_X2N_ignore = 1;
+static const long asn_VAL_105_X2N_mandatory = 2;
+static const long asn_VAL_106_X2N_id_ReportingPeriodicity = 30;
+static const long asn_VAL_106_X2N_ignore = 1;
+static const long asn_VAL_106_X2N_optional = 0;
+static const long asn_VAL_107_X2N_id_PartialSuccessIndicator = 64;
+static const long asn_VAL_107_X2N_ignore = 1;
+static const long asn_VAL_107_X2N_optional = 0;
+static const long asn_VAL_108_X2N_id_ReportingPeriodicityRSRPMR = 109;
+static const long asn_VAL_108_X2N_ignore = 1;
+static const long asn_VAL_108_X2N_optional = 0;
+static const long asn_VAL_109_X2N_id_ReportingPeriodicityCSIR = 145;
+static const long asn_VAL_109_X2N_ignore = 1;
+static const long asn_VAL_109_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ResourceStatusRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_101_X2N_id_ENB1_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_101_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_101_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_102_X2N_id_ENB2_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_102_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_102_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_103_X2N_id_Registration_Request },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_103_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Registration_Request },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_103_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_104_X2N_id_ReportCharacteristics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_104_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ReportCharacteristics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_104_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_105_X2N_id_CellToReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_105_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellToReport_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_105_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_106_X2N_id_ReportingPeriodicity },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_106_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ReportingPeriodicity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_106_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_107_X2N_id_PartialSuccessIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_107_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PartialSuccessIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_107_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_108_X2N_id_ReportingPeriodicityRSRPMR },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_108_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ReportingPeriodicityRSRPMR },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_108_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_109_X2N_id_ReportingPeriodicityCSIR },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_109_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ReportingPeriodicityCSIR },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_109_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResourceStatusRequest_IEs_1[] = {
+	{ 9, 4, asn_IOS_X2N_ResourceStatusRequest_IEs_1_rows }
+};
+static const long asn_VAL_111_X2N_id_ENB1_Measurement_ID = 39;
+static const long asn_VAL_111_X2N_reject = 0;
+static const long asn_VAL_111_X2N_mandatory = 2;
+static const long asn_VAL_112_X2N_id_ENB2_Measurement_ID = 40;
+static const long asn_VAL_112_X2N_reject = 0;
+static const long asn_VAL_112_X2N_mandatory = 2;
+static const long asn_VAL_113_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_113_X2N_ignore = 1;
+static const long asn_VAL_113_X2N_optional = 0;
+static const long asn_VAL_114_X2N_id_MeasurementInitiationResult_List = 65;
+static const long asn_VAL_114_X2N_ignore = 1;
+static const long asn_VAL_114_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ResourceStatusResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_111_X2N_id_ENB1_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_111_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_111_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_112_X2N_id_ENB2_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_112_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_112_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_113_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_113_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_113_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_114_X2N_id_MeasurementInitiationResult_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_114_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeasurementInitiationResult_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_114_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResourceStatusResponse_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_ResourceStatusResponse_IEs_1_rows }
+};
+static const long asn_VAL_117_X2N_id_ENB1_Measurement_ID = 39;
+static const long asn_VAL_117_X2N_reject = 0;
+static const long asn_VAL_117_X2N_mandatory = 2;
+static const long asn_VAL_118_X2N_id_ENB2_Measurement_ID = 40;
+static const long asn_VAL_118_X2N_reject = 0;
+static const long asn_VAL_118_X2N_mandatory = 2;
+static const long asn_VAL_119_X2N_id_Cause = 5;
+static const long asn_VAL_119_X2N_ignore = 1;
+static const long asn_VAL_119_X2N_mandatory = 2;
+static const long asn_VAL_120_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_120_X2N_ignore = 1;
+static const long asn_VAL_120_X2N_optional = 0;
+static const long asn_VAL_121_X2N_id_CompleteFailureCauseInformation_List = 68;
+static const long asn_VAL_121_X2N_ignore = 1;
+static const long asn_VAL_121_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ResourceStatusFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_117_X2N_id_ENB1_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_117_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_117_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_118_X2N_id_ENB2_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_118_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_118_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_119_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_119_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_119_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_120_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_120_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_120_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_121_X2N_id_CompleteFailureCauseInformation_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_121_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CompleteFailureCauseInformation_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_121_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResourceStatusFailure_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_ResourceStatusFailure_IEs_1_rows }
+};
+static const long asn_VAL_123_X2N_id_ENB1_Measurement_ID = 39;
+static const long asn_VAL_123_X2N_reject = 0;
+static const long asn_VAL_123_X2N_mandatory = 2;
+static const long asn_VAL_124_X2N_id_ENB2_Measurement_ID = 40;
+static const long asn_VAL_124_X2N_reject = 0;
+static const long asn_VAL_124_X2N_mandatory = 2;
+static const long asn_VAL_125_X2N_id_CellMeasurementResult = 32;
+static const long asn_VAL_125_X2N_ignore = 1;
+static const long asn_VAL_125_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ResourceStatusUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_123_X2N_id_ENB1_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_123_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_123_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_124_X2N_id_ENB2_Measurement_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_124_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Measurement_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_124_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_125_X2N_id_CellMeasurementResult },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_125_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellMeasurementResult_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_125_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ResourceStatusUpdate_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ResourceStatusUpdate_IEs_1_rows }
+};
+static const long asn_VAL_127_X2N_id_ENB1_Cell_ID = 43;
+static const long asn_VAL_127_X2N_reject = 0;
+static const long asn_VAL_127_X2N_mandatory = 2;
+static const long asn_VAL_128_X2N_id_ENB2_Cell_ID = 44;
+static const long asn_VAL_128_X2N_reject = 0;
+static const long asn_VAL_128_X2N_mandatory = 2;
+static const long asn_VAL_129_X2N_id_ENB1_Mobility_Parameters = 46;
+static const long asn_VAL_129_X2N_ignore = 1;
+static const long asn_VAL_129_X2N_optional = 0;
+static const long asn_VAL_130_X2N_id_ENB2_Proposed_Mobility_Parameters = 45;
+static const long asn_VAL_130_X2N_reject = 0;
+static const long asn_VAL_130_X2N_mandatory = 2;
+static const long asn_VAL_131_X2N_id_Cause = 5;
+static const long asn_VAL_131_X2N_reject = 0;
+static const long asn_VAL_131_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_MobilityChangeRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_127_X2N_id_ENB1_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_127_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_127_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_128_X2N_id_ENB2_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_128_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_128_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_129_X2N_id_ENB1_Mobility_Parameters },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_129_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MobilityParametersInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_129_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_130_X2N_id_ENB2_Proposed_Mobility_Parameters },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_130_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MobilityParametersInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_130_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_131_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_131_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_131_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MobilityChangeRequest_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_MobilityChangeRequest_IEs_1_rows }
+};
+static const long asn_VAL_132_X2N_id_ENB1_Cell_ID = 43;
+static const long asn_VAL_132_X2N_reject = 0;
+static const long asn_VAL_132_X2N_mandatory = 2;
+static const long asn_VAL_133_X2N_id_ENB2_Cell_ID = 44;
+static const long asn_VAL_133_X2N_reject = 0;
+static const long asn_VAL_133_X2N_mandatory = 2;
+static const long asn_VAL_134_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_134_X2N_ignore = 1;
+static const long asn_VAL_134_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_MobilityChangeAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_132_X2N_id_ENB1_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_132_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_132_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_133_X2N_id_ENB2_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_133_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_133_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_134_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_134_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_134_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MobilityChangeAcknowledge_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_MobilityChangeAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_135_X2N_id_ENB1_Cell_ID = 43;
+static const long asn_VAL_135_X2N_ignore = 1;
+static const long asn_VAL_135_X2N_mandatory = 2;
+static const long asn_VAL_136_X2N_id_ENB2_Cell_ID = 44;
+static const long asn_VAL_136_X2N_ignore = 1;
+static const long asn_VAL_136_X2N_mandatory = 2;
+static const long asn_VAL_137_X2N_id_Cause = 5;
+static const long asn_VAL_137_X2N_ignore = 1;
+static const long asn_VAL_137_X2N_mandatory = 2;
+static const long asn_VAL_138_X2N_id_ENB2_Mobility_Parameters_Modification_Range = 47;
+static const long asn_VAL_138_X2N_ignore = 1;
+static const long asn_VAL_138_X2N_optional = 0;
+static const long asn_VAL_139_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_139_X2N_ignore = 1;
+static const long asn_VAL_139_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_MobilityChangeFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_135_X2N_id_ENB1_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_135_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_135_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_136_X2N_id_ENB2_Cell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_136_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_136_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_137_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_137_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_137_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_138_X2N_id_ENB2_Mobility_Parameters_Modification_Range },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_138_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MobilityParametersModificationRange },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_138_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_139_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_139_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_139_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_MobilityChangeFailure_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_MobilityChangeFailure_IEs_1_rows }
+};
+static const long asn_VAL_140_X2N_id_FailureCellPCI = 48;
+static const long asn_VAL_140_X2N_ignore = 1;
+static const long asn_VAL_140_X2N_mandatory = 2;
+static const long asn_VAL_141_X2N_id_Re_establishmentCellECGI = 49;
+static const long asn_VAL_141_X2N_ignore = 1;
+static const long asn_VAL_141_X2N_mandatory = 2;
+static const long asn_VAL_142_X2N_id_FailureCellCRNTI = 50;
+static const long asn_VAL_142_X2N_ignore = 1;
+static const long asn_VAL_142_X2N_mandatory = 2;
+static const long asn_VAL_143_X2N_id_ShortMAC_I = 51;
+static const long asn_VAL_143_X2N_ignore = 1;
+static const long asn_VAL_143_X2N_optional = 0;
+static const long asn_VAL_144_X2N_id_UE_RLF_Report_Container = 60;
+static const long asn_VAL_144_X2N_ignore = 1;
+static const long asn_VAL_144_X2N_optional = 0;
+static const long asn_VAL_145_X2N_id_RRCConnSetupIndicator = 75;
+static const long asn_VAL_145_X2N_reject = 0;
+static const long asn_VAL_145_X2N_optional = 0;
+static const long asn_VAL_146_X2N_id_RRCConnReestabIndicator = 78;
+static const long asn_VAL_146_X2N_ignore = 1;
+static const long asn_VAL_146_X2N_optional = 0;
+static const long asn_VAL_147_X2N_id_UE_RLF_Report_Container_for_extended_bands = 107;
+static const long asn_VAL_147_X2N_ignore = 1;
+static const long asn_VAL_147_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RLFIndication_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_140_X2N_id_FailureCellPCI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_140_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PCI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_140_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_141_X2N_id_Re_establishmentCellECGI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_141_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_141_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_142_X2N_id_FailureCellCRNTI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_142_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CRNTI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_142_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_143_X2N_id_ShortMAC_I },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_143_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ShortMAC_I },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_143_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_144_X2N_id_UE_RLF_Report_Container },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_144_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_RLF_Report_Container },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_144_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_145_X2N_id_RRCConnSetupIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_145_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RRCConnSetupIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_145_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_146_X2N_id_RRCConnReestabIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_146_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RRCConnReestabIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_146_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_147_X2N_id_UE_RLF_Report_Container_for_extended_bands },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_147_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_147_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RLFIndication_IEs_1[] = {
+	{ 8, 4, asn_IOS_X2N_RLFIndication_IEs_1_rows }
+};
+static const long asn_VAL_148_X2N_id_ServedCellsToActivate = 57;
+static const long asn_VAL_148_X2N_reject = 0;
+static const long asn_VAL_148_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_CellActivationRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_148_X2N_id_ServedCellsToActivate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_148_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedCellsToActivate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_148_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellActivationRequest_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_CellActivationRequest_IEs_1_rows }
+};
+static const long asn_VAL_149_X2N_id_ActivatedCellList = 58;
+static const long asn_VAL_149_X2N_ignore = 1;
+static const long asn_VAL_149_X2N_mandatory = 2;
+static const long asn_VAL_150_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_150_X2N_ignore = 1;
+static const long asn_VAL_150_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_CellActivationResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_149_X2N_id_ActivatedCellList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_149_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ActivatedCellList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_149_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_150_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_150_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_150_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellActivationResponse_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_CellActivationResponse_IEs_1_rows }
+};
+static const long asn_VAL_151_X2N_id_Cause = 5;
+static const long asn_VAL_151_X2N_ignore = 1;
+static const long asn_VAL_151_X2N_mandatory = 2;
+static const long asn_VAL_152_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_152_X2N_ignore = 1;
+static const long asn_VAL_152_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_CellActivationFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_151_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_151_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_151_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_152_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_152_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_152_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_CellActivationFailure_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_CellActivationFailure_IEs_1_rows }
+};
+static const long asn_VAL_153_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_153_X2N_reject = 0;
+static const long asn_VAL_153_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_X2Release_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_153_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_153_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_153_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2Release_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_X2Release_IEs_1_rows }
+};
+static const long asn_VAL_154_X2N_id_RNL_Header = 101;
+static const long asn_VAL_154_X2N_reject = 0;
+static const long asn_VAL_154_X2N_mandatory = 2;
+static const long asn_VAL_155_X2N_id_x2APMessage = 102;
+static const long asn_VAL_155_X2N_reject = 0;
+static const long asn_VAL_155_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2APMessageTransfer_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_154_X2N_id_RNL_Header },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_154_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RNL_Header },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_154_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_155_X2N_id_x2APMessage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_155_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_X2AP_Message },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_155_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2APMessageTransfer_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_X2APMessageTransfer_IEs_1_rows }
+};
+static const long asn_VAL_156_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_156_X2N_reject = 0;
+static const long asn_VAL_156_X2N_mandatory = 2;
+static const long asn_VAL_157_X2N_id_UE_SecurityCapabilities = 113;
+static const long asn_VAL_157_X2N_reject = 0;
+static const long asn_VAL_157_X2N_conditional = 1;
+static const long asn_VAL_158_X2N_id_SeNBSecurityKey = 114;
+static const long asn_VAL_158_X2N_reject = 0;
+static const long asn_VAL_158_X2N_conditional = 1;
+static const long asn_VAL_159_X2N_id_SeNBUEAggregateMaximumBitRate = 115;
+static const long asn_VAL_159_X2N_reject = 0;
+static const long asn_VAL_159_X2N_mandatory = 2;
+static const long asn_VAL_160_X2N_id_ServingPLMN = 116;
+static const long asn_VAL_160_X2N_ignore = 1;
+static const long asn_VAL_160_X2N_optional = 0;
+static const long asn_VAL_161_X2N_id_E_RABs_ToBeAdded_List = 117;
+static const long asn_VAL_161_X2N_reject = 0;
+static const long asn_VAL_161_X2N_mandatory = 2;
+static const long asn_VAL_162_X2N_id_MeNBtoSeNBContainer = 119;
+static const long asn_VAL_162_X2N_reject = 0;
+static const long asn_VAL_162_X2N_mandatory = 2;
+static const long asn_VAL_163_X2N_id_CSGMembershipStatus = 71;
+static const long asn_VAL_163_X2N_reject = 0;
+static const long asn_VAL_163_X2N_optional = 0;
+static const long asn_VAL_164_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_164_X2N_reject = 0;
+static const long asn_VAL_164_X2N_optional = 0;
+static const long asn_VAL_165_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_165_X2N_reject = 0;
+static const long asn_VAL_165_X2N_optional = 0;
+static const long asn_VAL_166_X2N_id_ExpectedUEBehaviour = 104;
+static const long asn_VAL_166_X2N_ignore = 1;
+static const long asn_VAL_166_X2N_optional = 0;
+static const long asn_VAL_167_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_167_X2N_reject = 0;
+static const long asn_VAL_167_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBAdditionRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_156_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_156_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_156_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_157_X2N_id_UE_SecurityCapabilities },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_157_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UESecurityCapabilities },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_157_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_158_X2N_id_SeNBSecurityKey },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_158_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SeNBSecurityKey },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_158_X2N_conditional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_159_X2N_id_SeNBUEAggregateMaximumBitRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_159_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UEAggregateMaximumBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_159_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_160_X2N_id_ServingPLMN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_160_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PLMN_Identity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_160_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_161_X2N_id_E_RABs_ToBeAdded_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_161_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_161_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_162_X2N_id_MeNBtoSeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_162_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_162_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_163_X2N_id_CSGMembershipStatus },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_163_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CSGMembershipStatus },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_163_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_164_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_164_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_164_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_165_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_165_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_165_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_166_X2N_id_ExpectedUEBehaviour },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_166_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ExpectedUEBehaviour },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_166_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_167_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_167_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_167_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBAdditionRequest_IEs_1[] = {
+	{ 12, 4, asn_IOS_X2N_SeNBAdditionRequest_IEs_1_rows }
+};
+static const long asn_VAL_169_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_169_X2N_reject = 0;
+static const long asn_VAL_169_X2N_mandatory = 2;
+static const long asn_VAL_170_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_170_X2N_reject = 0;
+static const long asn_VAL_170_X2N_mandatory = 2;
+static const long asn_VAL_171_X2N_id_E_RABs_Admitted_ToBeAdded_List = 120;
+static const long asn_VAL_171_X2N_ignore = 1;
+static const long asn_VAL_171_X2N_mandatory = 2;
+static const long asn_VAL_172_X2N_id_E_RABs_NotAdmitted_List = 3;
+static const long asn_VAL_172_X2N_ignore = 1;
+static const long asn_VAL_172_X2N_optional = 0;
+static const long asn_VAL_173_X2N_id_SeNBtoMeNBContainer = 122;
+static const long asn_VAL_173_X2N_reject = 0;
+static const long asn_VAL_173_X2N_mandatory = 2;
+static const long asn_VAL_174_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_174_X2N_ignore = 1;
+static const long asn_VAL_174_X2N_optional = 0;
+static const long asn_VAL_175_X2N_id_GW_TransportLayerAddress = 165;
+static const long asn_VAL_175_X2N_ignore = 1;
+static const long asn_VAL_175_X2N_optional = 0;
+static const long asn_VAL_176_X2N_id_SIPTO_L_GW_TransportLayerAddress = 168;
+static const long asn_VAL_176_X2N_ignore = 1;
+static const long asn_VAL_176_X2N_optional = 0;
+static const long asn_VAL_177_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_177_X2N_reject = 0;
+static const long asn_VAL_177_X2N_optional = 0;
+static const long asn_VAL_178_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_178_X2N_reject = 0;
+static const long asn_VAL_178_X2N_optional = 0;
+static const long asn_VAL_179_X2N_id_Tunnel_Information_for_BBF = 163;
+static const long asn_VAL_179_X2N_ignore = 1;
+static const long asn_VAL_179_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBAdditionRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_169_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_169_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_169_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_170_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_170_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_170_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_171_X2N_id_E_RABs_Admitted_ToBeAdded_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_171_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_171_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_172_X2N_id_E_RABs_NotAdmitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_172_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_172_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_173_X2N_id_SeNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_173_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SeNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_173_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_174_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_174_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_174_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_175_X2N_id_GW_TransportLayerAddress },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_175_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TransportLayerAddress },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_175_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_176_X2N_id_SIPTO_L_GW_TransportLayerAddress },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_176_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TransportLayerAddress },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_176_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_177_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_177_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_177_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_178_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_178_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_178_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_179_X2N_id_Tunnel_Information_for_BBF },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_179_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TunnelInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_179_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBAdditionRequestAcknowledge_IEs_1[] = {
+	{ 11, 4, asn_IOS_X2N_SeNBAdditionRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_181_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_181_X2N_reject = 0;
+static const long asn_VAL_181_X2N_mandatory = 2;
+static const long asn_VAL_182_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_182_X2N_reject = 0;
+static const long asn_VAL_182_X2N_mandatory = 2;
+static const long asn_VAL_183_X2N_id_Cause = 5;
+static const long asn_VAL_183_X2N_ignore = 1;
+static const long asn_VAL_183_X2N_mandatory = 2;
+static const long asn_VAL_184_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_184_X2N_ignore = 1;
+static const long asn_VAL_184_X2N_optional = 0;
+static const long asn_VAL_185_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_185_X2N_reject = 0;
+static const long asn_VAL_185_X2N_optional = 0;
+static const long asn_VAL_186_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_186_X2N_reject = 0;
+static const long asn_VAL_186_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBAdditionRequestReject_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_181_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_181_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_181_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_182_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_182_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_182_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_183_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_183_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_183_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_184_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_184_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_184_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_185_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_185_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_185_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_186_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_186_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_186_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBAdditionRequestReject_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SeNBAdditionRequestReject_IEs_1_rows }
+};
+static const long asn_VAL_187_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_187_X2N_reject = 0;
+static const long asn_VAL_187_X2N_mandatory = 2;
+static const long asn_VAL_188_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_188_X2N_reject = 0;
+static const long asn_VAL_188_X2N_mandatory = 2;
+static const long asn_VAL_189_X2N_id_ResponseInformationSeNBReconfComp = 123;
+static const long asn_VAL_189_X2N_ignore = 1;
+static const long asn_VAL_189_X2N_mandatory = 2;
+static const long asn_VAL_190_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_190_X2N_reject = 0;
+static const long asn_VAL_190_X2N_optional = 0;
+static const long asn_VAL_191_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_191_X2N_reject = 0;
+static const long asn_VAL_191_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBReconfigurationComplete_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_187_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_187_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_187_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_188_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_188_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_188_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_189_X2N_id_ResponseInformationSeNBReconfComp },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_189_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ResponseInformationSeNBReconfComp },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_189_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_190_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_190_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_190_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_191_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_191_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_191_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBReconfigurationComplete_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SeNBReconfigurationComplete_IEs_1_rows }
+};
+static const long asn_VAL_192_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_192_X2N_reject = 0;
+static const long asn_VAL_192_X2N_mandatory = 2;
+static const long asn_VAL_193_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_193_X2N_reject = 0;
+static const long asn_VAL_193_X2N_mandatory = 2;
+static const long asn_VAL_194_X2N_id_Cause = 5;
+static const long asn_VAL_194_X2N_ignore = 1;
+static const long asn_VAL_194_X2N_mandatory = 2;
+static const long asn_VAL_195_X2N_id_SCGChangeIndication = 136;
+static const long asn_VAL_195_X2N_ignore = 1;
+static const long asn_VAL_195_X2N_optional = 0;
+static const long asn_VAL_196_X2N_id_ServingPLMN = 116;
+static const long asn_VAL_196_X2N_ignore = 1;
+static const long asn_VAL_196_X2N_optional = 0;
+static const long asn_VAL_197_X2N_id_UE_ContextInformationSeNBModReq = 124;
+static const long asn_VAL_197_X2N_reject = 0;
+static const long asn_VAL_197_X2N_optional = 0;
+static const long asn_VAL_198_X2N_id_MeNBtoSeNBContainer = 119;
+static const long asn_VAL_198_X2N_ignore = 1;
+static const long asn_VAL_198_X2N_optional = 0;
+static const long asn_VAL_199_X2N_id_CSGMembershipStatus = 71;
+static const long asn_VAL_199_X2N_reject = 0;
+static const long asn_VAL_199_X2N_optional = 0;
+static const long asn_VAL_200_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_200_X2N_reject = 0;
+static const long asn_VAL_200_X2N_optional = 0;
+static const long asn_VAL_201_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_201_X2N_reject = 0;
+static const long asn_VAL_201_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_192_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_192_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_192_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_193_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_193_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_193_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_194_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_194_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_194_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_195_X2N_id_SCGChangeIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_195_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SCGChangeIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_195_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_196_X2N_id_ServingPLMN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_196_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PLMN_Identity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_196_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_197_X2N_id_UE_ContextInformationSeNBModReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_197_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextInformationSeNBModReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_197_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_198_X2N_id_MeNBtoSeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_198_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_198_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_199_X2N_id_CSGMembershipStatus },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_199_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CSGMembershipStatus },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_199_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_200_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_200_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_200_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_201_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_201_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_201_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationRequest_IEs_1[] = {
+	{ 10, 4, asn_IOS_X2N_SeNBModificationRequest_IEs_1_rows }
+};
+static const long asn_VAL_205_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_205_X2N_ignore = 1;
+static const long asn_VAL_205_X2N_mandatory = 2;
+static const long asn_VAL_206_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_206_X2N_ignore = 1;
+static const long asn_VAL_206_X2N_mandatory = 2;
+static const long asn_VAL_207_X2N_id_E_RABs_Admitted_ToBeAdded_ModAckList = 128;
+static const long asn_VAL_207_X2N_ignore = 1;
+static const long asn_VAL_207_X2N_optional = 0;
+static const long asn_VAL_208_X2N_id_E_RABs_Admitted_ToBeModified_ModAckList = 129;
+static const long asn_VAL_208_X2N_ignore = 1;
+static const long asn_VAL_208_X2N_optional = 0;
+static const long asn_VAL_209_X2N_id_E_RABs_Admitted_ToBeReleased_ModAckList = 130;
+static const long asn_VAL_209_X2N_ignore = 1;
+static const long asn_VAL_209_X2N_optional = 0;
+static const long asn_VAL_210_X2N_id_E_RABs_NotAdmitted_List = 3;
+static const long asn_VAL_210_X2N_ignore = 1;
+static const long asn_VAL_210_X2N_optional = 0;
+static const long asn_VAL_211_X2N_id_SeNBtoMeNBContainer = 122;
+static const long asn_VAL_211_X2N_ignore = 1;
+static const long asn_VAL_211_X2N_optional = 0;
+static const long asn_VAL_212_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_212_X2N_ignore = 1;
+static const long asn_VAL_212_X2N_optional = 0;
+static const long asn_VAL_213_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_213_X2N_ignore = 1;
+static const long asn_VAL_213_X2N_optional = 0;
+static const long asn_VAL_214_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_214_X2N_ignore = 1;
+static const long asn_VAL_214_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_205_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_205_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_205_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_206_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_206_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_206_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_207_X2N_id_E_RABs_Admitted_ToBeAdded_ModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_207_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_207_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_208_X2N_id_E_RABs_Admitted_ToBeModified_ModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_208_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_208_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_209_X2N_id_E_RABs_Admitted_ToBeReleased_ModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_209_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_209_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_210_X2N_id_E_RABs_NotAdmitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_210_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_210_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_211_X2N_id_SeNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_211_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SeNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_211_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_212_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_212_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_212_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_213_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_213_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_213_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_214_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_214_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_214_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationRequestAcknowledge_IEs_1[] = {
+	{ 10, 4, asn_IOS_X2N_SeNBModificationRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_218_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_218_X2N_ignore = 1;
+static const long asn_VAL_218_X2N_mandatory = 2;
+static const long asn_VAL_219_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_219_X2N_ignore = 1;
+static const long asn_VAL_219_X2N_mandatory = 2;
+static const long asn_VAL_220_X2N_id_Cause = 5;
+static const long asn_VAL_220_X2N_ignore = 1;
+static const long asn_VAL_220_X2N_mandatory = 2;
+static const long asn_VAL_221_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_221_X2N_ignore = 1;
+static const long asn_VAL_221_X2N_optional = 0;
+static const long asn_VAL_222_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_222_X2N_ignore = 1;
+static const long asn_VAL_222_X2N_optional = 0;
+static const long asn_VAL_223_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_223_X2N_ignore = 1;
+static const long asn_VAL_223_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationRequestReject_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_218_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_218_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_218_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_219_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_219_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_219_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_220_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_220_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_220_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_221_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_221_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_221_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_222_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_222_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_222_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_223_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_223_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_223_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationRequestReject_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SeNBModificationRequestReject_IEs_1_rows }
+};
+static const long asn_VAL_224_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_224_X2N_reject = 0;
+static const long asn_VAL_224_X2N_mandatory = 2;
+static const long asn_VAL_225_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_225_X2N_reject = 0;
+static const long asn_VAL_225_X2N_mandatory = 2;
+static const long asn_VAL_226_X2N_id_Cause = 5;
+static const long asn_VAL_226_X2N_ignore = 1;
+static const long asn_VAL_226_X2N_mandatory = 2;
+static const long asn_VAL_227_X2N_id_SCGChangeIndication = 136;
+static const long asn_VAL_227_X2N_ignore = 1;
+static const long asn_VAL_227_X2N_optional = 0;
+static const long asn_VAL_228_X2N_id_E_RABs_ToBeReleased_ModReqd = 134;
+static const long asn_VAL_228_X2N_ignore = 1;
+static const long asn_VAL_228_X2N_optional = 0;
+static const long asn_VAL_229_X2N_id_SeNBtoMeNBContainer = 122;
+static const long asn_VAL_229_X2N_ignore = 1;
+static const long asn_VAL_229_X2N_optional = 0;
+static const long asn_VAL_230_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_230_X2N_reject = 0;
+static const long asn_VAL_230_X2N_optional = 0;
+static const long asn_VAL_231_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_231_X2N_reject = 0;
+static const long asn_VAL_231_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_224_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_224_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_224_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_225_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_225_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_225_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_226_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_226_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_226_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_227_X2N_id_SCGChangeIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_227_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SCGChangeIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_227_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_228_X2N_id_E_RABs_ToBeReleased_ModReqd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_228_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_228_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_229_X2N_id_SeNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_229_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SeNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_229_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_230_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_230_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_230_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_231_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_231_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_231_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationRequired_IEs_1[] = {
+	{ 8, 4, asn_IOS_X2N_SeNBModificationRequired_IEs_1_rows }
+};
+static const long asn_VAL_233_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_233_X2N_ignore = 1;
+static const long asn_VAL_233_X2N_mandatory = 2;
+static const long asn_VAL_234_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_234_X2N_ignore = 1;
+static const long asn_VAL_234_X2N_mandatory = 2;
+static const long asn_VAL_235_X2N_id_MeNBtoSeNBContainer = 119;
+static const long asn_VAL_235_X2N_ignore = 1;
+static const long asn_VAL_235_X2N_optional = 0;
+static const long asn_VAL_236_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_236_X2N_ignore = 1;
+static const long asn_VAL_236_X2N_optional = 0;
+static const long asn_VAL_237_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_237_X2N_ignore = 1;
+static const long asn_VAL_237_X2N_optional = 0;
+static const long asn_VAL_238_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_238_X2N_ignore = 1;
+static const long asn_VAL_238_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_233_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_233_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_233_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_234_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_234_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_234_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_235_X2N_id_MeNBtoSeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_235_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_235_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_236_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_236_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_236_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_237_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_237_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_237_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_238_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_238_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_238_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationConfirm_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SeNBModificationConfirm_IEs_1_rows }
+};
+static const long asn_VAL_239_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_239_X2N_ignore = 1;
+static const long asn_VAL_239_X2N_mandatory = 2;
+static const long asn_VAL_240_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_240_X2N_ignore = 1;
+static const long asn_VAL_240_X2N_mandatory = 2;
+static const long asn_VAL_241_X2N_id_Cause = 5;
+static const long asn_VAL_241_X2N_ignore = 1;
+static const long asn_VAL_241_X2N_mandatory = 2;
+static const long asn_VAL_242_X2N_id_MeNBtoSeNBContainer = 119;
+static const long asn_VAL_242_X2N_ignore = 1;
+static const long asn_VAL_242_X2N_optional = 0;
+static const long asn_VAL_243_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_243_X2N_ignore = 1;
+static const long asn_VAL_243_X2N_optional = 0;
+static const long asn_VAL_244_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_244_X2N_ignore = 1;
+static const long asn_VAL_244_X2N_optional = 0;
+static const long asn_VAL_245_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_245_X2N_ignore = 1;
+static const long asn_VAL_245_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBModificationRefuse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_239_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_239_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_239_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_240_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_240_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_240_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_241_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_241_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_241_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_242_X2N_id_MeNBtoSeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_242_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_242_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_243_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_243_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_243_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_244_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_244_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_244_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_245_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_245_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_245_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBModificationRefuse_IEs_1[] = {
+	{ 7, 4, asn_IOS_X2N_SeNBModificationRefuse_IEs_1_rows }
+};
+static const long asn_VAL_246_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_246_X2N_reject = 0;
+static const long asn_VAL_246_X2N_mandatory = 2;
+static const long asn_VAL_247_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_247_X2N_reject = 0;
+static const long asn_VAL_247_X2N_optional = 0;
+static const long asn_VAL_248_X2N_id_Cause = 5;
+static const long asn_VAL_248_X2N_ignore = 1;
+static const long asn_VAL_248_X2N_optional = 0;
+static const long asn_VAL_249_X2N_id_E_RABs_ToBeReleased_List_RelReq = 137;
+static const long asn_VAL_249_X2N_ignore = 1;
+static const long asn_VAL_249_X2N_optional = 0;
+static const long asn_VAL_250_X2N_id_UE_ContextKeptIndicator = 154;
+static const long asn_VAL_250_X2N_ignore = 1;
+static const long asn_VAL_250_X2N_optional = 0;
+static const long asn_VAL_251_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_251_X2N_reject = 0;
+static const long asn_VAL_251_X2N_optional = 0;
+static const long asn_VAL_252_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_252_X2N_reject = 0;
+static const long asn_VAL_252_X2N_optional = 0;
+static const long asn_VAL_253_X2N_id_MakeBeforeBreakIndicator = 181;
+static const long asn_VAL_253_X2N_ignore = 1;
+static const long asn_VAL_253_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBReleaseRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_246_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_246_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_246_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_247_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_247_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_247_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_248_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_248_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_248_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_249_X2N_id_E_RABs_ToBeReleased_List_RelReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_249_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_249_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_250_X2N_id_UE_ContextKeptIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_250_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextKeptIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_250_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_251_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_251_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_251_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_252_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_252_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_252_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_253_X2N_id_MakeBeforeBreakIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_253_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MakeBeforeBreakIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_253_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBReleaseRequest_IEs_1[] = {
+	{ 8, 4, asn_IOS_X2N_SeNBReleaseRequest_IEs_1_rows }
+};
+static const long asn_VAL_255_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_255_X2N_reject = 0;
+static const long asn_VAL_255_X2N_mandatory = 2;
+static const long asn_VAL_256_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_256_X2N_reject = 0;
+static const long asn_VAL_256_X2N_mandatory = 2;
+static const long asn_VAL_257_X2N_id_Cause = 5;
+static const long asn_VAL_257_X2N_ignore = 1;
+static const long asn_VAL_257_X2N_mandatory = 2;
+static const long asn_VAL_258_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_258_X2N_reject = 0;
+static const long asn_VAL_258_X2N_optional = 0;
+static const long asn_VAL_259_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_259_X2N_reject = 0;
+static const long asn_VAL_259_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBReleaseRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_255_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_255_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_255_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_256_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_256_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_256_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_257_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_257_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_257_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_258_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_258_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_258_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_259_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_259_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_259_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBReleaseRequired_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SeNBReleaseRequired_IEs_1_rows }
+};
+static const long asn_VAL_260_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_260_X2N_ignore = 1;
+static const long asn_VAL_260_X2N_mandatory = 2;
+static const long asn_VAL_261_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_261_X2N_ignore = 1;
+static const long asn_VAL_261_X2N_mandatory = 2;
+static const long asn_VAL_262_X2N_id_E_RABs_ToBeReleased_List_RelConf = 139;
+static const long asn_VAL_262_X2N_ignore = 1;
+static const long asn_VAL_262_X2N_optional = 0;
+static const long asn_VAL_263_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_263_X2N_ignore = 1;
+static const long asn_VAL_263_X2N_optional = 0;
+static const long asn_VAL_264_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_264_X2N_ignore = 1;
+static const long asn_VAL_264_X2N_optional = 0;
+static const long asn_VAL_265_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_265_X2N_ignore = 1;
+static const long asn_VAL_265_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBReleaseConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_260_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_260_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_260_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_261_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_261_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_261_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_262_X2N_id_E_RABs_ToBeReleased_List_RelConf },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_262_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_262_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_263_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_263_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_263_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_264_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_264_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_264_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_265_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_265_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_265_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBReleaseConfirm_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SeNBReleaseConfirm_IEs_1_rows }
+};
+static const long asn_VAL_267_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_267_X2N_reject = 0;
+static const long asn_VAL_267_X2N_mandatory = 2;
+static const long asn_VAL_268_X2N_id_SeNB_UE_X2AP_ID = 112;
+static const long asn_VAL_268_X2N_reject = 0;
+static const long asn_VAL_268_X2N_mandatory = 2;
+static const long asn_VAL_269_X2N_id_E_RABs_SubjectToCounterCheck_List = 141;
+static const long asn_VAL_269_X2N_ignore = 1;
+static const long asn_VAL_269_X2N_mandatory = 2;
+static const long asn_VAL_270_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_270_X2N_ignore = 1;
+static const long asn_VAL_270_X2N_optional = 0;
+static const long asn_VAL_271_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_271_X2N_ignore = 1;
+static const long asn_VAL_271_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SeNBCounterCheckRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_267_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_267_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_267_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_268_X2N_id_SeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_268_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_268_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_269_X2N_id_E_RABs_SubjectToCounterCheck_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_269_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_269_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_270_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_270_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_270_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_271_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_271_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_271_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SeNBCounterCheckRequest_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SeNBCounterCheckRequest_IEs_1_rows }
+};
+static const long asn_VAL_273_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_273_X2N_reject = 0;
+static const long asn_VAL_273_X2N_mandatory = 2;
+static const long asn_VAL_274_X2N_id_X2RemovalThreshold = 169;
+static const long asn_VAL_274_X2N_reject = 0;
+static const long asn_VAL_274_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2RemovalRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_273_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_273_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_273_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_274_X2N_id_X2RemovalThreshold },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_274_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_X2BenefitValue },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_274_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2RemovalRequest_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_X2RemovalRequest_IEs_1_rows }
+};
+static const long asn_VAL_275_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_275_X2N_reject = 0;
+static const long asn_VAL_275_X2N_mandatory = 2;
+static const long asn_VAL_276_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_276_X2N_ignore = 1;
+static const long asn_VAL_276_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2RemovalResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_275_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_275_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_275_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_276_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_276_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_276_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2RemovalResponse_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_X2RemovalResponse_IEs_1_rows }
+};
+static const long asn_VAL_277_X2N_id_Cause = 5;
+static const long asn_VAL_277_X2N_ignore = 1;
+static const long asn_VAL_277_X2N_mandatory = 2;
+static const long asn_VAL_278_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_278_X2N_ignore = 1;
+static const long asn_VAL_278_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_X2RemovalFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_277_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_277_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_277_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_278_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_278_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_278_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2RemovalFailure_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_X2RemovalFailure_IEs_1_rows }
+};
+static const long asn_VAL_279_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_279_X2N_reject = 0;
+static const long asn_VAL_279_X2N_mandatory = 2;
+static const long asn_VAL_280_X2N_id_SeNB_UE_X2AP_ID_Extension = 158;
+static const long asn_VAL_280_X2N_reject = 0;
+static const long asn_VAL_280_X2N_optional = 0;
+static const long asn_VAL_281_X2N_id_resumeID = 172;
+static const long asn_VAL_281_X2N_reject = 0;
+static const long asn_VAL_281_X2N_mandatory = 2;
+static const long asn_VAL_282_X2N_id_ShortMAC_I = 51;
+static const long asn_VAL_282_X2N_reject = 0;
+static const long asn_VAL_282_X2N_mandatory = 2;
+static const long asn_VAL_283_X2N_id_NewEUTRANCellIdentifier = 175;
+static const long asn_VAL_283_X2N_reject = 0;
+static const long asn_VAL_283_X2N_mandatory = 2;
+static const long asn_VAL_284_X2N_id_FailureCellCRNTI = 50;
+static const long asn_VAL_284_X2N_reject = 0;
+static const long asn_VAL_284_X2N_optional = 0;
+static const long asn_VAL_285_X2N_id_FailureCellPCI = 48;
+static const long asn_VAL_285_X2N_reject = 0;
+static const long asn_VAL_285_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RetrieveUEContextRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_279_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_279_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_279_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_280_X2N_id_SeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_280_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_280_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_281_X2N_id_resumeID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_281_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ResumeID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_281_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_282_X2N_id_ShortMAC_I },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_282_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ShortMAC_I },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_282_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_283_X2N_id_NewEUTRANCellIdentifier },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_283_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_EUTRANCellIdentifier },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_283_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_284_X2N_id_FailureCellCRNTI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_284_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CRNTI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_284_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_285_X2N_id_FailureCellPCI },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_285_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PCI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_285_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RetrieveUEContextRequest_IEs_1[] = {
+	{ 7, 4, asn_IOS_X2N_RetrieveUEContextRequest_IEs_1_rows }
+};
+static const long asn_VAL_286_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_286_X2N_ignore = 1;
+static const long asn_VAL_286_X2N_mandatory = 2;
+static const long asn_VAL_287_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_287_X2N_ignore = 1;
+static const long asn_VAL_287_X2N_optional = 0;
+static const long asn_VAL_288_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_288_X2N_ignore = 1;
+static const long asn_VAL_288_X2N_mandatory = 2;
+static const long asn_VAL_289_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_289_X2N_ignore = 1;
+static const long asn_VAL_289_X2N_optional = 0;
+static const long asn_VAL_290_X2N_id_GUMMEI_ID = 23;
+static const long asn_VAL_290_X2N_reject = 0;
+static const long asn_VAL_290_X2N_mandatory = 2;
+static const long asn_VAL_291_X2N_id_UE_ContextInformationRetrieve = 173;
+static const long asn_VAL_291_X2N_reject = 0;
+static const long asn_VAL_291_X2N_mandatory = 2;
+static const long asn_VAL_292_X2N_id_TraceActivation = 13;
+static const long asn_VAL_292_X2N_ignore = 1;
+static const long asn_VAL_292_X2N_optional = 0;
+static const long asn_VAL_293_X2N_id_SRVCCOperationPossible = 36;
+static const long asn_VAL_293_X2N_ignore = 1;
+static const long asn_VAL_293_X2N_optional = 0;
+static const long asn_VAL_294_X2N_id_Masked_IMEISV = 98;
+static const long asn_VAL_294_X2N_ignore = 1;
+static const long asn_VAL_294_X2N_optional = 0;
+static const long asn_VAL_295_X2N_id_ExpectedUEBehaviour = 104;
+static const long asn_VAL_295_X2N_ignore = 1;
+static const long asn_VAL_295_X2N_optional = 0;
+static const long asn_VAL_296_X2N_id_ProSeAuthorized = 103;
+static const long asn_VAL_296_X2N_ignore = 1;
+static const long asn_VAL_296_X2N_optional = 0;
+static const long asn_VAL_297_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_297_X2N_ignore = 1;
+static const long asn_VAL_297_X2N_optional = 0;
+static const long asn_VAL_298_X2N_id_V2XServicesAuthorized = 176;
+static const long asn_VAL_298_X2N_ignore = 1;
+static const long asn_VAL_298_X2N_optional = 0;
+static const long asn_VAL_299_X2N_id_AerialUEsubscriptionInformation = 277;
+static const long asn_VAL_299_X2N_ignore = 1;
+static const long asn_VAL_299_X2N_optional = 0;
+static const long asn_VAL_300_X2N_id_Subscription_Based_UE_DifferentiationInfo = 309;
+static const long asn_VAL_300_X2N_ignore = 1;
+static const long asn_VAL_300_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RetrieveUEContextResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_286_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_286_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_286_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_287_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_287_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_287_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_288_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_288_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_288_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_289_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_289_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_289_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_290_X2N_id_GUMMEI_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_290_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GUMMEI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_290_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_291_X2N_id_UE_ContextInformationRetrieve },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_291_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextInformationRetrieve },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_291_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_292_X2N_id_TraceActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_292_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TraceActivation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_292_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_293_X2N_id_SRVCCOperationPossible },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_293_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SRVCCOperationPossible },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_293_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_294_X2N_id_Masked_IMEISV },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_294_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Masked_IMEISV },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_294_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_295_X2N_id_ExpectedUEBehaviour },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_295_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ExpectedUEBehaviour },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_295_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_296_X2N_id_ProSeAuthorized },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_296_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ProSeAuthorized },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_296_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_297_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_297_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_297_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_298_X2N_id_V2XServicesAuthorized },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_298_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_V2XServicesAuthorized },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_298_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_299_X2N_id_AerialUEsubscriptionInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_299_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_AerialUEsubscriptionInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_299_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_300_X2N_id_Subscription_Based_UE_DifferentiationInfo },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_300_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_300_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RetrieveUEContextResponse_IEs_1[] = {
+	{ 15, 4, asn_IOS_X2N_RetrieveUEContextResponse_IEs_1_rows }
+};
+static const long asn_VAL_302_X2N_id_New_eNB_UE_X2AP_ID = 9;
+static const long asn_VAL_302_X2N_ignore = 1;
+static const long asn_VAL_302_X2N_mandatory = 2;
+static const long asn_VAL_303_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_303_X2N_ignore = 1;
+static const long asn_VAL_303_X2N_optional = 0;
+static const long asn_VAL_304_X2N_id_Cause = 5;
+static const long asn_VAL_304_X2N_ignore = 1;
+static const long asn_VAL_304_X2N_mandatory = 2;
+static const long asn_VAL_305_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_305_X2N_ignore = 1;
+static const long asn_VAL_305_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RetrieveUEContextFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_302_X2N_id_New_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_302_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_302_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_303_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_303_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_303_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_304_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_304_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_304_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_305_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_305_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_305_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RetrieveUEContextFailure_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_RetrieveUEContextFailure_IEs_1_rows }
+};
+static const long asn_VAL_306_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_306_X2N_reject = 0;
+static const long asn_VAL_306_X2N_mandatory = 2;
+static const long asn_VAL_307_X2N_id_NRUESecurityCapabilities = 248;
+static const long asn_VAL_307_X2N_reject = 0;
+static const long asn_VAL_307_X2N_mandatory = 2;
+static const long asn_VAL_308_X2N_id_SgNBSecurityKey = 203;
+static const long asn_VAL_308_X2N_reject = 0;
+static const long asn_VAL_308_X2N_mandatory = 2;
+static const long asn_VAL_309_X2N_id_SgNBUEAggregateMaximumBitRate = 204;
+static const long asn_VAL_309_X2N_reject = 0;
+static const long asn_VAL_309_X2N_mandatory = 2;
+static const long asn_VAL_310_X2N_id_SelectedPLMN = 269;
+static const long asn_VAL_310_X2N_ignore = 1;
+static const long asn_VAL_310_X2N_optional = 0;
+static const long asn_VAL_311_X2N_id_HandoverRestrictionList = 240;
+static const long asn_VAL_311_X2N_ignore = 1;
+static const long asn_VAL_311_X2N_optional = 0;
+static const long asn_VAL_312_X2N_id_E_RABs_ToBeAdded_SgNBAddReqList = 205;
+static const long asn_VAL_312_X2N_reject = 0;
+static const long asn_VAL_312_X2N_mandatory = 2;
+static const long asn_VAL_313_X2N_id_MeNBtoSgNBContainer = 206;
+static const long asn_VAL_313_X2N_reject = 0;
+static const long asn_VAL_313_X2N_mandatory = 2;
+static const long asn_VAL_314_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_314_X2N_reject = 0;
+static const long asn_VAL_314_X2N_optional = 0;
+static const long asn_VAL_315_X2N_id_ExpectedUEBehaviour = 104;
+static const long asn_VAL_315_X2N_ignore = 1;
+static const long asn_VAL_315_X2N_optional = 0;
+static const long asn_VAL_316_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_316_X2N_reject = 0;
+static const long asn_VAL_316_X2N_optional = 0;
+static const long asn_VAL_317_X2N_id_RequestedSplitSRBs = 208;
+static const long asn_VAL_317_X2N_reject = 0;
+static const long asn_VAL_317_X2N_optional = 0;
+static const long asn_VAL_318_X2N_id_MeNBResourceCoordinationInformation = 257;
+static const long asn_VAL_318_X2N_ignore = 1;
+static const long asn_VAL_318_X2N_optional = 0;
+static const long asn_VAL_319_X2N_id_SGNB_Addition_Trigger_Ind = 278;
+static const long asn_VAL_319_X2N_reject = 0;
+static const long asn_VAL_319_X2N_optional = 0;
+static const long asn_VAL_320_X2N_id_SubscriberProfileIDforRFP = 275;
+static const long asn_VAL_320_X2N_ignore = 1;
+static const long asn_VAL_320_X2N_optional = 0;
+static const long asn_VAL_321_X2N_id_MeNBCell_ID = 279;
+static const long asn_VAL_321_X2N_reject = 0;
+static const long asn_VAL_321_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBAdditionRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_306_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_306_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_306_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_307_X2N_id_NRUESecurityCapabilities },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_307_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_NRUESecurityCapabilities },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_307_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_308_X2N_id_SgNBSecurityKey },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_308_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBSecurityKey },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_308_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_309_X2N_id_SgNBUEAggregateMaximumBitRate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_309_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UEAggregateMaximumBitRate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_309_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_310_X2N_id_SelectedPLMN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_310_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PLMN_Identity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_310_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_311_X2N_id_HandoverRestrictionList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_311_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_HandoverRestrictionList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_311_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_312_X2N_id_E_RABs_ToBeAdded_SgNBAddReqList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_312_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_312_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_313_X2N_id_MeNBtoSgNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_313_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSgNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_313_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_314_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_314_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_314_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_315_X2N_id_ExpectedUEBehaviour },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_315_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ExpectedUEBehaviour },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_315_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_316_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_316_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_316_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_317_X2N_id_RequestedSplitSRBs },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_317_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_317_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_318_X2N_id_MeNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_318_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_318_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_319_X2N_id_SGNB_Addition_Trigger_Ind },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_319_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SGNB_Addition_Trigger_Ind },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_319_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_320_X2N_id_SubscriberProfileIDforRFP },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_320_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SubscriberProfileIDforRFP },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_320_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_321_X2N_id_MeNBCell_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_321_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ECGI },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_321_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBAdditionRequest_IEs_1[] = {
+	{ 16, 4, asn_IOS_X2N_SgNBAdditionRequest_IEs_1_rows }
+};
+static const long asn_VAL_323_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_323_X2N_reject = 0;
+static const long asn_VAL_323_X2N_mandatory = 2;
+static const long asn_VAL_324_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_324_X2N_reject = 0;
+static const long asn_VAL_324_X2N_mandatory = 2;
+static const long asn_VAL_325_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList = 210;
+static const long asn_VAL_325_X2N_ignore = 1;
+static const long asn_VAL_325_X2N_mandatory = 2;
+static const long asn_VAL_326_X2N_id_E_RABs_NotAdmitted_List = 3;
+static const long asn_VAL_326_X2N_ignore = 1;
+static const long asn_VAL_326_X2N_optional = 0;
+static const long asn_VAL_327_X2N_id_SgNBtoMeNBContainer = 211;
+static const long asn_VAL_327_X2N_reject = 0;
+static const long asn_VAL_327_X2N_mandatory = 2;
+static const long asn_VAL_328_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_328_X2N_ignore = 1;
+static const long asn_VAL_328_X2N_optional = 0;
+static const long asn_VAL_329_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_329_X2N_reject = 0;
+static const long asn_VAL_329_X2N_optional = 0;
+static const long asn_VAL_330_X2N_id_AdmittedSplitSRBs = 212;
+static const long asn_VAL_330_X2N_reject = 0;
+static const long asn_VAL_330_X2N_optional = 0;
+static const long asn_VAL_331_X2N_id_SgNBResourceCoordinationInformation = 258;
+static const long asn_VAL_331_X2N_ignore = 1;
+static const long asn_VAL_331_X2N_optional = 0;
+static const long asn_VAL_332_X2N_id_RRCConfigIndication = 272;
+static const long asn_VAL_332_X2N_reject = 0;
+static const long asn_VAL_332_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBAdditionRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_323_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_323_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_323_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_324_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_324_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_324_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_325_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_325_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_325_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_326_X2N_id_E_RABs_NotAdmitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_326_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_326_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_327_X2N_id_SgNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_327_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_327_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_328_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_328_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_328_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_329_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_329_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_329_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_330_X2N_id_AdmittedSplitSRBs },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_330_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_330_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_331_X2N_id_SgNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_331_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_331_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_332_X2N_id_RRCConfigIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_332_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RRC_Config_Ind },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_332_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBAdditionRequestAcknowledge_IEs_1[] = {
+	{ 10, 4, asn_IOS_X2N_SgNBAdditionRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_334_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_334_X2N_reject = 0;
+static const long asn_VAL_334_X2N_mandatory = 2;
+static const long asn_VAL_335_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_335_X2N_reject = 0;
+static const long asn_VAL_335_X2N_optional = 0;
+static const long asn_VAL_336_X2N_id_Cause = 5;
+static const long asn_VAL_336_X2N_ignore = 1;
+static const long asn_VAL_336_X2N_mandatory = 2;
+static const long asn_VAL_337_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_337_X2N_ignore = 1;
+static const long asn_VAL_337_X2N_optional = 0;
+static const long asn_VAL_338_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_338_X2N_reject = 0;
+static const long asn_VAL_338_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBAdditionRequestReject_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_334_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_334_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_334_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_335_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_335_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_335_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_336_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_336_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_336_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_337_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_337_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_337_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_338_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_338_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_338_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBAdditionRequestReject_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBAdditionRequestReject_IEs_1_rows }
+};
+static const long asn_VAL_339_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_339_X2N_reject = 0;
+static const long asn_VAL_339_X2N_mandatory = 2;
+static const long asn_VAL_340_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_340_X2N_reject = 0;
+static const long asn_VAL_340_X2N_mandatory = 2;
+static const long asn_VAL_341_X2N_id_ResponseInformationSgNBReconfComp = 214;
+static const long asn_VAL_341_X2N_ignore = 1;
+static const long asn_VAL_341_X2N_mandatory = 2;
+static const long asn_VAL_342_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_342_X2N_reject = 0;
+static const long asn_VAL_342_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReconfigurationComplete_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_339_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_339_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_339_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_340_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_340_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_340_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_341_X2N_id_ResponseInformationSgNBReconfComp },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_341_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ResponseInformationSgNBReconfComp },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_341_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_342_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_342_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_342_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReconfigurationComplete_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_SgNBReconfigurationComplete_IEs_1_rows }
+};
+static const long asn_VAL_343_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_343_X2N_reject = 0;
+static const long asn_VAL_343_X2N_mandatory = 2;
+static const long asn_VAL_344_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_344_X2N_reject = 0;
+static const long asn_VAL_344_X2N_mandatory = 2;
+static const long asn_VAL_345_X2N_id_Cause = 5;
+static const long asn_VAL_345_X2N_ignore = 1;
+static const long asn_VAL_345_X2N_mandatory = 2;
+static const long asn_VAL_346_X2N_id_SelectedPLMN = 269;
+static const long asn_VAL_346_X2N_ignore = 1;
+static const long asn_VAL_346_X2N_optional = 0;
+static const long asn_VAL_347_X2N_id_HandoverRestrictionList = 240;
+static const long asn_VAL_347_X2N_ignore = 1;
+static const long asn_VAL_347_X2N_optional = 0;
+static const long asn_VAL_348_X2N_id_SCGConfigurationQuery = 241;
+static const long asn_VAL_348_X2N_ignore = 1;
+static const long asn_VAL_348_X2N_optional = 0;
+static const long asn_VAL_349_X2N_id_UE_ContextInformation_SgNBModReq = 215;
+static const long asn_VAL_349_X2N_reject = 0;
+static const long asn_VAL_349_X2N_optional = 0;
+static const long asn_VAL_350_X2N_id_MeNBtoSgNBContainer = 206;
+static const long asn_VAL_350_X2N_reject = 0;
+static const long asn_VAL_350_X2N_optional = 0;
+static const long asn_VAL_351_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_351_X2N_reject = 0;
+static const long asn_VAL_351_X2N_optional = 0;
+static const long asn_VAL_352_X2N_id_MeNBResourceCoordinationInformation = 257;
+static const long asn_VAL_352_X2N_ignore = 1;
+static const long asn_VAL_352_X2N_optional = 0;
+static const long asn_VAL_353_X2N_id_RequestedSplitSRBs = 208;
+static const long asn_VAL_353_X2N_ignore = 1;
+static const long asn_VAL_353_X2N_optional = 0;
+static const long asn_VAL_354_X2N_id_RequestedSplitSRBsrelease = 280;
+static const long asn_VAL_354_X2N_ignore = 1;
+static const long asn_VAL_354_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_343_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_343_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_343_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_344_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_344_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_344_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_345_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_345_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_345_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_346_X2N_id_SelectedPLMN },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_346_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PLMN_Identity },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_346_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_347_X2N_id_HandoverRestrictionList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_347_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_HandoverRestrictionList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_347_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_348_X2N_id_SCGConfigurationQuery },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_348_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SCGConfigurationQuery },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_348_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_349_X2N_id_UE_ContextInformation_SgNBModReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_349_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextInformation_SgNBModReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_349_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_350_X2N_id_MeNBtoSgNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_350_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSgNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_350_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_351_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_351_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_351_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_352_X2N_id_MeNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_352_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_352_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_353_X2N_id_RequestedSplitSRBs },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_353_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_353_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_354_X2N_id_RequestedSplitSRBsrelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_354_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_354_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationRequest_IEs_1[] = {
+	{ 12, 4, asn_IOS_X2N_SgNBModificationRequest_IEs_1_rows }
+};
+static const long asn_VAL_358_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_358_X2N_ignore = 1;
+static const long asn_VAL_358_X2N_mandatory = 2;
+static const long asn_VAL_359_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_359_X2N_ignore = 1;
+static const long asn_VAL_359_X2N_mandatory = 2;
+static const long asn_VAL_360_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList = 219;
+static const long asn_VAL_360_X2N_ignore = 1;
+static const long asn_VAL_360_X2N_optional = 0;
+static const long asn_VAL_361_X2N_id_E_RABs_Admitted_ToBeModified_SgNBModAckList = 220;
+static const long asn_VAL_361_X2N_ignore = 1;
+static const long asn_VAL_361_X2N_optional = 0;
+static const long asn_VAL_362_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList = 221;
+static const long asn_VAL_362_X2N_ignore = 1;
+static const long asn_VAL_362_X2N_optional = 0;
+static const long asn_VAL_363_X2N_id_E_RABs_NotAdmitted_List = 3;
+static const long asn_VAL_363_X2N_ignore = 1;
+static const long asn_VAL_363_X2N_optional = 0;
+static const long asn_VAL_364_X2N_id_SgNBtoMeNBContainer = 211;
+static const long asn_VAL_364_X2N_ignore = 1;
+static const long asn_VAL_364_X2N_optional = 0;
+static const long asn_VAL_365_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_365_X2N_ignore = 1;
+static const long asn_VAL_365_X2N_optional = 0;
+static const long asn_VAL_366_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_366_X2N_ignore = 1;
+static const long asn_VAL_366_X2N_optional = 0;
+static const long asn_VAL_367_X2N_id_SgNBResourceCoordinationInformation = 258;
+static const long asn_VAL_367_X2N_ignore = 1;
+static const long asn_VAL_367_X2N_optional = 0;
+static const long asn_VAL_368_X2N_id_AdmittedSplitSRBs = 212;
+static const long asn_VAL_368_X2N_ignore = 1;
+static const long asn_VAL_368_X2N_optional = 0;
+static const long asn_VAL_369_X2N_id_AdmittedSplitSRBsrelease = 281;
+static const long asn_VAL_369_X2N_ignore = 1;
+static const long asn_VAL_369_X2N_optional = 0;
+static const long asn_VAL_370_X2N_id_RRCConfigIndication = 272;
+static const long asn_VAL_370_X2N_reject = 0;
+static const long asn_VAL_370_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_358_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_358_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_358_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_359_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_359_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_359_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_360_X2N_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_360_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_360_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_361_X2N_id_E_RABs_Admitted_ToBeModified_SgNBModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_361_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_361_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_362_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_362_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_362_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_363_X2N_id_E_RABs_NotAdmitted_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_363_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RAB_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_363_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_364_X2N_id_SgNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_364_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_364_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_365_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_365_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_365_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_366_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_366_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_366_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_367_X2N_id_SgNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_367_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_367_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_368_X2N_id_AdmittedSplitSRBs },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_368_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_368_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_369_X2N_id_AdmittedSplitSRBsrelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_369_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRBs },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_369_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_370_X2N_id_RRCConfigIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_370_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RRC_Config_Ind },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_370_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationRequestAcknowledge_IEs_1[] = {
+	{ 13, 4, asn_IOS_X2N_SgNBModificationRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_374_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_374_X2N_ignore = 1;
+static const long asn_VAL_374_X2N_mandatory = 2;
+static const long asn_VAL_375_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_375_X2N_ignore = 1;
+static const long asn_VAL_375_X2N_mandatory = 2;
+static const long asn_VAL_376_X2N_id_Cause = 5;
+static const long asn_VAL_376_X2N_ignore = 1;
+static const long asn_VAL_376_X2N_mandatory = 2;
+static const long asn_VAL_377_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_377_X2N_ignore = 1;
+static const long asn_VAL_377_X2N_optional = 0;
+static const long asn_VAL_378_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_378_X2N_ignore = 1;
+static const long asn_VAL_378_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationRequestReject_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_374_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_374_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_374_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_375_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_375_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_375_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_376_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_376_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_376_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_377_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_377_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_377_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_378_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_378_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_378_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationRequestReject_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBModificationRequestReject_IEs_1_rows }
+};
+static const long asn_VAL_379_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_379_X2N_reject = 0;
+static const long asn_VAL_379_X2N_mandatory = 2;
+static const long asn_VAL_380_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_380_X2N_reject = 0;
+static const long asn_VAL_380_X2N_mandatory = 2;
+static const long asn_VAL_381_X2N_id_Cause = 5;
+static const long asn_VAL_381_X2N_ignore = 1;
+static const long asn_VAL_381_X2N_mandatory = 2;
+static const long asn_VAL_382_X2N_id_PDCPChangeIndication = 249;
+static const long asn_VAL_382_X2N_ignore = 1;
+static const long asn_VAL_382_X2N_optional = 0;
+static const long asn_VAL_383_X2N_id_E_RABs_ToBeReleased_SgNBModReqdList = 225;
+static const long asn_VAL_383_X2N_ignore = 1;
+static const long asn_VAL_383_X2N_optional = 0;
+static const long asn_VAL_384_X2N_id_SgNBtoMeNBContainer = 211;
+static const long asn_VAL_384_X2N_ignore = 1;
+static const long asn_VAL_384_X2N_optional = 0;
+static const long asn_VAL_385_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_385_X2N_reject = 0;
+static const long asn_VAL_385_X2N_optional = 0;
+static const long asn_VAL_386_X2N_id_E_RABs_ToBeModified_SgNBModReqdList = 226;
+static const long asn_VAL_386_X2N_ignore = 1;
+static const long asn_VAL_386_X2N_optional = 0;
+static const long asn_VAL_387_X2N_id_SgNBResourceCoordinationInformation = 258;
+static const long asn_VAL_387_X2N_ignore = 1;
+static const long asn_VAL_387_X2N_optional = 0;
+static const long asn_VAL_388_X2N_id_RRCConfigIndication = 272;
+static const long asn_VAL_388_X2N_reject = 0;
+static const long asn_VAL_388_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_379_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_379_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_379_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_380_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_380_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_380_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_381_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_381_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_381_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_382_X2N_id_PDCPChangeIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_382_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_PDCPChangeIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_382_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_383_X2N_id_E_RABs_ToBeReleased_SgNBModReqdList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_383_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_383_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_384_X2N_id_SgNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_384_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_384_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_385_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_385_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_385_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_386_X2N_id_E_RABs_ToBeModified_SgNBModReqdList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_386_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_386_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_387_X2N_id_SgNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_387_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_387_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_388_X2N_id_RRCConfigIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_388_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RRC_Config_Ind },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_388_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationRequired_IEs_1[] = {
+	{ 10, 4, asn_IOS_X2N_SgNBModificationRequired_IEs_1_rows }
+};
+static const long asn_VAL_391_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_391_X2N_ignore = 1;
+static const long asn_VAL_391_X2N_mandatory = 2;
+static const long asn_VAL_392_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_392_X2N_ignore = 1;
+static const long asn_VAL_392_X2N_mandatory = 2;
+static const long asn_VAL_393_X2N_id_E_RABs_AdmittedToBeModified_SgNBModConfList = 294;
+static const long asn_VAL_393_X2N_ignore = 1;
+static const long asn_VAL_393_X2N_optional = 0;
+static const long asn_VAL_394_X2N_id_MeNBtoSgNBContainer = 206;
+static const long asn_VAL_394_X2N_ignore = 1;
+static const long asn_VAL_394_X2N_optional = 0;
+static const long asn_VAL_395_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_395_X2N_ignore = 1;
+static const long asn_VAL_395_X2N_optional = 0;
+static const long asn_VAL_396_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_396_X2N_ignore = 1;
+static const long asn_VAL_396_X2N_optional = 0;
+static const long asn_VAL_397_X2N_id_MeNBResourceCoordinationInformation = 257;
+static const long asn_VAL_397_X2N_ignore = 1;
+static const long asn_VAL_397_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_391_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_391_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_391_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_392_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_392_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_392_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_393_X2N_id_E_RABs_AdmittedToBeModified_SgNBModConfList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_393_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_393_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_394_X2N_id_MeNBtoSgNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_394_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSgNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_394_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_395_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_395_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_395_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_396_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_396_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_396_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_397_X2N_id_MeNBResourceCoordinationInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_397_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBResourceCoordinationInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_397_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationConfirm_IEs_1[] = {
+	{ 7, 4, asn_IOS_X2N_SgNBModificationConfirm_IEs_1_rows }
+};
+static const long asn_VAL_399_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_399_X2N_ignore = 1;
+static const long asn_VAL_399_X2N_mandatory = 2;
+static const long asn_VAL_400_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_400_X2N_ignore = 1;
+static const long asn_VAL_400_X2N_mandatory = 2;
+static const long asn_VAL_401_X2N_id_Cause = 5;
+static const long asn_VAL_401_X2N_ignore = 1;
+static const long asn_VAL_401_X2N_mandatory = 2;
+static const long asn_VAL_402_X2N_id_MeNBtoSgNBContainer = 206;
+static const long asn_VAL_402_X2N_ignore = 1;
+static const long asn_VAL_402_X2N_optional = 0;
+static const long asn_VAL_403_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_403_X2N_ignore = 1;
+static const long asn_VAL_403_X2N_optional = 0;
+static const long asn_VAL_404_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_404_X2N_ignore = 1;
+static const long asn_VAL_404_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBModificationRefuse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_399_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_399_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_399_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_400_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_400_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_400_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_401_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_401_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_401_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_402_X2N_id_MeNBtoSgNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_402_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSgNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_402_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_403_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_403_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_403_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_404_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_404_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_404_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBModificationRefuse_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SgNBModificationRefuse_IEs_1_rows }
+};
+static const long asn_VAL_405_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_405_X2N_reject = 0;
+static const long asn_VAL_405_X2N_mandatory = 2;
+static const long asn_VAL_406_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_406_X2N_reject = 0;
+static const long asn_VAL_406_X2N_optional = 0;
+static const long asn_VAL_407_X2N_id_Cause = 5;
+static const long asn_VAL_407_X2N_ignore = 1;
+static const long asn_VAL_407_X2N_mandatory = 2;
+static const long asn_VAL_408_X2N_id_E_RABs_ToBeReleased_SgNBRelReqList = 231;
+static const long asn_VAL_408_X2N_ignore = 1;
+static const long asn_VAL_408_X2N_optional = 0;
+static const long asn_VAL_409_X2N_id_UE_ContextKeptIndicator = 154;
+static const long asn_VAL_409_X2N_ignore = 1;
+static const long asn_VAL_409_X2N_optional = 0;
+static const long asn_VAL_410_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_410_X2N_reject = 0;
+static const long asn_VAL_410_X2N_optional = 0;
+static const long asn_VAL_411_X2N_id_MeNBtoSgNBContainer = 206;
+static const long asn_VAL_411_X2N_reject = 0;
+static const long asn_VAL_411_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReleaseRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_405_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_405_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_405_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_406_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_406_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_406_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_407_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_407_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_407_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_408_X2N_id_E_RABs_ToBeReleased_SgNBRelReqList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_408_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_408_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_409_X2N_id_UE_ContextKeptIndicator },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_409_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_ContextKeptIndicator },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_409_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_410_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_410_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_410_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_411_X2N_id_MeNBtoSgNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_411_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_MeNBtoSgNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_411_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReleaseRequest_IEs_1[] = {
+	{ 7, 4, asn_IOS_X2N_SgNBReleaseRequest_IEs_1_rows }
+};
+static const long asn_VAL_413_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_413_X2N_ignore = 1;
+static const long asn_VAL_413_X2N_mandatory = 2;
+static const long asn_VAL_414_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_414_X2N_ignore = 1;
+static const long asn_VAL_414_X2N_mandatory = 2;
+static const long asn_VAL_415_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_415_X2N_ignore = 1;
+static const long asn_VAL_415_X2N_optional = 0;
+static const long asn_VAL_416_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_416_X2N_reject = 0;
+static const long asn_VAL_416_X2N_optional = 0;
+static const long asn_VAL_417_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList = 318;
+static const long asn_VAL_417_X2N_ignore = 1;
+static const long asn_VAL_417_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReleaseRequestAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_413_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_413_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_413_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_414_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_414_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_414_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_415_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_415_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_415_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_416_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_416_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_416_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_417_X2N_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_417_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_417_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReleaseRequestAcknowledge_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBReleaseRequestAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_419_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_419_X2N_ignore = 1;
+static const long asn_VAL_419_X2N_mandatory = 2;
+static const long asn_VAL_420_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_420_X2N_ignore = 1;
+static const long asn_VAL_420_X2N_mandatory = 2;
+static const long asn_VAL_421_X2N_id_Cause = 5;
+static const long asn_VAL_421_X2N_ignore = 1;
+static const long asn_VAL_421_X2N_mandatory = 2;
+static const long asn_VAL_422_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_422_X2N_ignore = 1;
+static const long asn_VAL_422_X2N_optional = 0;
+static const long asn_VAL_423_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_423_X2N_reject = 0;
+static const long asn_VAL_423_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReleaseRequestReject_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_419_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_419_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_419_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_420_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_420_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_420_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_421_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_421_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_421_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_422_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_422_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_422_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_423_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_423_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_423_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReleaseRequestReject_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBReleaseRequestReject_IEs_1_rows }
+};
+static const long asn_VAL_424_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_424_X2N_reject = 0;
+static const long asn_VAL_424_X2N_mandatory = 2;
+static const long asn_VAL_425_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_425_X2N_reject = 0;
+static const long asn_VAL_425_X2N_mandatory = 2;
+static const long asn_VAL_426_X2N_id_Cause = 5;
+static const long asn_VAL_426_X2N_ignore = 1;
+static const long asn_VAL_426_X2N_mandatory = 2;
+static const long asn_VAL_427_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_427_X2N_reject = 0;
+static const long asn_VAL_427_X2N_optional = 0;
+static const long asn_VAL_428_X2N_id_E_RABs_ToBeReleased_SgNBRelReqdList = 320;
+static const long asn_VAL_428_X2N_ignore = 1;
+static const long asn_VAL_428_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReleaseRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_424_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_424_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_424_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_425_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_425_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_425_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_426_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_426_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_426_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_427_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_427_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_427_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_428_X2N_id_E_RABs_ToBeReleased_SgNBRelReqdList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_428_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_428_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReleaseRequired_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBReleaseRequired_IEs_1_rows }
+};
+static const long asn_VAL_430_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_430_X2N_ignore = 1;
+static const long asn_VAL_430_X2N_mandatory = 2;
+static const long asn_VAL_431_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_431_X2N_ignore = 1;
+static const long asn_VAL_431_X2N_mandatory = 2;
+static const long asn_VAL_432_X2N_id_E_RABs_ToBeReleased_SgNBRelConfList = 233;
+static const long asn_VAL_432_X2N_ignore = 1;
+static const long asn_VAL_432_X2N_optional = 0;
+static const long asn_VAL_433_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_433_X2N_ignore = 1;
+static const long asn_VAL_433_X2N_optional = 0;
+static const long asn_VAL_434_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_434_X2N_ignore = 1;
+static const long asn_VAL_434_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBReleaseConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_430_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_430_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_430_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_431_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_431_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_431_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_432_X2N_id_E_RABs_ToBeReleased_SgNBRelConfList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_432_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_432_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_433_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_433_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_433_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_434_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_434_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_434_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBReleaseConfirm_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBReleaseConfirm_IEs_1_rows }
+};
+static const long asn_VAL_436_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_436_X2N_reject = 0;
+static const long asn_VAL_436_X2N_mandatory = 2;
+static const long asn_VAL_437_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_437_X2N_reject = 0;
+static const long asn_VAL_437_X2N_mandatory = 2;
+static const long asn_VAL_438_X2N_id_E_RABs_SubjectToSgNBCounterCheck_List = 235;
+static const long asn_VAL_438_X2N_ignore = 1;
+static const long asn_VAL_438_X2N_mandatory = 2;
+static const long asn_VAL_439_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_439_X2N_ignore = 1;
+static const long asn_VAL_439_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBCounterCheckRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_436_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_436_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_436_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_437_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_437_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_437_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_438_X2N_id_E_RABs_SubjectToSgNBCounterCheck_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_438_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_438_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_439_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_439_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_439_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBCounterCheckRequest_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_SgNBCounterCheckRequest_IEs_1_rows }
+};
+static const long asn_VAL_441_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_441_X2N_reject = 0;
+static const long asn_VAL_441_X2N_mandatory = 2;
+static const long asn_VAL_442_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_442_X2N_reject = 0;
+static const long asn_VAL_442_X2N_mandatory = 2;
+static const long asn_VAL_443_X2N_id_Target_SgNB_ID = 239;
+static const long asn_VAL_443_X2N_reject = 0;
+static const long asn_VAL_443_X2N_mandatory = 2;
+static const long asn_VAL_444_X2N_id_Cause = 5;
+static const long asn_VAL_444_X2N_ignore = 1;
+static const long asn_VAL_444_X2N_mandatory = 2;
+static const long asn_VAL_445_X2N_id_SgNBtoMeNBContainer = 211;
+static const long asn_VAL_445_X2N_reject = 0;
+static const long asn_VAL_445_X2N_optional = 0;
+static const long asn_VAL_446_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_446_X2N_reject = 0;
+static const long asn_VAL_446_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBChangeRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_441_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_441_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_441_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_442_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_442_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_442_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_443_X2N_id_Target_SgNB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_443_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalGNB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_443_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_444_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_444_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_444_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_445_X2N_id_SgNBtoMeNBContainer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_445_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNBtoMeNBContainer },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_445_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_446_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_446_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_446_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBChangeRequired_IEs_1[] = {
+	{ 6, 4, asn_IOS_X2N_SgNBChangeRequired_IEs_1_rows }
+};
+static const long asn_VAL_447_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_447_X2N_ignore = 1;
+static const long asn_VAL_447_X2N_mandatory = 2;
+static const long asn_VAL_448_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_448_X2N_ignore = 1;
+static const long asn_VAL_448_X2N_mandatory = 2;
+static const long asn_VAL_449_X2N_id_E_RABs_ToBeReleased_SgNBChaConfList = 229;
+static const long asn_VAL_449_X2N_ignore = 1;
+static const long asn_VAL_449_X2N_optional = 0;
+static const long asn_VAL_450_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_450_X2N_ignore = 1;
+static const long asn_VAL_450_X2N_optional = 0;
+static const long asn_VAL_451_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_451_X2N_ignore = 1;
+static const long asn_VAL_451_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBChangeConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_447_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_447_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_447_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_448_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_448_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_448_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_449_X2N_id_E_RABs_ToBeReleased_SgNBChaConfList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_449_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_449_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_450_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_450_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_450_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_451_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_451_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_451_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBChangeConfirm_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBChangeConfirm_IEs_1_rows }
+};
+static const long asn_VAL_453_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_453_X2N_reject = 0;
+static const long asn_VAL_453_X2N_mandatory = 2;
+static const long asn_VAL_454_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_454_X2N_reject = 0;
+static const long asn_VAL_454_X2N_mandatory = 2;
+static const long asn_VAL_455_X2N_id_SplitSRB = 242;
+static const long asn_VAL_455_X2N_reject = 0;
+static const long asn_VAL_455_X2N_optional = 0;
+static const long asn_VAL_456_X2N_id_UENRMeasurement = 243;
+static const long asn_VAL_456_X2N_reject = 0;
+static const long asn_VAL_456_X2N_optional = 0;
+static const long asn_VAL_457_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_457_X2N_reject = 0;
+static const long asn_VAL_457_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_RRCTransfer_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_453_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_453_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_453_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_454_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_454_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_454_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_455_X2N_id_SplitSRB },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_455_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SplitSRB },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_455_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_456_X2N_id_UENRMeasurement },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_456_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UENRMeasurement },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_456_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_457_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_457_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_457_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_RRCTransfer_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_RRCTransfer_IEs_1_rows }
+};
+static const long asn_VAL_458_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_458_X2N_ignore = 1;
+static const long asn_VAL_458_X2N_mandatory = 2;
+static const long asn_VAL_459_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_459_X2N_ignore = 1;
+static const long asn_VAL_459_X2N_mandatory = 2;
+static const long asn_VAL_460_X2N_id_Cause = 5;
+static const long asn_VAL_460_X2N_ignore = 1;
+static const long asn_VAL_460_X2N_mandatory = 2;
+static const long asn_VAL_461_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_461_X2N_ignore = 1;
+static const long asn_VAL_461_X2N_optional = 0;
+static const long asn_VAL_462_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_462_X2N_reject = 0;
+static const long asn_VAL_462_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBChangeRefuse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_458_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_458_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_458_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_459_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_459_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_459_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_460_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_460_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_460_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_461_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_461_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_461_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_462_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_462_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_462_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBChangeRefuse_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBChangeRefuse_IEs_1_rows }
+};
+static const long asn_VAL_463_X2N_id_InitiatingNodeType_EndcX2Setup = 244;
+static const long asn_VAL_463_X2N_reject = 0;
+static const long asn_VAL_463_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2SetupRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_463_X2N_id_InitiatingNodeType_EndcX2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_463_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_InitiatingNodeType_EndcX2Setup },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_463_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2SetupRequest_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCX2SetupRequest_IEs_1_rows }
+};
+static const long asn_VAL_464_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_464_X2N_reject = 0;
+static const long asn_VAL_464_X2N_mandatory = 2;
+static const long asn_VAL_465_X2N_id_ServedEUTRAcellsENDCX2ManagementList = 250;
+static const long asn_VAL_465_X2N_reject = 0;
+static const long asn_VAL_465_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_ENDCX2SetupReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_464_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_464_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_464_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_465_X2N_id_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_465_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_465_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_ENDCX2SetupReqIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_ENB_ENDCX2SetupReqIEs_1_rows }
+};
+static const long asn_VAL_466_X2N_id_Globalen_gNB_ID = 252;
+static const long asn_VAL_466_X2N_reject = 0;
+static const long asn_VAL_466_X2N_mandatory = 2;
+static const long asn_VAL_467_X2N_id_ServedNRcellsENDCX2ManagementList = 253;
+static const long asn_VAL_467_X2N_reject = 0;
+static const long asn_VAL_467_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCX2SetupReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_466_X2N_id_Globalen_gNB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_466_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalGNB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_466_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_467_X2N_id_ServedNRcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_467_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_467_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCX2SetupReqIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_En_gNB_ENDCX2SetupReqIEs_1_rows }
+};
+static const long asn_VAL_468_X2N_id_RespondingNodeType_EndcX2Setup = 246;
+static const long asn_VAL_468_X2N_reject = 0;
+static const long asn_VAL_468_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2SetupResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_468_X2N_id_RespondingNodeType_EndcX2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_468_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RespondingNodeType_EndcX2Setup },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_468_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2SetupResponse_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCX2SetupResponse_IEs_1_rows }
+};
+static const long asn_VAL_469_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_469_X2N_reject = 0;
+static const long asn_VAL_469_X2N_mandatory = 2;
+static const long asn_VAL_470_X2N_id_ServedEUTRAcellsENDCX2ManagementList = 250;
+static const long asn_VAL_470_X2N_reject = 0;
+static const long asn_VAL_470_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_ENDCX2SetupReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_469_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_469_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_469_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_470_X2N_id_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_470_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_470_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_ENDCX2SetupReqAckIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_ENB_ENDCX2SetupReqAckIEs_1_rows }
+};
+static const long asn_VAL_471_X2N_id_Globalen_gNB_ID = 252;
+static const long asn_VAL_471_X2N_reject = 0;
+static const long asn_VAL_471_X2N_mandatory = 2;
+static const long asn_VAL_472_X2N_id_ServedNRcellsENDCX2ManagementList = 253;
+static const long asn_VAL_472_X2N_reject = 0;
+static const long asn_VAL_472_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCX2SetupReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_471_X2N_id_Globalen_gNB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_471_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalGNB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_471_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_472_X2N_id_ServedNRcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_472_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_472_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCX2SetupReqAckIEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_En_gNB_ENDCX2SetupReqAckIEs_1_rows }
+};
+static const long asn_VAL_473_X2N_id_Cause = 5;
+static const long asn_VAL_473_X2N_ignore = 1;
+static const long asn_VAL_473_X2N_mandatory = 2;
+static const long asn_VAL_474_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_474_X2N_ignore = 1;
+static const long asn_VAL_474_X2N_optional = 0;
+static const long asn_VAL_475_X2N_id_TimeToWait = 22;
+static const long asn_VAL_475_X2N_ignore = 1;
+static const long asn_VAL_475_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2SetupFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_473_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_473_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_473_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_474_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_474_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_474_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_475_X2N_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_475_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_475_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2SetupFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENDCX2SetupFailure_IEs_1_rows }
+};
+static const long asn_VAL_476_X2N_id_InitiatingNodeType_EndcConfigUpdate = 245;
+static const long asn_VAL_476_X2N_reject = 0;
+static const long asn_VAL_476_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCConfigurationUpdate_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_476_X2N_id_InitiatingNodeType_EndcConfigUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_476_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_InitiatingNodeType_EndcConfigUpdate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_476_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCConfigurationUpdate_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCConfigurationUpdate_IEs_1_rows }
+};
+static const long asn_VAL_477_X2N_id_CellAssistanceInformation = 251;
+static const long asn_VAL_477_X2N_reject = 0;
+static const long asn_VAL_477_X2N_optional = 0;
+static const long asn_VAL_478_X2N_id_ServedEUTRAcellsENDCX2ManagementList = 250;
+static const long asn_VAL_478_X2N_reject = 0;
+static const long asn_VAL_478_X2N_optional = 0;
+static const long asn_VAL_479_X2N_id_ServedEUTRAcellsToModifyListENDCConfUpd = 259;
+static const long asn_VAL_479_X2N_reject = 0;
+static const long asn_VAL_479_X2N_optional = 0;
+static const long asn_VAL_480_X2N_id_ServedEUTRAcellsToDeleteListENDCConfUpd = 260;
+static const long asn_VAL_480_X2N_reject = 0;
+static const long asn_VAL_480_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_ENDCConfigUpdateIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_477_X2N_id_CellAssistanceInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_477_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CellAssistanceInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_477_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_478_X2N_id_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_478_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_478_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_479_X2N_id_ServedEUTRAcellsToModifyListENDCConfUpd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_479_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_479_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_480_X2N_id_ServedEUTRAcellsToDeleteListENDCConfUpd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_480_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_480_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_ENDCConfigUpdateIEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_ENB_ENDCConfigUpdateIEs_1_rows }
+};
+static const long asn_VAL_481_X2N_id_ServedNRcellsENDCX2ManagementList = 253;
+static const long asn_VAL_481_X2N_reject = 0;
+static const long asn_VAL_481_X2N_optional = 0;
+static const long asn_VAL_482_X2N_id_ServedNRcellsToModifyListENDCConfUpd = 261;
+static const long asn_VAL_482_X2N_reject = 0;
+static const long asn_VAL_482_X2N_optional = 0;
+static const long asn_VAL_483_X2N_id_ServedNRcellsToDeleteListENDCConfUpd = 262;
+static const long asn_VAL_483_X2N_reject = 0;
+static const long asn_VAL_483_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCConfigUpdateIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_481_X2N_id_ServedNRcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_481_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_481_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_482_X2N_id_ServedNRcellsToModifyListENDCConfUpd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_482_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_482_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_483_X2N_id_ServedNRcellsToDeleteListENDCConfUpd },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_483_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_483_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCConfigUpdateIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_En_gNB_ENDCConfigUpdateIEs_1_rows }
+};
+static const long asn_VAL_484_X2N_id_RespondingNodeType_EndcConfigUpdate = 247;
+static const long asn_VAL_484_X2N_reject = 0;
+static const long asn_VAL_484_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCConfigurationUpdateAcknowledge_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_484_X2N_id_RespondingNodeType_EndcConfigUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_484_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RespondingNodeType_EndcConfigUpdate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_484_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCConfigurationUpdateAcknowledge_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCConfigurationUpdateAcknowledge_IEs_1_rows }
+};
+static const long asn_VAL_485_X2N_id_ServedNRcellsENDCX2ManagementList = 253;
+static const long asn_VAL_485_X2N_reject = 0;
+static const long asn_VAL_485_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCConfigUpdateAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_485_X2N_id_ServedNRcellsENDCX2ManagementList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_485_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRcellsENDCX2ManagementList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_485_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCConfigUpdateAckIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_En_gNB_ENDCConfigUpdateAckIEs_1_rows }
+};
+static const long asn_VAL_486_X2N_id_Cause = 5;
+static const long asn_VAL_486_X2N_ignore = 1;
+static const long asn_VAL_486_X2N_mandatory = 2;
+static const long asn_VAL_487_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_487_X2N_ignore = 1;
+static const long asn_VAL_487_X2N_optional = 0;
+static const long asn_VAL_488_X2N_id_TimeToWait = 22;
+static const long asn_VAL_488_X2N_ignore = 1;
+static const long asn_VAL_488_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCConfigurationUpdateFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_486_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_486_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_486_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_487_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_487_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_487_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_488_X2N_id_TimeToWait },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_488_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_TimeToWait },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_488_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCConfigurationUpdateFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENDCConfigurationUpdateFailure_IEs_1_rows }
+};
+static const long asn_VAL_489_X2N_id_ServedNRCellsToActivate = 267;
+static const long asn_VAL_489_X2N_reject = 0;
+static const long asn_VAL_489_X2N_mandatory = 2;
+static const long asn_VAL_490_X2N_id_ActivationID = 256;
+static const long asn_VAL_490_X2N_reject = 0;
+static const long asn_VAL_490_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCCellActivationRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_489_X2N_id_ServedNRCellsToActivate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_489_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ServedNRCellsToActivate },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_489_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_490_X2N_id_ActivationID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_490_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ActivationID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_490_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCCellActivationRequest_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_ENDCCellActivationRequest_IEs_1_rows }
+};
+static const long asn_VAL_491_X2N_id_ActivatedNRCellList = 268;
+static const long asn_VAL_491_X2N_ignore = 1;
+static const long asn_VAL_491_X2N_mandatory = 2;
+static const long asn_VAL_492_X2N_id_ActivationID = 256;
+static const long asn_VAL_492_X2N_reject = 0;
+static const long asn_VAL_492_X2N_mandatory = 2;
+static const long asn_VAL_493_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_493_X2N_ignore = 1;
+static const long asn_VAL_493_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCCellActivationResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_491_X2N_id_ActivatedNRCellList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_491_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ActivatedNRCellList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_491_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_492_X2N_id_ActivationID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_492_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ActivationID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_492_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_493_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_493_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_493_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCCellActivationResponse_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENDCCellActivationResponse_IEs_1_rows }
+};
+static const long asn_VAL_494_X2N_id_ActivationID = 256;
+static const long asn_VAL_494_X2N_reject = 0;
+static const long asn_VAL_494_X2N_mandatory = 2;
+static const long asn_VAL_495_X2N_id_Cause = 5;
+static const long asn_VAL_495_X2N_ignore = 1;
+static const long asn_VAL_495_X2N_mandatory = 2;
+static const long asn_VAL_496_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_496_X2N_ignore = 1;
+static const long asn_VAL_496_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCCellActivationFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_494_X2N_id_ActivationID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_494_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ActivationID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_494_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_495_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_495_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_495_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_496_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_496_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_496_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCCellActivationFailure_IEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENDCCellActivationFailure_IEs_1_rows }
+};
+static const long asn_VAL_497_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_497_X2N_reject = 0;
+static const long asn_VAL_497_X2N_mandatory = 2;
+static const long asn_VAL_498_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_498_X2N_reject = 0;
+static const long asn_VAL_498_X2N_mandatory = 2;
+static const long asn_VAL_499_X2N_id_SecondaryRATUsageReportList = 265;
+static const long asn_VAL_499_X2N_reject = 0;
+static const long asn_VAL_499_X2N_mandatory = 2;
+static const long asn_VAL_500_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_500_X2N_reject = 0;
+static const long asn_VAL_500_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SecondaryRATDataUsageReport_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_497_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_497_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_497_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_498_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_498_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_498_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_499_X2N_id_SecondaryRATUsageReportList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_499_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SecondaryRATUsageReportList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_499_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_500_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_500_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_500_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SecondaryRATDataUsageReport_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_SecondaryRATDataUsageReport_IEs_1_rows }
+};
+static const long asn_VAL_501_X2N_id_MeNB_UE_X2AP_ID = 111;
+static const long asn_VAL_501_X2N_reject = 0;
+static const long asn_VAL_501_X2N_mandatory = 2;
+static const long asn_VAL_502_X2N_id_SgNB_UE_X2AP_ID = 207;
+static const long asn_VAL_502_X2N_reject = 0;
+static const long asn_VAL_502_X2N_mandatory = 2;
+static const long asn_VAL_503_X2N_id_UEContextLevelUserPlaneActivity = 296;
+static const long asn_VAL_503_X2N_ignore = 1;
+static const long asn_VAL_503_X2N_optional = 0;
+static const long asn_VAL_504_X2N_id_ERABActivityNotifyItemList = 297;
+static const long asn_VAL_504_X2N_ignore = 1;
+static const long asn_VAL_504_X2N_optional = 0;
+static const long asn_VAL_505_X2N_id_MeNB_UE_X2AP_ID_Extension = 157;
+static const long asn_VAL_505_X2N_reject = 0;
+static const long asn_VAL_505_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_SgNBActivityNotification_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_501_X2N_id_MeNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_501_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_501_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_502_X2N_id_SgNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_502_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SgNB_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_502_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_503_X2N_id_UEContextLevelUserPlaneActivity },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_503_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UserPlaneTrafficActivityReport },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_503_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_504_X2N_id_ERABActivityNotifyItemList },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_504_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ERABActivityNotifyItemList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_504_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_505_X2N_id_MeNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_505_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_505_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_SgNBActivityNotification_IEs_1[] = {
+	{ 5, 4, asn_IOS_X2N_SgNBActivityNotification_IEs_1_rows }
+};
+static const long asn_VAL_506_X2N_id_UEs_ToBeReset = 270;
+static const long asn_VAL_506_X2N_reject = 0;
+static const long asn_VAL_506_X2N_mandatory = 2;
+static const long asn_VAL_507_X2N_id_Cause = 5;
+static const long asn_VAL_507_X2N_ignore = 1;
+static const long asn_VAL_507_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCPartialResetRequired_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_506_X2N_id_UEs_ToBeReset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_506_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UEsToBeResetList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_506_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_507_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_507_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_507_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCPartialResetRequired_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_ENDCPartialResetRequired_IEs_1_rows }
+};
+static const long asn_VAL_508_X2N_id_UEs_Admitted_ToBeReset = 271;
+static const long asn_VAL_508_X2N_reject = 0;
+static const long asn_VAL_508_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCPartialResetConfirm_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_508_X2N_id_UEs_Admitted_ToBeReset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_508_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UEsToBeResetList },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_508_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCPartialResetConfirm_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCPartialResetConfirm_IEs_1_rows }
+};
+static const long asn_VAL_509_X2N_id_InitiatingNodeType_EutranrCellResourceCoordination = 285;
+static const long asn_VAL_509_X2N_reject = 0;
+static const long asn_VAL_509_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_EUTRANRCellResourceCoordinationRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_509_X2N_id_InitiatingNodeType_EutranrCellResourceCoordination },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_509_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_InitiatingNodeType_EutranrCellResourceCoordination },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_509_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_EUTRANRCellResourceCoordinationRequest_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_EUTRANRCellResourceCoordinationRequest_IEs_1_rows }
+};
+static const long asn_VAL_510_X2N_id_DataTrafficResourceIndication = 287;
+static const long asn_VAL_510_X2N_reject = 0;
+static const long asn_VAL_510_X2N_mandatory = 2;
+static const long asn_VAL_511_X2N_id_SpectrumSharingGroupID = 288;
+static const long asn_VAL_511_X2N_reject = 0;
+static const long asn_VAL_511_X2N_mandatory = 2;
+static const long asn_VAL_512_X2N_id_ListofEUTRACellsinEUTRACoordinationReq = 289;
+static const long asn_VAL_512_X2N_reject = 0;
+static const long asn_VAL_512_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_510_X2N_id_DataTrafficResourceIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_510_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_DataTrafficResourceIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_510_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_511_X2N_id_SpectrumSharingGroupID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_511_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SpectrumSharingGroupID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_511_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_512_X2N_id_ListofEUTRACellsinEUTRACoordinationReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_512_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_512_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows }
+};
+static const long asn_VAL_513_X2N_id_DataTrafficResourceIndication = 287;
+static const long asn_VAL_513_X2N_reject = 0;
+static const long asn_VAL_513_X2N_mandatory = 2;
+static const long asn_VAL_514_X2N_id_ListofEUTRACellsinNRCoordinationReq = 291;
+static const long asn_VAL_514_X2N_reject = 0;
+static const long asn_VAL_514_X2N_mandatory = 2;
+static const long asn_VAL_515_X2N_id_SpectrumSharingGroupID = 288;
+static const long asn_VAL_515_X2N_reject = 0;
+static const long asn_VAL_515_X2N_mandatory = 2;
+static const long asn_VAL_516_X2N_id_ListofNRCellsinNRCoordinationReq = 292;
+static const long asn_VAL_516_X2N_reject = 0;
+static const long asn_VAL_516_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_513_X2N_id_DataTrafficResourceIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_513_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_DataTrafficResourceIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_513_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_514_X2N_id_ListofEUTRACellsinNRCoordinationReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_514_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_514_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_515_X2N_id_SpectrumSharingGroupID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_515_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SpectrumSharingGroupID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_515_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_516_X2N_id_ListofNRCellsinNRCoordinationReq },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_516_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ListofNRCellsinNRCoordinationReq },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_516_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1_rows }
+};
+static const long asn_VAL_517_X2N_id_RespondingNodeType_EutranrCellResourceCoordination = 286;
+static const long asn_VAL_517_X2N_reject = 0;
+static const long asn_VAL_517_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_EUTRANRCellResourceCoordinationResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_517_X2N_id_RespondingNodeType_EutranrCellResourceCoordination },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_517_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RespondingNodeType_EutranrCellResourceCoordination },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_517_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_EUTRANRCellResourceCoordinationResponse_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_EUTRANRCellResourceCoordinationResponse_IEs_1_rows }
+};
+static const long asn_VAL_518_X2N_id_DataTrafficResourceIndication = 287;
+static const long asn_VAL_518_X2N_reject = 0;
+static const long asn_VAL_518_X2N_mandatory = 2;
+static const long asn_VAL_519_X2N_id_SpectrumSharingGroupID = 288;
+static const long asn_VAL_519_X2N_reject = 0;
+static const long asn_VAL_519_X2N_mandatory = 2;
+static const long asn_VAL_520_X2N_id_ListofEUTRACellsinEUTRACoordinationResp = 290;
+static const long asn_VAL_520_X2N_reject = 0;
+static const long asn_VAL_520_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_518_X2N_id_DataTrafficResourceIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_518_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_DataTrafficResourceIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_518_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_519_X2N_id_SpectrumSharingGroupID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_519_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SpectrumSharingGroupID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_519_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_520_X2N_id_ListofEUTRACellsinEUTRACoordinationResp },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_520_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_520_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows }
+};
+static const long asn_VAL_521_X2N_id_DataTrafficResourceIndication = 287;
+static const long asn_VAL_521_X2N_reject = 0;
+static const long asn_VAL_521_X2N_mandatory = 2;
+static const long asn_VAL_522_X2N_id_SpectrumSharingGroupID = 288;
+static const long asn_VAL_522_X2N_reject = 0;
+static const long asn_VAL_522_X2N_mandatory = 2;
+static const long asn_VAL_523_X2N_id_ListofNRCellsinNRCoordinationResp = 293;
+static const long asn_VAL_523_X2N_reject = 0;
+static const long asn_VAL_523_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_521_X2N_id_DataTrafficResourceIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_521_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_DataTrafficResourceIndication },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_521_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_522_X2N_id_SpectrumSharingGroupID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_522_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_SpectrumSharingGroupID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_522_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_523_X2N_id_ListofNRCellsinNRCoordinationResp },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_523_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_ListofNRCellsinNRCoordinationResp },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_523_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1[] = {
+	{ 3, 4, asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1_rows }
+};
+static const long asn_VAL_524_X2N_id_InitiatingNodeType_EndcX2Removal = 298;
+static const long asn_VAL_524_X2N_reject = 0;
+static const long asn_VAL_524_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2RemovalRequest_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_524_X2N_id_InitiatingNodeType_EndcX2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_524_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_InitiatingNodeType_EndcX2Removal },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_524_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2RemovalRequest_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCX2RemovalRequest_IEs_1_rows }
+};
+static const long asn_VAL_525_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_525_X2N_reject = 0;
+static const long asn_VAL_525_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_ENDCX2RemovalReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_525_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_525_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_525_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_ENDCX2RemovalReqIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENB_ENDCX2RemovalReqIEs_1_rows }
+};
+static const long asn_VAL_526_X2N_id_Globalen_gNB_ID = 252;
+static const long asn_VAL_526_X2N_reject = 0;
+static const long asn_VAL_526_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCX2RemovalReqIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_526_X2N_id_Globalen_gNB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_526_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalGNB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_526_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCX2RemovalReqIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_En_gNB_ENDCX2RemovalReqIEs_1_rows }
+};
+static const long asn_VAL_527_X2N_id_RespondingNodeType_EndcX2Removal = 299;
+static const long asn_VAL_527_X2N_reject = 0;
+static const long asn_VAL_527_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2RemovalResponse_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_527_X2N_id_RespondingNodeType_EndcX2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_527_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_RespondingNodeType_EndcX2Removal },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_527_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2RemovalResponse_IEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENDCX2RemovalResponse_IEs_1_rows }
+};
+static const long asn_VAL_528_X2N_id_GlobalENB_ID = 21;
+static const long asn_VAL_528_X2N_reject = 0;
+static const long asn_VAL_528_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_ENB_ENDCX2RemovalReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_528_X2N_id_GlobalENB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_528_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalENB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_528_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENB_ENDCX2RemovalReqAckIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_ENB_ENDCX2RemovalReqAckIEs_1_rows }
+};
+static const long asn_VAL_529_X2N_id_Globalen_gNB_ID = 252;
+static const long asn_VAL_529_X2N_reject = 0;
+static const long asn_VAL_529_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_En_gNB_ENDCX2RemovalReqAckIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_529_X2N_id_Globalen_gNB_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_529_X2N_reject },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GlobalGNB_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_529_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_En_gNB_ENDCX2RemovalReqAckIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_En_gNB_ENDCX2RemovalReqAckIEs_1_rows }
+};
+static const long asn_VAL_530_X2N_id_Cause = 5;
+static const long asn_VAL_530_X2N_ignore = 1;
+static const long asn_VAL_530_X2N_mandatory = 2;
+static const long asn_VAL_531_X2N_id_CriticalityDiagnostics = 17;
+static const long asn_VAL_531_X2N_ignore = 1;
+static const long asn_VAL_531_X2N_optional = 0;
+static const asn_ioc_cell_t asn_IOS_X2N_ENDCX2RemovalFailure_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_530_X2N_id_Cause },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_530_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_Cause },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_530_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_531_X2N_id_CriticalityDiagnostics },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_531_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_CriticalityDiagnostics },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_531_X2N_optional }
+};
+static const asn_ioc_set_t asn_IOS_X2N_ENDCX2RemovalFailure_IEs_1[] = {
+	{ 2, 4, asn_IOS_X2N_ENDCX2RemovalFailure_IEs_1_rows }
+};
+static const long asn_VAL_532_X2N_id_New_eNB_UE_X2AP_ID_Extension = 155;
+static const long asn_VAL_532_X2N_ignore = 1;
+static const long asn_VAL_532_X2N_optional = 0;
+static const long asn_VAL_533_X2N_id_Old_eNB_UE_X2AP_ID = 10;
+static const long asn_VAL_533_X2N_ignore = 1;
+static const long asn_VAL_533_X2N_mandatory = 2;
+static const long asn_VAL_534_X2N_id_Old_eNB_UE_X2AP_ID_Extension = 156;
+static const long asn_VAL_534_X2N_ignore = 1;
+static const long asn_VAL_534_X2N_optional = 0;
+static const long asn_VAL_535_X2N_id_E_RABs_DataForwardingAddress_List = 307;
+static const long asn_VAL_535_X2N_ignore = 1;
+static const long asn_VAL_535_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_DataForwardingAddressIndication_IEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_532_X2N_id_New_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_532_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_532_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_533_X2N_id_Old_eNB_UE_X2AP_ID },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_533_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_533_X2N_mandatory },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_534_X2N_id_Old_eNB_UE_X2AP_ID_Extension },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_534_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_UE_X2AP_ID_Extension },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_534_X2N_optional },
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_535_X2N_id_E_RABs_DataForwardingAddress_List },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_535_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_E_RABs_DataForwardingAddress_List },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_535_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_DataForwardingAddressIndication_IEs_1[] = {
+	{ 4, 4, asn_IOS_X2N_DataForwardingAddressIndication_IEs_1_rows }
+};
+static const long asn_VAL_537_X2N_id_GNBOverloadInformation = 310;
+static const long asn_VAL_537_X2N_ignore = 1;
+static const long asn_VAL_537_X2N_mandatory = 2;
+static const asn_ioc_cell_t asn_IOS_X2N_GNBStatusIndicationIEs_1_rows[] = {
+	{ "&id", aioc__value, &asn_DEF_X2N_ProtocolIE_ID, &asn_VAL_537_X2N_id_GNBOverloadInformation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_537_X2N_ignore },
+	{ "&Value", aioc__type, &asn_DEF_X2N_GNBOverloadInformation },
+	{ "&presence", aioc__value, &asn_DEF_X2N_Presence, &asn_VAL_537_X2N_mandatory }
+};
+static const asn_ioc_set_t asn_IOS_X2N_GNBStatusIndicationIEs_1[] = {
+	{ 1, 4, asn_IOS_X2N_GNBStatusIndicationIEs_1_rows }
+};
+static int
+memb_X2N_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetup_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetup_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetup_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetup_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_5(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToStatusTransfer_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToStatusTransfer_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_9(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellInformation_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellInformation_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellInformation_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellInformation_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellInformation_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellInformation_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_13(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellToReport_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellToReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellToReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellToReport_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellToReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellToReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_17(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MeasurementInitiationResult_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeasurementInitiationResult_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MeasurementInitiationResult_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeasurementInitiationResult_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_21(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MeasurementFailureCause_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeasurementFailureCause_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeasurementFailureCause_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MeasurementFailureCause_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MeasurementFailureCause_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MeasurementFailureCause_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_25(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CompleteFailureCauseInformation_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CompleteFailureCauseInformation_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CompleteFailureCauseInformation_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CompleteFailureCauseInformation_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_29(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellMeasurementResult_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellMeasurementResult_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellMeasurementResult_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellMeasurementResult_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellMeasurementResult_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellMeasurementResult_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_33(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_37(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_41(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ModReqItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_ModReqItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_45(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_ModReqItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_ModReqItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_49(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_ModReqItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_ModReqItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_ModReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_53(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_57(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_61(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_65(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_ModReqdItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_ModReqdItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_69(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_RelReqItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_RelReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_RelReqItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_RelReqItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_73(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_RelConfItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_RelConfItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_RelConfItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_RelConfItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_77(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToCounterCheckItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToCounterCheckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToCounterCheckItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToCounterCheckItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_81(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetupRetrieve_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeSetupRetrieve_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_85(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_89(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_93(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_97(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_101(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_105(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_109(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_113(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_117(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_121(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_125(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_129(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_133(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_137(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_141(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_145(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_149(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_153(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABs_DataForwardingAddress_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_DataForwardingAddress_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABs_DataForwardingAddress_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABs_DataForwardingAddress_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_157(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RAB_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RAB_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RAB_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RAB_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RAB_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RAB_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_161(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_E_RABUsageReport_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABUsageReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABUsageReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_E_RABUsageReport_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_E_RABUsageReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_E_RABUsageReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_165(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SecondaryRATUsageReport_ItemIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SecondaryRATUsageReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SecondaryRATUsageReport_ItemIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SecondaryRATUsageReport_ItemIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_169(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_173(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverRequestAcknowledge_IEs, id));
+	const int indexToPresence[12] = {
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_NOTHING,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_List,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_E_RAB_List,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_TargeteNBtoSource_eNBTransparentContainer,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_177(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverPreparationFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverPreparationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverPreparationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverPreparationFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverPreparationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverPreparationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_181(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverReport_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverReport_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverReport_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverReport_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverReport_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverReport_IEs, id));
+	const int indexToPresence[11] = {
+		X2N_HandoverReport_IEs__value_PR_NOTHING,
+		X2N_HandoverReport_IEs__value_PR_HandoverReportType,
+		X2N_HandoverReport_IEs__value_PR_Cause,
+		X2N_HandoverReport_IEs__value_PR_ECGI,
+		X2N_HandoverReport_IEs__value_PR_ECGI,
+		X2N_HandoverReport_IEs__value_PR_ECGI,
+		X2N_HandoverReport_IEs__value_PR_TargetCellInUTRAN,
+		X2N_HandoverReport_IEs__value_PR_CRNTI,
+		X2N_HandoverReport_IEs__value_PR_MobilityInformation,
+		X2N_HandoverReport_IEs__value_PR_UE_RLF_Report_Container,
+		X2N_HandoverReport_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_185(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SNStatusTransfer_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SNStatusTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SNStatusTransfer_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SNStatusTransfer_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SNStatusTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SNStatusTransfer_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_SNStatusTransfer_IEs__value_PR_NOTHING,
+		X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID,
+		X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID,
+		X2N_SNStatusTransfer_IEs__value_PR_E_RABs_SubjectToStatusTransfer_List,
+		X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SNStatusTransfer_IEs__value_PR_SgNB_UE_X2AP_ID
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_189(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UEContextRelease_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEContextRelease_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEContextRelease_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UEContextRelease_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_UEContextRelease_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UEContextRelease_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_UEContextRelease_IEs__value_PR_NOTHING,
+		X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID,
+		X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID,
+		X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_UEContextRelease_IEs__value_PR_SIPTOBearerDeactivationIndication,
+		X2N_UEContextRelease_IEs__value_PR_SgNB_UE_X2AP_ID
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_193(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_HandoverCancel_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverCancel_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverCancel_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_HandoverCancel_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_HandoverCancel_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_HandoverCancel_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_HandoverCancel_IEs__value_PR_NOTHING,
+		X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID,
+		X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID,
+		X2N_HandoverCancel_IEs__value_PR_Cause,
+		X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_197(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ErrorIndication_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ErrorIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ErrorIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ErrorIndication_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ErrorIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ErrorIndication_IEs, id));
+	const int indexToPresence[8] = {
+		X2N_ErrorIndication_IEs__value_PR_NOTHING,
+		X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID,
+		X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID,
+		X2N_ErrorIndication_IEs__value_PR_Cause,
+		X2N_ErrorIndication_IEs__value_PR_CriticalityDiagnostics,
+		X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_ErrorIndication_IEs__value_PR_SgNB_UE_X2AP_ID
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_201(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResetRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResetRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResetRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResetRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResetRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResetRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_205(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResetResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResetResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResetResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResetResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResetResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResetResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_209(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2SetupRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2SetupRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_213(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2SetupResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2SetupResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_217(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2SetupFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2SetupFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2SetupFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2SetupFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_221(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_LoadInformation_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_LoadInformation_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_LoadInformation_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_LoadInformation_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_LoadInformation_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_LoadInformation_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_225(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdate_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdate_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdate_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_ENBConfigurationUpdate_IEs__value_PR_NOTHING,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_ServedCells,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_ServedCellsToModify,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_Old_ECGIs,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList,
+		X2N_ENBConfigurationUpdate_IEs__value_PR_CoverageModificationList
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_229(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdateAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdateAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_233(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdateFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENBConfigurationUpdateFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENBConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_237(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusRequest_IEs, id));
+	const int indexToPresence[10] = {
+		X2N_ResourceStatusRequest_IEs__value_PR_NOTHING,
+		X2N_ResourceStatusRequest_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusRequest_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusRequest_IEs__value_PR_Registration_Request,
+		X2N_ResourceStatusRequest_IEs__value_PR_ReportCharacteristics,
+		X2N_ResourceStatusRequest_IEs__value_PR_CellToReport_List,
+		X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicity,
+		X2N_ResourceStatusRequest_IEs__value_PR_PartialSuccessIndicator,
+		X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityRSRPMR,
+		X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityCSIR
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_241(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusResponse_IEs, id));
+	const int indexToPresence[5] = {
+		X2N_ResourceStatusResponse_IEs__value_PR_NOTHING,
+		X2N_ResourceStatusResponse_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusResponse_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusResponse_IEs__value_PR_CriticalityDiagnostics,
+		X2N_ResourceStatusResponse_IEs__value_PR_MeasurementInitiationResult_List
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_245(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusFailure_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_ResourceStatusFailure_IEs__value_PR_NOTHING,
+		X2N_ResourceStatusFailure_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusFailure_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusFailure_IEs__value_PR_Cause,
+		X2N_ResourceStatusFailure_IEs__value_PR_CriticalityDiagnostics,
+		X2N_ResourceStatusFailure_IEs__value_PR_CompleteFailureCauseInformation_List
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_249(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusUpdate_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ResourceStatusUpdate_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ResourceStatusUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ResourceStatusUpdate_IEs, id));
+	const int indexToPresence[4] = {
+		X2N_ResourceStatusUpdate_IEs__value_PR_NOTHING,
+		X2N_ResourceStatusUpdate_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusUpdate_IEs__value_PR_Measurement_ID,
+		X2N_ResourceStatusUpdate_IEs__value_PR_CellMeasurementResult_List
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_253(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeRequest_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_MobilityChangeRequest_IEs__value_PR_NOTHING,
+		X2N_MobilityChangeRequest_IEs__value_PR_ECGI,
+		X2N_MobilityChangeRequest_IEs__value_PR_ECGI,
+		X2N_MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation,
+		X2N_MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation,
+		X2N_MobilityChangeRequest_IEs__value_PR_Cause
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_257(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeAcknowledge_IEs, id));
+	const int indexToPresence[4] = {
+		X2N_MobilityChangeAcknowledge_IEs__value_PR_NOTHING,
+		X2N_MobilityChangeAcknowledge_IEs__value_PR_ECGI,
+		X2N_MobilityChangeAcknowledge_IEs__value_PR_ECGI,
+		X2N_MobilityChangeAcknowledge_IEs__value_PR_CriticalityDiagnostics
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_261(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_MobilityChangeFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_MobilityChangeFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_MobilityChangeFailure_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_MobilityChangeFailure_IEs__value_PR_NOTHING,
+		X2N_MobilityChangeFailure_IEs__value_PR_ECGI,
+		X2N_MobilityChangeFailure_IEs__value_PR_ECGI,
+		X2N_MobilityChangeFailure_IEs__value_PR_Cause,
+		X2N_MobilityChangeFailure_IEs__value_PR_MobilityParametersModificationRange,
+		X2N_MobilityChangeFailure_IEs__value_PR_CriticalityDiagnostics
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_265(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RLFIndication_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RLFIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RLFIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RLFIndication_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RLFIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RLFIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_269(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellActivationRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellActivationRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_273(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellActivationResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellActivationResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_277(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_CellActivationFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_CellActivationFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_CellActivationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_CellActivationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_281(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2Release_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2Release_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2Release_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2Release_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2Release_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2Release_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_285(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2APMessageTransfer_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2APMessageTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2APMessageTransfer_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2APMessageTransfer_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2APMessageTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2APMessageTransfer_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_289(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequest_IEs, id));
+	const int indexToPresence[13] = {
+		X2N_SeNBAdditionRequest_IEs__value_PR_NOTHING,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UESecurityCapabilities,
+		X2N_SeNBAdditionRequest_IEs__value_PR_SeNBSecurityKey,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate,
+		X2N_SeNBAdditionRequest_IEs__value_PR_PLMN_Identity,
+		X2N_SeNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_List,
+		X2N_SeNBAdditionRequest_IEs__value_PR_MeNBtoSeNBContainer,
+		X2N_SeNBAdditionRequest_IEs__value_PR_CSGMembershipStatus,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour,
+		X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_293(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, id));
+	const int indexToPresence[12] = {
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_List,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_TunnelInformation
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_297(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequestReject_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBAdditionRequestReject_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBAdditionRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBAdditionRequestReject_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_NOTHING,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_Cause,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_301(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBReconfigurationComplete_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReconfigurationComplete_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReconfigurationComplete_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBReconfigurationComplete_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReconfigurationComplete_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReconfigurationComplete_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_NOTHING,
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_ResponseInformationSeNBReconfComp,
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_305(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequest_IEs, id));
+	const int indexToPresence[11] = {
+		X2N_SeNBModificationRequest_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequest_IEs__value_PR_Cause,
+		X2N_SeNBModificationRequest_IEs__value_PR_SCGChangeIndication,
+		X2N_SeNBModificationRequest_IEs__value_PR_PLMN_Identity,
+		X2N_SeNBModificationRequest_IEs__value_PR_UE_ContextInformationSeNBModReq,
+		X2N_SeNBModificationRequest_IEs__value_PR_MeNBtoSeNBContainer,
+		X2N_SeNBModificationRequest_IEs__value_PR_CSGMembershipStatus,
+		X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_309(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, id));
+	const int indexToPresence[11] = {
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckList,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckList,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_ModAckList,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_313(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequestReject_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequestReject_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequestReject_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_SeNBModificationRequestReject_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_Cause,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_317(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRequired_IEs, id));
+	const int indexToPresence[9] = {
+		X2N_SeNBModificationRequired_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRequired_IEs__value_PR_Cause,
+		X2N_SeNBModificationRequired_IEs__value_PR_SCGChangeIndication,
+		X2N_SeNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_ModReqd,
+		X2N_SeNBModificationRequired_IEs__value_PR_SeNBtoMeNBContainer,
+		X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_321(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationConfirm_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_SeNBModificationConfirm_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationConfirm_IEs__value_PR_MeNBtoSeNBContainer,
+		X2N_SeNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_325(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRefuse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRefuse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBModificationRefuse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBModificationRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBModificationRefuse_IEs, id));
+	const int indexToPresence[8] = {
+		X2N_SeNBModificationRefuse_IEs__value_PR_NOTHING,
+		X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBModificationRefuse_IEs__value_PR_Cause,
+		X2N_SeNBModificationRefuse_IEs__value_PR_MeNBtoSeNBContainer,
+		X2N_SeNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_329(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseRequest_IEs, id));
+	const int indexToPresence[9] = {
+		X2N_SeNBReleaseRequest_IEs__value_PR_NOTHING,
+		X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseRequest_IEs__value_PR_Cause,
+		X2N_SeNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_List_RelReq,
+		X2N_SeNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator,
+		X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBReleaseRequest_IEs__value_PR_MakeBeforeBreakIndicator
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_333(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseRequired_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_SeNBReleaseRequired_IEs__value_PR_NOTHING,
+		X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseRequired_IEs__value_PR_Cause,
+		X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_337(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBReleaseConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBReleaseConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBReleaseConfirm_IEs, id));
+	const int indexToPresence[7] = {
+		X2N_SeNBReleaseConfirm_IEs__value_PR_NOTHING,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_List_RelConf,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_341(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SeNBCounterCheckRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBCounterCheckRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBCounterCheckRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SeNBCounterCheckRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SeNBCounterCheckRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SeNBCounterCheckRequest_IEs, id));
+	const int indexToPresence[6] = {
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_NOTHING,
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToCounterCheck_List,
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_345(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2RemovalRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2RemovalRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_349(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2RemovalResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2RemovalResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_353(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_X2RemovalFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_X2RemovalFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2RemovalFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_X2RemovalFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_357(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_361(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextResponse_IEs, id));
+	const int indexToPresence[16] = {
+		X2N_RetrieveUEContextResponse_IEs__value_PR_NOTHING,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_GUMMEI,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_UE_ContextInformationRetrieve,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_TraceActivation,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_SRVCCOperationPossible,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_Masked_IMEISV,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_ExpectedUEBehaviour,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_ProSeAuthorized,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_CriticalityDiagnostics,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_V2XServicesAuthorized,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_AerialUEsubscriptionInformation,
+		X2N_RetrieveUEContextResponse_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_365(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RetrieveUEContextFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RetrieveUEContextFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RetrieveUEContextFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_369(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_373(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_377(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequestReject_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBAdditionRequestReject_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBAdditionRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBAdditionRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_381(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReconfigurationComplete_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReconfigurationComplete_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReconfigurationComplete_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReconfigurationComplete_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReconfigurationComplete_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReconfigurationComplete_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_385(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequest_IEs, id));
+	const int indexToPresence[13] = {
+		X2N_SgNBModificationRequest_IEs__value_PR_NOTHING,
+		X2N_SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID,
+		X2N_SgNBModificationRequest_IEs__value_PR_SgNB_UE_X2AP_ID,
+		X2N_SgNBModificationRequest_IEs__value_PR_Cause,
+		X2N_SgNBModificationRequest_IEs__value_PR_PLMN_Identity,
+		X2N_SgNBModificationRequest_IEs__value_PR_HandoverRestrictionList,
+		X2N_SgNBModificationRequest_IEs__value_PR_SCGConfigurationQuery,
+		X2N_SgNBModificationRequest_IEs__value_PR_UE_ContextInformation_SgNBModReq,
+		X2N_SgNBModificationRequest_IEs__value_PR_MeNBtoSgNBContainer,
+		X2N_SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SgNBModificationRequest_IEs__value_PR_MeNBResourceCoordinationInformation,
+		X2N_SgNBModificationRequest_IEs__value_PR_SplitSRBs,
+		X2N_SgNBModificationRequest_IEs__value_PR_SplitSRBs
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_389(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, id));
+	const int indexToPresence[14] = {
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_NOTHING,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAckList,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAckList,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBModAckList,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs,
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_RRC_Config_Ind
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_393(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequestReject_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequestReject_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_397(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_401(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_405(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRefuse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRefuse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBModificationRefuse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBModificationRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBModificationRefuse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_409(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_413(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequestAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequestAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequestAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_417(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequestReject_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequestReject_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequestReject_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequestReject_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_421(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_425(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBReleaseConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBReleaseConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBReleaseConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_429(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBCounterCheckRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBCounterCheckRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBCounterCheckRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBCounterCheckRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBCounterCheckRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBCounterCheckRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_433(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_437(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_441(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_RRCTransfer_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RRCTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RRCTransfer_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RRCTransfer_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_RRCTransfer_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_RRCTransfer_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_445(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeRefuse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeRefuse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBChangeRefuse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBChangeRefuse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBChangeRefuse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_449(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_453(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2SetupReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2SetupReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2SetupReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2SetupReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_457(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2SetupReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2SetupReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2SetupReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2SetupReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_461(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_465(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2SetupReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2SetupReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2SetupReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2SetupReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_469(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2SetupReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2SetupReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2SetupReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2SetupReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_473(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2SetupFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2SetupFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2SetupFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_477(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdate_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdate_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdate_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdate_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_481(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCConfigUpdateIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCConfigUpdateIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCConfigUpdateIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCConfigUpdateIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_485(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCConfigUpdateIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCConfigUpdateIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCConfigUpdateIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCConfigUpdateIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_489(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdateAcknowledge_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdateAcknowledge_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdateAcknowledge_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_493(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_criticality_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_value_constraint_497(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCConfigUpdateAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCConfigUpdateAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCConfigUpdateAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCConfigUpdateAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_501(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdateFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCConfigurationUpdateFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCConfigurationUpdateFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_505(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_509(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_513(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCCellActivationFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCCellActivationFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCCellActivationFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_517(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SecondaryRATDataUsageReport_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SecondaryRATDataUsageReport_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SecondaryRATDataUsageReport_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SecondaryRATDataUsageReport_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_521(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SgNBActivityNotification_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBActivityNotification_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBActivityNotification_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SgNBActivityNotification_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_SgNBActivityNotification_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SgNBActivityNotification_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_525(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCPartialResetRequired_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCPartialResetRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCPartialResetRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCPartialResetRequired_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCPartialResetRequired_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCPartialResetRequired_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_529(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCPartialResetConfirm_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCPartialResetConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCPartialResetConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCPartialResetConfirm_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCPartialResetConfirm_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCPartialResetConfirm_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_533(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_EUTRANRCellResourceCoordinationRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_EUTRANRCellResourceCoordinationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_EUTRANRCellResourceCoordinationRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_EUTRANRCellResourceCoordinationRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_537(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_541(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_545(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_EUTRANRCellResourceCoordinationResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_EUTRANRCellResourceCoordinationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_EUTRANRCellResourceCoordinationResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_EUTRANRCellResourceCoordinationResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_549(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_553(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_557(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalRequest_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalRequest_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalRequest_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalRequest_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_561(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2RemovalReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2RemovalReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2RemovalReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2RemovalReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_565(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2RemovalReqIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2RemovalReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2RemovalReqIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2RemovalReqIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_569(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalResponse_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalResponse_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalResponse_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalResponse_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_573(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2RemovalReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2RemovalReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENB_ENDCX2RemovalReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENB_ENDCX2RemovalReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_577(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2RemovalReqAckIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2RemovalReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_En_gNB_ENDCX2RemovalReqAckIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_En_gNB_ENDCX2RemovalReqAckIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_581(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalFailure_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ENDCX2RemovalFailure_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_ENDCX2RemovalFailure_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_ENDCX2RemovalFailure_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_585(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_DataForwardingAddressIndication_IEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_DataForwardingAddressIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_DataForwardingAddressIndication_IEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_DataForwardingAddressIndication_IEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_DataForwardingAddressIndication_IEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_DataForwardingAddressIndication_IEs, id));
+	const int indexToPresence[5] = {
+		X2N_DataForwardingAddressIndication_IEs__value_PR_NOTHING,
+		X2N_DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID,
+		X2N_DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+		X2N_DataForwardingAddressIndication_IEs__value_PR_E_RABs_DataForwardingAddress_List
+	};
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = indexToPresence[presence_index];
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_589(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_X2N_id_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_GNBStatusIndicationIEs_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_GNBStatusIndicationIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 1; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_GNBStatusIndicationIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_GNBStatusIndicationIEs_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_GNBStatusIndicationIEs_1;
+	size_t constraining_column = 0; /* &id */
+	size_t for_column = 2; /* &Value */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_GNBStatusIndicationIEs, id));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_593(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_8 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_11 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_12 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_14 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_15 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_16 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_18 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_19 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_20 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_22 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_23 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_24 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_26 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_27 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_28 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_30 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_31 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_32 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_34 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_35 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_36 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_38 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_39 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_40 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_42 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_43 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_44 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_46 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_47 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_48 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_50 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_51 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_52 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_54 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_55 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_56 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_58 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_59 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_60 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_62 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_63 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_64 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_66 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_67 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_68 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_70 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_71 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_72 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_74 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_75 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_76 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_78 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_79 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_80 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_82 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_83 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_84 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_86 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_87 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_88 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_90 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_91 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_92 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_94 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_95 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_96 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_98 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_99 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_100 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_102 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_103 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_104 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_106 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_107 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_108 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_110 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_111 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_112 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_114 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_115 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_116 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_118 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_119 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_120 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_122 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_123 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_124 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_126 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_127 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_128 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_130 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_131 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_132 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_134 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_135 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_136 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_138 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_139 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_140 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_142 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_143 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_144 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_146 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_147 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_148 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_150 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_151 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_152 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_154 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_155 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_156 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_158 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_159 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_160 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_162 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_163 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_164 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_166 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_167 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_168 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_170 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_171 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_172 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_174 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_175 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_176 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_178 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_179 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_180 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_182 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_183 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_184 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_186 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_187 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_188 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_190 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_191 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_192 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_194 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_195 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_196 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_198 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_199 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_200 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_202 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_203 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_204 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_206 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_207 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_208 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_210 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_211 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_212 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_214 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_215 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_216 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_218 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_219 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_220 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_222 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_223 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_224 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_226 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_227 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_228 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_230 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_231 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_232 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_234 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_235 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_236 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_238 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_239 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_240 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_242 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_243 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_244 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_246 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_247 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_248 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_250 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_251 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_252 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_254 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_255 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_256 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_258 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_259 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_260 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_262 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_263 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_264 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_266 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_267 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_268 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_270 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_271 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_272 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_274 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_275 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_276 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_278 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_279 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_280 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_282 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_283 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_284 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_286 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_287 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_288 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_290 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_291 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_292 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_294 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_295 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_296 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_298 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_299 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_300 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_302 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_303 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_304 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_306 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_307 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_308 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_310 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_311 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_312 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_314 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_315 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_316 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_318 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_319 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_320 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_322 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_323 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_324 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_326 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_327 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_328 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_330 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_331 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_332 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_334 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_335 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_336 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_338 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_339 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_340 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_342 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_343 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_344 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_346 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_347 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_348 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_350 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_351 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_352 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_354 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_355 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_356 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_358 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_359 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_360 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_362 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_363 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_364 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_366 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_367 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_368 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_370 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_371 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_372 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_374 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_375 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_376 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_378 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_379 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_380 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_382 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_383 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_384 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_386 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_387 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_388 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_390 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_391 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_392 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_394 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_395 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_396 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_398 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_399 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_400 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_402 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_403 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_404 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_406 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_407 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_408 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_410 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_411 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_412 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_414 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_415 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_416 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_418 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_419 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_420 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_422 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_423 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_424 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_426 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_427 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_428 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_430 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_431 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_432 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_434 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_435 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_436 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_438 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_439 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_440 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_442 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_443 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_444 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_446 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_447 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_448 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_450 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_451 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_452 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_454 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_455 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_456 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_458 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_459 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_460 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_462 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_463 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_464 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_466 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_467 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_468 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_470 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_471 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_472 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_474 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_475 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_476 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_478 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_479 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_480 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_482 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_483 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_484 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_486 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_487 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_488 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_490 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_491 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_492 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_494 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_495 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_496 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_498 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_499 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_500 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_502 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_503 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_504 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_506 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_507 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_508 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_510 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_511 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_512 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_514 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_515 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_516 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_518 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_519 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_520 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_522 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_523 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_524 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_526 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_527 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_528 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_530 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_531 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_532 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_534 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_535 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_536 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_538 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_539 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_540 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_542 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_543 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_544 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_546 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_547 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_548 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_550 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_551 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_552 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_554 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_555 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_556 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_558 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_559 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_560 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_562 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_563 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_564 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_566 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_567 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_568 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_570 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_571 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_572 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_574 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_575 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_576 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_578 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_579 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_580 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_582 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_583 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_584 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_586 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_587 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_588 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_590 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_591 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_592 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_id_constr_594 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_595 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_596 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs__value, choice.E_RABs_ToBeSetup_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeSetup_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeSetup-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeSetup-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_4 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeSetup_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_4,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_4,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ItemIEs_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_2,  memb_X2N_id_constraint_1 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeSetup_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_4,
+		select_E_RABs_ToBeSetup_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_4,  memb_X2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetup_ItemIEs_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ItemIEs_specs_1 = {
+	sizeof(struct X2N_E_RABs_ToBeSetup_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeSetup_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetup_ItemIEs_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs = {
+	"E-RABs-ToBeSetup-ItemIEs",
+	"E-RABs-ToBeSetup-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_ItemIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_8[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ItemIEs__value, choice.E_RABs_Admitted_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_8[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_8 = {
+	sizeof(struct X2N_E_RABs_Admitted_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_8,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_8 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_8,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_8	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ItemIEs_5[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_6,  memb_X2N_id_constraint_5 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_7,  memb_X2N_criticality_constraint_5 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_8,
+		select_E_RABs_Admitted_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_8,  memb_X2N_value_constraint_5 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ItemIEs_tag2el_5[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ItemIEs_specs_5 = {
+	sizeof(struct X2N_E_RABs_Admitted_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ItemIEs_tag2el_5,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ItemIEs = {
+	"E-RABs-Admitted-ItemIEs",
+	"E-RABs-Admitted-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ItemIEs_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ItemIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ItemIEs_specs_5	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_12[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value, choice.E_RABs_SubjectToStatusTransfer_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToStatusTransfer-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_12[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToStatusTransfer-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_12 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_12,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_12 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_12,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_12	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_9[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_10,  memb_X2N_id_constraint_9 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_SubjectToStatusTransfer_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_11,  memb_X2N_criticality_constraint_9 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_12,
+		select_E_RABs_SubjectToStatusTransfer_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_12,  memb_X2N_value_constraint_9 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_9 = {
+	sizeof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs),
+	offsetof(struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tag2el_9,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs = {
+	"E-RABs-SubjectToStatusTransfer-ItemIEs",
+	"E-RABs-SubjectToStatusTransfer-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_9	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_16[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_ItemIEs__value, choice.CellInformation_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellInformation_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellInformation-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_16[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellInformation-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_16 = {
+	sizeof(struct X2N_CellInformation_ItemIEs__value),
+	offsetof(struct X2N_CellInformation_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_CellInformation_ItemIEs__value, present),
+	sizeof(((struct X2N_CellInformation_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_16,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_16 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_16,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_16	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellInformation_ItemIEs_13[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_14,  memb_X2N_id_constraint_13 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellInformation_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_15,  memb_X2N_criticality_constraint_13 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellInformation_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_16,
+		select_CellInformation_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_16,  memb_X2N_value_constraint_13 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellInformation_ItemIEs_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellInformation_ItemIEs_tag2el_13[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellInformation_ItemIEs_specs_13 = {
+	sizeof(struct X2N_CellInformation_ItemIEs),
+	offsetof(struct X2N_CellInformation_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_CellInformation_ItemIEs_tag2el_13,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_ItemIEs = {
+	"CellInformation-ItemIEs",
+	"CellInformation-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellInformation_ItemIEs_tags_13,
+	sizeof(asn_DEF_X2N_CellInformation_ItemIEs_tags_13)
+		/sizeof(asn_DEF_X2N_CellInformation_ItemIEs_tags_13[0]), /* 1 */
+	asn_DEF_X2N_CellInformation_ItemIEs_tags_13,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellInformation_ItemIEs_tags_13)
+		/sizeof(asn_DEF_X2N_CellInformation_ItemIEs_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellInformation_ItemIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellInformation_ItemIEs_specs_13	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_20[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_ItemIEs__value, choice.CellToReport_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellToReport_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellToReport-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_20[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellToReport-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_20 = {
+	sizeof(struct X2N_CellToReport_ItemIEs__value),
+	offsetof(struct X2N_CellToReport_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_CellToReport_ItemIEs__value, present),
+	sizeof(((struct X2N_CellToReport_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_20,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_20 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_20,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_20	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellToReport_ItemIEs_17[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_18,  memb_X2N_id_constraint_17 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellToReport_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_19,  memb_X2N_criticality_constraint_17 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellToReport_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_20,
+		select_CellToReport_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_20,  memb_X2N_value_constraint_17 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellToReport_ItemIEs_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellToReport_ItemIEs_tag2el_17[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellToReport_ItemIEs_specs_17 = {
+	sizeof(struct X2N_CellToReport_ItemIEs),
+	offsetof(struct X2N_CellToReport_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_CellToReport_ItemIEs_tag2el_17,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_ItemIEs = {
+	"CellToReport-ItemIEs",
+	"CellToReport-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellToReport_ItemIEs_tags_17,
+	sizeof(asn_DEF_X2N_CellToReport_ItemIEs_tags_17)
+		/sizeof(asn_DEF_X2N_CellToReport_ItemIEs_tags_17[0]), /* 1 */
+	asn_DEF_X2N_CellToReport_ItemIEs_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellToReport_ItemIEs_tags_17)
+		/sizeof(asn_DEF_X2N_CellToReport_ItemIEs_tags_17[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellToReport_ItemIEs_17,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellToReport_ItemIEs_specs_17	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_24[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_ItemIEs__value, choice.MeasurementInitiationResult_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeasurementInitiationResult_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeasurementInitiationResult-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_24[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* MeasurementInitiationResult-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_24 = {
+	sizeof(struct X2N_MeasurementInitiationResult_ItemIEs__value),
+	offsetof(struct X2N_MeasurementInitiationResult_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_MeasurementInitiationResult_ItemIEs__value, present),
+	sizeof(((struct X2N_MeasurementInitiationResult_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_24,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_24 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_24,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_24	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_ItemIEs_21[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_22,  memb_X2N_id_constraint_21 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MeasurementInitiationResult_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_23,  memb_X2N_criticality_constraint_21 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_24,
+		select_MeasurementInitiationResult_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_24,  memb_X2N_value_constraint_21 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementInitiationResult_ItemIEs_tag2el_21[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementInitiationResult_ItemIEs_specs_21 = {
+	sizeof(struct X2N_MeasurementInitiationResult_ItemIEs),
+	offsetof(struct X2N_MeasurementInitiationResult_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_MeasurementInitiationResult_ItemIEs_tag2el_21,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_ItemIEs = {
+	"MeasurementInitiationResult-ItemIEs",
+	"MeasurementInitiationResult-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21,
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21[0]), /* 1 */
+	asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21)
+		/sizeof(asn_DEF_X2N_MeasurementInitiationResult_ItemIEs_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementInitiationResult_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementInitiationResult_ItemIEs_specs_21	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_28[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_ItemIEs__value, choice.MeasurementFailureCause_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeasurementFailureCause_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeasurementFailureCause-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_28[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* MeasurementFailureCause-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_28 = {
+	sizeof(struct X2N_MeasurementFailureCause_ItemIEs__value),
+	offsetof(struct X2N_MeasurementFailureCause_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_MeasurementFailureCause_ItemIEs__value, present),
+	sizeof(((struct X2N_MeasurementFailureCause_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_28,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_28 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_28,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_28	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_ItemIEs_25[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_26,  memb_X2N_id_constraint_25 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MeasurementFailureCause_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_27,  memb_X2N_criticality_constraint_25 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MeasurementFailureCause_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_28,
+		select_MeasurementFailureCause_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_28,  memb_X2N_value_constraint_25 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MeasurementFailureCause_ItemIEs_tag2el_25[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementFailureCause_ItemIEs_specs_25 = {
+	sizeof(struct X2N_MeasurementFailureCause_ItemIEs),
+	offsetof(struct X2N_MeasurementFailureCause_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_MeasurementFailureCause_ItemIEs_tag2el_25,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_ItemIEs = {
+	"MeasurementFailureCause-ItemIEs",
+	"MeasurementFailureCause-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25,
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25[0]), /* 1 */
+	asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25,	/* Same as above */
+	sizeof(asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25)
+		/sizeof(asn_DEF_X2N_MeasurementFailureCause_ItemIEs_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementFailureCause_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementFailureCause_ItemIEs_specs_25	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_32[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs__value, choice.CompleteFailureCauseInformation_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompleteFailureCauseInformation_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CompleteFailureCauseInformation-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_32[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CompleteFailureCauseInformation-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_32 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_ItemIEs__value),
+	offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs__value, present),
+	sizeof(((struct X2N_CompleteFailureCauseInformation_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_32,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_32 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_32,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_32	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_ItemIEs_29[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_30,  memb_X2N_id_constraint_29 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CompleteFailureCauseInformation_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_31,  memb_X2N_criticality_constraint_29 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_32,
+		select_CompleteFailureCauseInformation_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_32,  memb_X2N_value_constraint_29 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CompleteFailureCauseInformation_ItemIEs_tag2el_29[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_ItemIEs_specs_29 = {
+	sizeof(struct X2N_CompleteFailureCauseInformation_ItemIEs),
+	offsetof(struct X2N_CompleteFailureCauseInformation_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_CompleteFailureCauseInformation_ItemIEs_tag2el_29,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs = {
+	"CompleteFailureCauseInformation-ItemIEs",
+	"CompleteFailureCauseInformation-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29,
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29[0]), /* 1 */
+	asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29,	/* Same as above */
+	sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29)
+		/sizeof(asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompleteFailureCauseInformation_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompleteFailureCauseInformation_ItemIEs_specs_29	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_36[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_ItemIEs__value, choice.CellMeasurementResult_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellMeasurementResult_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellMeasurementResult-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_36[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellMeasurementResult-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_36 = {
+	sizeof(struct X2N_CellMeasurementResult_ItemIEs__value),
+	offsetof(struct X2N_CellMeasurementResult_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_CellMeasurementResult_ItemIEs__value, present),
+	sizeof(((struct X2N_CellMeasurementResult_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_36,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_36 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_36,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_36	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_ItemIEs_33[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_34,  memb_X2N_id_constraint_33 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellMeasurementResult_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_35,  memb_X2N_criticality_constraint_33 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellMeasurementResult_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_36,
+		select_CellMeasurementResult_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_36,  memb_X2N_value_constraint_33 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellMeasurementResult_ItemIEs_tag2el_33[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellMeasurementResult_ItemIEs_specs_33 = {
+	sizeof(struct X2N_CellMeasurementResult_ItemIEs),
+	offsetof(struct X2N_CellMeasurementResult_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_CellMeasurementResult_ItemIEs_tag2el_33,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_ItemIEs = {
+	"CellMeasurementResult-ItemIEs",
+	"CellMeasurementResult-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33,
+	sizeof(asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33[0]), /* 1 */
+	asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33)
+		/sizeof(asn_DEF_X2N_CellMeasurementResult_ItemIEs_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellMeasurementResult_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellMeasurementResult_ItemIEs_specs_33	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_40[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs__value, choice.E_RABs_ToBeAdded_Item),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_40[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_40 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_40,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_40 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_40,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_40	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ItemIEs_37[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_38,  memb_X2N_id_constraint_37 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_39,  memb_X2N_criticality_constraint_37 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_40,
+		select_E_RABs_ToBeAdded_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_40,  memb_X2N_value_constraint_37 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ItemIEs_tag2el_37[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ItemIEs_specs_37 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ItemIEs_tag2el_37,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs = {
+	"E-RABs-ToBeAdded-ItemIEs",
+	"E-RABs-ToBeAdded-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ItemIEs_specs_37	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_44[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_Item),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_44[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_44 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_44,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_44 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_44,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_44	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_41[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_42,  memb_X2N_id_constraint_41 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_43,  memb_X2N_criticality_constraint_41 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_44,
+		select_E_RABs_Admitted_ToBeAdded_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_44,  memb_X2N_value_constraint_41 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tag2el_41[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_41 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tag2el_41,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs = {
+	"E-RABs-Admitted-ToBeAdded-ItemIEs",
+	"E-RABs-Admitted-ToBeAdded-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_tags_41[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_41	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_48[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value, choice.E_RABs_ToBeAdded_ModReqItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-ModReqItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_48[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_48 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_48,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_48 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_48,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_48	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItemIEs_45[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_46,  memb_X2N_id_constraint_45 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_ModReqItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_47,  memb_X2N_criticality_constraint_45 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_48,
+		select_E_RABs_ToBeAdded_ModReqItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_48,  memb_X2N_value_constraint_45 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tag2el_45[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItemIEs_specs_45 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_ModReqItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tag2el_45,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs = {
+	"E-RABs-ToBeAdded-ModReqItemIEs",
+	"E-RABs-ToBeAdded-ModReqItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs_tags_45[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItemIEs_45,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItemIEs_specs_45	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_52[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value, choice.E_RABs_ToBeModified_ModReqItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_ModReqItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeModified-ModReqItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_52[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_52 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_52,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_52 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_52,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_52	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItemIEs_49[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_50,  memb_X2N_id_constraint_49 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_ModReqItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_51,  memb_X2N_criticality_constraint_49 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_52,
+		select_E_RABs_ToBeModified_ModReqItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_52,  memb_X2N_value_constraint_49 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_ModReqItemIEs_tag2el_49[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItemIEs_specs_49 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_ModReqItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_ModReqItemIEs_tag2el_49,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs = {
+	"E-RABs-ToBeModified-ModReqItemIEs",
+	"E-RABs-ToBeModified-ModReqItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs_tags_49[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItemIEs_49,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItemIEs_specs_49	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_56[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value, choice.E_RABs_ToBeReleased_ModReqItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-ModReqItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_56[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_56 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_56,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_56 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_56,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_56	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItemIEs_53[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_54,  memb_X2N_id_constraint_53 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_ModReqItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_55,  memb_X2N_criticality_constraint_53 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_56,
+		select_E_RABs_ToBeReleased_ModReqItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_56,  memb_X2N_value_constraint_53 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tag2el_53[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItemIEs_specs_53 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tag2el_53,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs = {
+	"E-RABs-ToBeReleased-ModReqItemIEs",
+	"E-RABs-ToBeReleased-ModReqItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs_tags_53[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItemIEs_53,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItemIEs_specs_53	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_60[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_ModAckItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-ModAckItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_60[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_60 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_60,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_60 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_60,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_60	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_57[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_58,  memb_X2N_id_constraint_57 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_59,  memb_X2N_criticality_constraint_57 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_60,
+		select_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_60,  memb_X2N_value_constraint_57 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tag2el_57[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_57 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tag2el_57,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs = {
+	"E-RABs-Admitted-ToBeAdded-ModAckItemIEs",
+	"E-RABs-Admitted-ToBeAdded-ModAckItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_tags_57[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_57,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_57	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_64[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, choice.E_RABs_Admitted_ToBeModified_ModAckItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeModified-ModAckItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_64[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_64 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_64,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_64 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_64,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_64	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_61[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_62,  memb_X2N_id_constraint_61 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_63,  memb_X2N_criticality_constraint_61 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_64,
+		select_E_RABs_Admitted_ToBeModified_ModAckItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_64,  memb_X2N_value_constraint_61 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tag2el_61[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_61 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tag2el_61,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs = {
+	"E-RABs-Admitted-ToBeModified-ModAckItemIEs",
+	"E-RABs-Admitted-ToBeModified-ModAckItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_tags_61[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_61,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_61	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_68[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, choice.E_RABs_Admitted_ToReleased_ModAckItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToReleased_ModAckItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToReleased-ModAckItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_68[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_68 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_68,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_68 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_68,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_68	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_65[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_66,  memb_X2N_id_constraint_65 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_67,  memb_X2N_criticality_constraint_65 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_68,
+		select_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_68,  memb_X2N_value_constraint_65 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tag2el_65[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_65 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tag2el_65,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs = {
+	"E-RABs-Admitted-ToBeReleased-ModAckItemIEs",
+	"E-RABs-Admitted-ToBeReleased-ModAckItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_tags_65[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_65,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_65	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_72[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value, choice.E_RABs_ToBeReleased_ModReqdItem),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-ModReqdItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_72[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-ModReqdItem */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_72 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_72,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_72 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_72,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_72	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_69[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_70,  memb_X2N_id_constraint_69 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_ModReqdItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_71,  memb_X2N_criticality_constraint_69 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_72,
+		select_E_RABs_ToBeReleased_ModReqdItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_72,  memb_X2N_value_constraint_69 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tag2el_69[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_specs_69 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tag2el_69,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs = {
+	"E-RABs-ToBeReleased-ModReqdItemIEs",
+	"E-RABs-ToBeReleased-ModReqdItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_tags_69[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_69,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_specs_69	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_76[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value, choice.E_RABs_ToBeReleased_RelReqItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-RelReqItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_76[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_76 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_76,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_76 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_76,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_76	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItemIEs_73[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_74,  memb_X2N_id_constraint_73 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_RelReqItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_75,  memb_X2N_criticality_constraint_73 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_76,
+		select_E_RABs_ToBeReleased_RelReqItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_76,  memb_X2N_value_constraint_73 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tag2el_73[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItemIEs_specs_73 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelReqItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tag2el_73,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs = {
+	"E-RABs-ToBeReleased-RelReqItemIEs",
+	"E-RABs-ToBeReleased-RelReqItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs_tags_73[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItemIEs_73,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItemIEs_specs_73	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_80[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value, choice.E_RABs_ToBeReleased_RelConfItem),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-RelConfItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_80[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCG-Bearer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* split-Bearer */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_80 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_80,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_80 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_80,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_80	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItemIEs_77[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_78,  memb_X2N_id_constraint_77 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_RelConfItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_79,  memb_X2N_criticality_constraint_77 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_80,
+		select_E_RABs_ToBeReleased_RelConfItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_80,  memb_X2N_value_constraint_77 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tag2el_77[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItemIEs_specs_77 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_RelConfItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tag2el_77,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs = {
+	"E-RABs-ToBeReleased-RelConfItemIEs",
+	"E-RABs-ToBeReleased-RelConfItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs_tags_77[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItemIEs_77,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItemIEs_specs_77	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_84[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value, choice.E_RABs_SubjectToCounterCheckItem),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToCounterCheckItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToCounterCheckItem"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_84[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToCounterCheckItem */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_84 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_84,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_84 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_84,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_84	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemIEs_81[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_82,  memb_X2N_id_constraint_81 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_SubjectToCounterCheckItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_83,  memb_X2N_criticality_constraint_81 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_84,
+		select_E_RABs_SubjectToCounterCheckItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_84,  memb_X2N_value_constraint_81 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToCounterCheckItemIEs_tag2el_81[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemIEs_specs_81 = {
+	sizeof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs),
+	offsetof(struct X2N_E_RABs_SubjectToCounterCheckItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToCounterCheckItemIEs_tag2el_81,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs = {
+	"E-RABs-SubjectToCounterCheckItemIEs",
+	"E-RABs-SubjectToCounterCheckItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs_tags_81[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemIEs_81,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemIEs_specs_81	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_88[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value, choice.E_RABs_ToBeSetupRetrieve_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeSetupRetrieve-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_88[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeSetupRetrieve-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_88 = {
+	sizeof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_88,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_88 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_88,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_88	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_85[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_86,  memb_X2N_id_constraint_85 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeSetupRetrieve_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_87,  memb_X2N_criticality_constraint_85 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_88,
+		select_E_RABs_ToBeSetupRetrieve_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_88,  memb_X2N_value_constraint_85 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tag2el_85[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_85 = {
+	sizeof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tag2el_85,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs = {
+	"E-RABs-ToBeSetupRetrieve-ItemIEs",
+	"E-RABs-ToBeSetupRetrieve-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_tags_85[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_85,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_85	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_92[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, choice.E_RABs_ToBeAdded_SgNBAddReq_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-SgNBAddReq-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_92[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeAdded-SgNBAddReq-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_92 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_92,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_92 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_92,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_92	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_89[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_90,  memb_X2N_id_constraint_89 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_91,  memb_X2N_criticality_constraint_89 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_92,
+		select_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_92,  memb_X2N_value_constraint_89 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tag2el_89[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_89 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tag2el_89,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs = {
+	"E-RABs-ToBeAdded-SgNBAddReq-ItemIEs",
+	"E-RABs-ToBeAdded-SgNBAddReq-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_tags_89[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_89,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_89	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_96[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_96[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_96 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_96,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_96 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_96,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_96	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_93[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_94,  memb_X2N_id_constraint_93 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_95,  memb_X2N_criticality_constraint_93 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_96,
+		select_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_96,  memb_X2N_value_constraint_93 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tag2el_93[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_93 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tag2el_93,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_tags_93[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_93,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_93	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_100[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeAdded_SgNBModReq_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-SgNBModReq-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_100[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeAdded-SgNBModReq-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_100 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_100,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_100 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_100,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_100	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_97[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_98,  memb_X2N_id_constraint_97 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_99,  memb_X2N_criticality_constraint_97 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_100,
+		select_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_100,  memb_X2N_value_constraint_97 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tag2el_97[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_97 = {
+	sizeof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tag2el_97,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs = {
+	"E-RABs-ToBeAdded-SgNBModReq-ItemIEs",
+	"E-RABs-ToBeAdded-SgNBModReq-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_tags_97[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_97,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_97	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_104[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeModified_SgNBModReq_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeModified-SgNBModReq-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_104[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeModified-SgNBModReq-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_104 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_104,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_104 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_104,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_104	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_101[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_102,  memb_X2N_id_constraint_101 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_103,  memb_X2N_criticality_constraint_101 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_104,
+		select_E_RABs_ToBeModified_SgNBModReq_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_104,  memb_X2N_value_constraint_101 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tag2el_101[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_101 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tag2el_101,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs = {
+	"E-RABs-ToBeModified-SgNBModReq-ItemIEs",
+	"E-RABs-ToBeModified-SgNBModReq-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_tags_101[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_101,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_101	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_108[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBModReq_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBModReq-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_108[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBModReq-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_108 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_108,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_108 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_108,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_108	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_105[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_106,  memb_X2N_id_constraint_105 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_107,  memb_X2N_criticality_constraint_105 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_108,
+		select_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_108,  memb_X2N_value_constraint_105 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tag2el_105[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_105 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tag2el_105,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBModReq-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBModReq-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_tags_105[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_105,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_105	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_112[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBModAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-SgNBModAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_112[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_112 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_112,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_112 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_112,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_112	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_109[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_110,  memb_X2N_id_constraint_109 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_111,  memb_X2N_criticality_constraint_109 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_112,
+		select_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_112,  memb_X2N_value_constraint_109 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tag2el_109[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_109 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tag2el_109,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs = {
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs",
+	"E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_tags_109[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_109,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_109	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_116[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeModified_SgNBModAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeModified-SgNBModAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_116[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_116 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_116,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_116 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_116,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_116	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_113[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_114,  memb_X2N_id_constraint_113 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_115,  memb_X2N_criticality_constraint_113 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_116,
+		select_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_116,  memb_X2N_value_constraint_113 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tag2el_113[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_113 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tag2el_113,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs = {
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs",
+	"E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_tags_113[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_113,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_113	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_120[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, choice.E_RABs_Admitted_ToReleased_SgNBModAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToReleased-SgNBModAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_120[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToReleased-SgNBModAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_120 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_120,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_120 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_120,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_120	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_117[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_118,  memb_X2N_id_constraint_117 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_119,  memb_X2N_criticality_constraint_117 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_120,
+		select_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_120,  memb_X2N_value_constraint_117 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tag2el_117[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_117 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tag2el_117,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs = {
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs",
+	"E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_tags_117[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_117,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_117	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_124[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBModReqd_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBModReqd-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_124[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBModReqd-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_124 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_124,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_124 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_124,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_124	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_121[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_122,  memb_X2N_id_constraint_121 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_123,  memb_X2N_criticality_constraint_121 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_124,
+		select_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_124,  memb_X2N_value_constraint_121 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tag2el_121[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_121 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tag2el_121,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBModReqd-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBModReqd-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_tags_121[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_121,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_121	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_128[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, choice.E_RABs_ToBeModified_SgNBModReqd_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeModified-SgNBModReqd-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_128[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeModified-SgNBModReqd-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_128 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_128,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_128 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_128,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_128	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_125[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_126,  memb_X2N_id_constraint_125 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_127,  memb_X2N_criticality_constraint_125 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_128,
+		select_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_128,  memb_X2N_value_constraint_125 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tag2el_125[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_125 = {
+	sizeof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tag2el_125,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs = {
+	"E-RABs-ToBeModified-SgNBModReqd-ItemIEs",
+	"E-RABs-ToBeModified-SgNBModReqd-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_tags_125[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_125,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_125	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_132[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, choice.E_RABs_AdmittedToBeModified_SgNBModConf_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-AdmittedToBeModified-SgNBModConf-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_132[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-AdmittedToBeModified-SgNBModConf-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_132 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_132,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_132 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_132,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_132	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_129[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_130,  memb_X2N_id_constraint_129 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_131,  memb_X2N_criticality_constraint_129 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_132,
+		select_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_132,  memb_X2N_value_constraint_129 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tag2el_129[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_129 = {
+	sizeof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs),
+	offsetof(struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tag2el_129,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs = {
+	"E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs",
+	"E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129,
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129)
+		/sizeof(asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_tags_129[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_129,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_129	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_136[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelReq_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelReq-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_136[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelReq-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_136 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_136,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_136 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_136,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_136	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_133[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_134,  memb_X2N_id_constraint_133 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_135,  memb_X2N_criticality_constraint_133 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_136,
+		select_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_136,  memb_X2N_value_constraint_133 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tag2el_133[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_133 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tag2el_133,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReq-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBRelReq-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_tags_133[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_133,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_133	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_140[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_140[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_140 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_140,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_140 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_140,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_140	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_137[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_138,  memb_X2N_id_constraint_137 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_139,  memb_X2N_criticality_constraint_137 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_140,
+		select_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_140,  memb_X2N_value_constraint_137 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tag2el_137[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_137 = {
+	sizeof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs),
+	offsetof(struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tag2el_137,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs = {
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs",
+	"E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137,
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137)
+		/sizeof(asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_tags_137[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_137,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_137	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_144[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqd_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelReqd-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_144[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelReqd-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_144 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_144,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_144 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_144,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_144	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_141[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_142,  memb_X2N_id_constraint_141 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_143,  memb_X2N_criticality_constraint_141 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_144,
+		select_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_144,  memb_X2N_value_constraint_141 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tag2el_141[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_141 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tag2el_141,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_tags_141[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_141,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_141	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_148[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBRelConf_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelConf-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_148[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBRelConf-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_148 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_148,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_148 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_148,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_148	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_145[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_146,  memb_X2N_id_constraint_145 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_147,  memb_X2N_criticality_constraint_145 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_148,
+		select_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_148,  memb_X2N_value_constraint_145 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tag2el_145[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_145 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tag2el_145,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBRelConf-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBRelConf-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_tags_145[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_145,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_145	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_152[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, choice.E_RABs_SubjectToSgNBCounterCheck_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToSgNBCounterCheck-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_152[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-SubjectToSgNBCounterCheck-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_152 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_152,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_152 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_152,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_152	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_149[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_150,  memb_X2N_id_constraint_149 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_151,  memb_X2N_criticality_constraint_149 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_152,
+		select_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_152,  memb_X2N_value_constraint_149 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tag2el_149[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_149 = {
+	sizeof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs),
+	offsetof(struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tag2el_149,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs = {
+	"E-RABs-SubjectToSgNBCounterCheck-ItemIEs",
+	"E-RABs-SubjectToSgNBCounterCheck-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149,
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149)
+		/sizeof(asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_tags_149[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_149,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_149	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_156[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, choice.E_RABs_ToBeReleased_SgNBChaConf_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBChaConf-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_156[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-ToBeReleased-SgNBChaConf-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_156 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_156,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_156 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_156,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_156	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_153[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_154,  memb_X2N_id_constraint_153 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_155,  memb_X2N_criticality_constraint_153 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_156,
+		select_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_156,  memb_X2N_value_constraint_153 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tag2el_153[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_153 = {
+	sizeof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs),
+	offsetof(struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tag2el_153,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs = {
+	"E-RABs-ToBeReleased-SgNBChaConf-ItemIEs",
+	"E-RABs-ToBeReleased-SgNBChaConf-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153,
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153)
+		/sizeof(asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_tags_153[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_153,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_153	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_160[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value, choice.E_RABs_DataForwardingAddress_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_DataForwardingAddress_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-DataForwardingAddress-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_160[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABs-DataForwardingAddress-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_160 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_160,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_160 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_160,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_160	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemIEs_157[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_158,  memb_X2N_id_constraint_157 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABs_DataForwardingAddress_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_159,  memb_X2N_criticality_constraint_157 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_160,
+		select_E_RABs_DataForwardingAddress_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_160,  memb_X2N_value_constraint_157 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABs_DataForwardingAddress_ItemIEs_tag2el_157[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemIEs_specs_157 = {
+	sizeof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs),
+	offsetof(struct X2N_E_RABs_DataForwardingAddress_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABs_DataForwardingAddress_ItemIEs_tag2el_157,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs = {
+	"E-RABs-DataForwardingAddress-ItemIEs",
+	"E-RABs-DataForwardingAddress-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157,
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157[0]), /* 1 */
+	asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157)
+		/sizeof(asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs_tags_157[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemIEs_157,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemIEs_specs_157	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_164[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_ItemIEs__value, choice.E_RAB_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_164[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RAB-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_164 = {
+	sizeof(struct X2N_E_RAB_ItemIEs__value),
+	offsetof(struct X2N_E_RAB_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RAB_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RAB_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_164,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_164 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_164,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_164	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RAB_ItemIEs_161[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_162,  memb_X2N_id_constraint_161 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RAB_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_163,  memb_X2N_criticality_constraint_161 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RAB_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_164,
+		select_E_RAB_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_164,  memb_X2N_value_constraint_161 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RAB_ItemIEs_tags_161[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RAB_ItemIEs_tag2el_161[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_ItemIEs_specs_161 = {
+	sizeof(struct X2N_E_RAB_ItemIEs),
+	offsetof(struct X2N_E_RAB_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RAB_ItemIEs_tag2el_161,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_ItemIEs = {
+	"E-RAB-ItemIEs",
+	"E-RAB-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RAB_ItemIEs_tags_161,
+	sizeof(asn_DEF_X2N_E_RAB_ItemIEs_tags_161)
+		/sizeof(asn_DEF_X2N_E_RAB_ItemIEs_tags_161[0]), /* 1 */
+	asn_DEF_X2N_E_RAB_ItemIEs_tags_161,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RAB_ItemIEs_tags_161)
+		/sizeof(asn_DEF_X2N_E_RAB_ItemIEs_tags_161[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_ItemIEs_161,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_ItemIEs_specs_161	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_168[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_ItemIEs__value, choice.E_RABUsageReport_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABUsageReport_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABUsageReport-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_168[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* E-RABUsageReport-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_168 = {
+	sizeof(struct X2N_E_RABUsageReport_ItemIEs__value),
+	offsetof(struct X2N_E_RABUsageReport_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_E_RABUsageReport_ItemIEs__value, present),
+	sizeof(((struct X2N_E_RABUsageReport_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_168,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_168 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_168,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_168	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReport_ItemIEs_165[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_166,  memb_X2N_id_constraint_165 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_E_RABUsageReport_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_167,  memb_X2N_criticality_constraint_165 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_E_RABUsageReport_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_168,
+		select_E_RABUsageReport_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_168,  memb_X2N_value_constraint_165 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_E_RABUsageReport_ItemIEs_tag2el_165[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABUsageReport_ItemIEs_specs_165 = {
+	sizeof(struct X2N_E_RABUsageReport_ItemIEs),
+	offsetof(struct X2N_E_RABUsageReport_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_E_RABUsageReport_ItemIEs_tag2el_165,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_ItemIEs = {
+	"E-RABUsageReport-ItemIEs",
+	"E-RABUsageReport-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165,
+	sizeof(asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165[0]), /* 1 */
+	asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165,	/* Same as above */
+	sizeof(asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165)
+		/sizeof(asn_DEF_X2N_E_RABUsageReport_ItemIEs_tags_165[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABUsageReport_ItemIEs_165,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABUsageReport_ItemIEs_specs_165	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_172[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs__value, choice.SecondaryRATUsageReport_Item),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SecondaryRATUsageReport_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SecondaryRATUsageReport-Item"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_172[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* SecondaryRATUsageReport-Item */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_172 = {
+	sizeof(struct X2N_SecondaryRATUsageReport_ItemIEs__value),
+	offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs__value, _asn_ctx),
+	offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs__value, present),
+	sizeof(((struct X2N_SecondaryRATUsageReport_ItemIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_172,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_172 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_172,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_172	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReport_ItemIEs_169[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_170,  memb_X2N_id_constraint_169 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SecondaryRATUsageReport_ItemIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_171,  memb_X2N_criticality_constraint_169 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_172,
+		select_SecondaryRATUsageReport_ItemIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_172,  memb_X2N_value_constraint_169 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SecondaryRATUsageReport_ItemIEs_tag2el_169[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATUsageReport_ItemIEs_specs_169 = {
+	sizeof(struct X2N_SecondaryRATUsageReport_ItemIEs),
+	offsetof(struct X2N_SecondaryRATUsageReport_ItemIEs, _asn_ctx),
+	asn_MAP_X2N_SecondaryRATUsageReport_ItemIEs_tag2el_169,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs = {
+	"SecondaryRATUsageReport-ItemIEs",
+	"SecondaryRATUsageReport-ItemIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169,
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs_tags_169[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATUsageReport_ItemIEs_169,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATUsageReport_ItemIEs_specs_169	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_176[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.GUMMEI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUMMEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GUMMEI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_ContextInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_HistoryInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_HistoryInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-HistoryInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.TraceActivation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TraceActivation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TraceActivation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.SRVCCOperationPossible),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SRVCCOperationPossible,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SRVCCOperationPossible"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.CSGMembershipStatus),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_CSGMembershipStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CSGMembershipStatus"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.MobilityInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.Masked_IMEISV),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_Masked_IMEISV,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Masked-IMEISV"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_HistoryInformationFromTheUE),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_UE_HistoryInformationFromTheUE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-HistoryInformationFromTheUE"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.ExpectedUEBehaviour),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEBehaviour,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExpectedUEBehaviour"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.ProSeAuthorized),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProSeAuthorized,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ProSeAuthorized"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_ContextReferenceAtSeNB),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtSeNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextReferenceAtSeNB"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.V2XServicesAuthorized),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_V2XServicesAuthorized,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"V2XServicesAuthorized"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_ContextReferenceAtWT),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtWT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextReferenceAtWT"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.NRUESecurityCapabilities),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRUESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRUESecurityCapabilities"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.UE_ContextReferenceAtSgNB),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextReferenceAtSgNB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextReferenceAtSgNB"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.AerialUEsubscriptionInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_AerialUEsubscriptionInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"AerialUEsubscriptionInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs__value, choice.Subscription_Based_UE_DifferentiationInfo),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Subscription-Based-UE-DifferentiationInfo"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_176[] = { 0, 15, 9, 10, 11, 7, 8, 20, 2, 3, 4, 5, 6, 12, 13, 14, 16, 17, 18, 19, 21, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_176[] = { 0, 21, 8, 9, 10, 11, 12, 5, 6, 2, 3, 4, 13, 14, 15, 1, 16, 17, 18, 19, 7, 20 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_176[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 15, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 9, 0, 1 }, /* MobilityInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 10, -1, 0 }, /* Masked-IMEISV */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 11, 0, 0 }, /* UE-HistoryInformationFromTheUE */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 2 }, /* SRVCCOperationPossible */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 8, -1, 1 }, /* CSGMembershipStatus */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 20, -2, 0 }, /* AerialUEsubscriptionInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 12 }, /* ECGI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 11 }, /* GUMMEI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 10 }, /* UE-ContextInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 9 }, /* UE-HistoryInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -4, 8 }, /* TraceActivation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -5, 7 }, /* ExpectedUEBehaviour */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -6, 6 }, /* ProSeAuthorized */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -7, 5 }, /* UE-ContextReferenceAtSeNB */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 16, -8, 4 }, /* V2XServicesAuthorized */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 17, -9, 3 }, /* UE-ContextReferenceAtWT */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 18, -10, 2 }, /* NRUESecurityCapabilities */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 19, -11, 1 }, /* UE-ContextReferenceAtSgNB */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 21, -12, 0 }, /* Subscription-Based-UE-DifferentiationInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_176 = {
+	sizeof(struct X2N_HandoverRequest_IEs__value),
+	offsetof(struct X2N_HandoverRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_HandoverRequest_IEs__value, present),
+	sizeof(((struct X2N_HandoverRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_176,
+	25,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_176,
+	asn_MAP_X2N_value_from_canonical_176,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_176 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_176,
+	22,	/* Elements count */
+	&asn_SPC_X2N_value_specs_176	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverRequest_IEs_173[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_174,  memb_X2N_id_constraint_173 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_175,  memb_X2N_criticality_constraint_173 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_176,
+		select_HandoverRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_176,  memb_X2N_value_constraint_173 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRequest_IEs_tags_173[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRequest_IEs_tag2el_173[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequest_IEs_specs_173 = {
+	sizeof(struct X2N_HandoverRequest_IEs),
+	offsetof(struct X2N_HandoverRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_HandoverRequest_IEs_tag2el_173,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequest_IEs = {
+	"HandoverRequest-IEs",
+	"HandoverRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRequest_IEs_tags_173,
+	sizeof(asn_DEF_X2N_HandoverRequest_IEs_tags_173)
+		/sizeof(asn_DEF_X2N_HandoverRequest_IEs_tags_173[0]), /* 1 */
+	asn_DEF_X2N_HandoverRequest_IEs_tags_173,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRequest_IEs_tags_173)
+		/sizeof(asn_DEF_X2N_HandoverRequest_IEs_tags_173[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRequest_IEs_173,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverRequest_IEs_specs_173	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_180[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.E_RAB_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.TargeteNBtoSource_eNBTransparentContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TargeteNBtoSource-eNBTransparentContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.UE_ContextKeptIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextKeptIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextKeptIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_180[] = { 0, 6, 3, 5, 1, 2, 4 };
+static const unsigned asn_MAP_X2N_value_from_canonical_180[] = { 0, 4, 5, 2, 6, 3, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_180[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* TargeteNBtoSource-eNBTransparentContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 0 }, /* UE-ContextKeptIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 2 }, /* E-RABs-Admitted-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* E-RAB-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_180 = {
+	sizeof(struct X2N_HandoverRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_HandoverRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_HandoverRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_180,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_180,
+	asn_MAP_X2N_value_from_canonical_180,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_180 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_180,
+	7,	/* Elements count */
+	&asn_SPC_X2N_value_specs_180	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverRequestAcknowledge_IEs_177[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_178,  memb_X2N_id_constraint_177 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_179,  memb_X2N_criticality_constraint_177 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_180,
+		select_HandoverRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_180,  memb_X2N_value_constraint_177 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverRequestAcknowledge_IEs_tag2el_177[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequestAcknowledge_IEs_specs_177 = {
+	sizeof(struct X2N_HandoverRequestAcknowledge_IEs),
+	offsetof(struct X2N_HandoverRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_HandoverRequestAcknowledge_IEs_tag2el_177,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequestAcknowledge_IEs = {
+	"HandoverRequestAcknowledge-IEs",
+	"HandoverRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177,
+	sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177)
+		/sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177[0]), /* 1 */
+	asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177)
+		/sizeof(asn_DEF_X2N_HandoverRequestAcknowledge_IEs_tags_177[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverRequestAcknowledge_IEs_177,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverRequestAcknowledge_IEs_specs_177	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_184[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_184[] = { 0, 3, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_184[] = { 0, 3, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_184[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_184 = {
+	sizeof(struct X2N_HandoverPreparationFailure_IEs__value),
+	offsetof(struct X2N_HandoverPreparationFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_HandoverPreparationFailure_IEs__value, present),
+	sizeof(((struct X2N_HandoverPreparationFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_184,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_184,
+	asn_MAP_X2N_value_from_canonical_184,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_184 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_184,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_184	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverPreparationFailure_IEs_181[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_182,  memb_X2N_id_constraint_181 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverPreparationFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_183,  memb_X2N_criticality_constraint_181 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverPreparationFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_184,
+		select_HandoverPreparationFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_184,  memb_X2N_value_constraint_181 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverPreparationFailure_IEs_tag2el_181[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverPreparationFailure_IEs_specs_181 = {
+	sizeof(struct X2N_HandoverPreparationFailure_IEs),
+	offsetof(struct X2N_HandoverPreparationFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_HandoverPreparationFailure_IEs_tag2el_181,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverPreparationFailure_IEs = {
+	"HandoverPreparationFailure-IEs",
+	"HandoverPreparationFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181,
+	sizeof(asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181)
+		/sizeof(asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181[0]), /* 1 */
+	asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181)
+		/sizeof(asn_DEF_X2N_HandoverPreparationFailure_IEs_tags_181[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverPreparationFailure_IEs_181,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverPreparationFailure_IEs_specs_181	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_188[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.HandoverReportType),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverReportType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverReportType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.TargetCellInUTRAN),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TargetCellInUTRAN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TargetCellInUTRAN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.CRNTI),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_CRNTI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CRNTI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.MobilityInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.UE_RLF_Report_Container),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_UE_RLF_Report_Container,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-RLF-Report-Container"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs__value, choice.UE_RLF_Report_Container_for_extended_bands),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-RLF-Report-Container-for-extended-bands"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_188[] = { 4, 5, 3, 6, 7, 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_188[] = { 5, 7, 6, 2, 0, 1, 3, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_188[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 4, 0, 1 }, /* CRNTI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, -1, 0 }, /* MobilityInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 2 }, /* TargetCellInUTRAN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 1 }, /* UE-RLF-Report-Container */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -2, 0 }, /* UE-RLF-Report-Container-for-extended-bands */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* HandoverReportType */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* ECGI */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_188 = {
+	sizeof(struct X2N_HandoverReport_IEs__value),
+	offsetof(struct X2N_HandoverReport_IEs__value, _asn_ctx),
+	offsetof(struct X2N_HandoverReport_IEs__value, present),
+	sizeof(((struct X2N_HandoverReport_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_188,
+	11,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_188,
+	asn_MAP_X2N_value_from_canonical_188,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_188 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_188,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_188	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverReport_IEs_185[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_186,  memb_X2N_id_constraint_185 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverReport_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_187,  memb_X2N_criticality_constraint_185 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverReport_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_188,
+		select_HandoverReport_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_188,  memb_X2N_value_constraint_185 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverReport_IEs_tags_185[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverReport_IEs_tag2el_185[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverReport_IEs_specs_185 = {
+	sizeof(struct X2N_HandoverReport_IEs),
+	offsetof(struct X2N_HandoverReport_IEs, _asn_ctx),
+	asn_MAP_X2N_HandoverReport_IEs_tag2el_185,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReport_IEs = {
+	"HandoverReport-IEs",
+	"HandoverReport-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverReport_IEs_tags_185,
+	sizeof(asn_DEF_X2N_HandoverReport_IEs_tags_185)
+		/sizeof(asn_DEF_X2N_HandoverReport_IEs_tags_185[0]), /* 1 */
+	asn_DEF_X2N_HandoverReport_IEs_tags_185,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverReport_IEs_tags_185)
+		/sizeof(asn_DEF_X2N_HandoverReport_IEs_tags_185[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverReport_IEs_185,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverReport_IEs_specs_185	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_192[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs__value, choice.E_RABs_SubjectToStatusTransfer_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToStatusTransfer-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_192[] = { 0, 2, 3, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_192[] = { 0, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_192[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* E-RABs-SubjectToStatusTransfer-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_192 = {
+	sizeof(struct X2N_SNStatusTransfer_IEs__value),
+	offsetof(struct X2N_SNStatusTransfer_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SNStatusTransfer_IEs__value, present),
+	sizeof(((struct X2N_SNStatusTransfer_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_192,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_192,
+	asn_MAP_X2N_value_from_canonical_192,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_192 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_192,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_192	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SNStatusTransfer_IEs_189[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_190,  memb_X2N_id_constraint_189 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SNStatusTransfer_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_191,  memb_X2N_criticality_constraint_189 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_192,
+		select_SNStatusTransfer_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_192,  memb_X2N_value_constraint_189 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SNStatusTransfer_IEs_tags_189[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SNStatusTransfer_IEs_tag2el_189[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SNStatusTransfer_IEs_specs_189 = {
+	sizeof(struct X2N_SNStatusTransfer_IEs),
+	offsetof(struct X2N_SNStatusTransfer_IEs, _asn_ctx),
+	asn_MAP_X2N_SNStatusTransfer_IEs_tag2el_189,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SNStatusTransfer_IEs = {
+	"SNStatusTransfer-IEs",
+	"SNStatusTransfer-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SNStatusTransfer_IEs_tags_189,
+	sizeof(asn_DEF_X2N_SNStatusTransfer_IEs_tags_189)
+		/sizeof(asn_DEF_X2N_SNStatusTransfer_IEs_tags_189[0]), /* 1 */
+	asn_DEF_X2N_SNStatusTransfer_IEs_tags_189,	/* Same as above */
+	sizeof(asn_DEF_X2N_SNStatusTransfer_IEs_tags_189)
+		/sizeof(asn_DEF_X2N_SNStatusTransfer_IEs_tags_189[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SNStatusTransfer_IEs_189,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SNStatusTransfer_IEs_specs_189	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_196[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs__value, choice.SIPTOBearerDeactivationIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SIPTOBearerDeactivationIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SIPTOBearerDeactivationIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_196[] = { 0, 1, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_196[] = { 0, 1, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_196[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 } /* SIPTOBearerDeactivationIndication */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_196 = {
+	sizeof(struct X2N_UEContextRelease_IEs__value),
+	offsetof(struct X2N_UEContextRelease_IEs__value, _asn_ctx),
+	offsetof(struct X2N_UEContextRelease_IEs__value, present),
+	sizeof(((struct X2N_UEContextRelease_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_196,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_196,
+	asn_MAP_X2N_value_from_canonical_196,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_196 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_196,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_196	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UEContextRelease_IEs_193[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_194,  memb_X2N_id_constraint_193 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UEContextRelease_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_195,  memb_X2N_criticality_constraint_193 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_196,
+		select_UEContextRelease_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_196,  memb_X2N_value_constraint_193 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEContextRelease_IEs_tags_193[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEContextRelease_IEs_tag2el_193[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEContextRelease_IEs_specs_193 = {
+	sizeof(struct X2N_UEContextRelease_IEs),
+	offsetof(struct X2N_UEContextRelease_IEs, _asn_ctx),
+	asn_MAP_X2N_UEContextRelease_IEs_tag2el_193,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEContextRelease_IEs = {
+	"UEContextRelease-IEs",
+	"UEContextRelease-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEContextRelease_IEs_tags_193,
+	sizeof(asn_DEF_X2N_UEContextRelease_IEs_tags_193)
+		/sizeof(asn_DEF_X2N_UEContextRelease_IEs_tags_193[0]), /* 1 */
+	asn_DEF_X2N_UEContextRelease_IEs_tags_193,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEContextRelease_IEs_tags_193)
+		/sizeof(asn_DEF_X2N_UEContextRelease_IEs_tags_193[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEContextRelease_IEs_193,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEContextRelease_IEs_specs_193	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_200[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_200[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_200[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_200[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_200 = {
+	sizeof(struct X2N_HandoverCancel_IEs__value),
+	offsetof(struct X2N_HandoverCancel_IEs__value, _asn_ctx),
+	offsetof(struct X2N_HandoverCancel_IEs__value, present),
+	sizeof(((struct X2N_HandoverCancel_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_200,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_200,
+	asn_MAP_X2N_value_from_canonical_200,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_200 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_200,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_200	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_HandoverCancel_IEs_197[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_198,  memb_X2N_id_constraint_197 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_HandoverCancel_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_199,  memb_X2N_criticality_constraint_197 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_HandoverCancel_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_200,
+		select_HandoverCancel_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_200,  memb_X2N_value_constraint_197 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_HandoverCancel_IEs_tags_197[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_HandoverCancel_IEs_tag2el_197[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverCancel_IEs_specs_197 = {
+	sizeof(struct X2N_HandoverCancel_IEs),
+	offsetof(struct X2N_HandoverCancel_IEs, _asn_ctx),
+	asn_MAP_X2N_HandoverCancel_IEs_tag2el_197,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_HandoverCancel_IEs = {
+	"HandoverCancel-IEs",
+	"HandoverCancel-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_HandoverCancel_IEs_tags_197,
+	sizeof(asn_DEF_X2N_HandoverCancel_IEs_tags_197)
+		/sizeof(asn_DEF_X2N_HandoverCancel_IEs_tags_197[0]), /* 1 */
+	asn_DEF_X2N_HandoverCancel_IEs_tags_197,	/* Same as above */
+	sizeof(asn_DEF_X2N_HandoverCancel_IEs_tags_197)
+		/sizeof(asn_DEF_X2N_HandoverCancel_IEs_tags_197[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_HandoverCancel_IEs_197,
+	3,	/* Elements count */
+	&asn_SPC_X2N_HandoverCancel_IEs_specs_197	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_204[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_204[] = { 0, 3, 4, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_204[] = { 0, 4, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_204[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_204 = {
+	sizeof(struct X2N_ErrorIndication_IEs__value),
+	offsetof(struct X2N_ErrorIndication_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ErrorIndication_IEs__value, present),
+	sizeof(((struct X2N_ErrorIndication_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_204,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_204,
+	asn_MAP_X2N_value_from_canonical_204,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_204 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_204,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_204	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ErrorIndication_IEs_201[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_202,  memb_X2N_id_constraint_201 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ErrorIndication_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_203,  memb_X2N_criticality_constraint_201 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ErrorIndication_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_204,
+		select_ErrorIndication_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_204,  memb_X2N_value_constraint_201 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ErrorIndication_IEs_tags_201[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ErrorIndication_IEs_tag2el_201[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ErrorIndication_IEs_specs_201 = {
+	sizeof(struct X2N_ErrorIndication_IEs),
+	offsetof(struct X2N_ErrorIndication_IEs, _asn_ctx),
+	asn_MAP_X2N_ErrorIndication_IEs_tag2el_201,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ErrorIndication_IEs = {
+	"ErrorIndication-IEs",
+	"ErrorIndication-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ErrorIndication_IEs_tags_201,
+	sizeof(asn_DEF_X2N_ErrorIndication_IEs_tags_201)
+		/sizeof(asn_DEF_X2N_ErrorIndication_IEs_tags_201[0]), /* 1 */
+	asn_DEF_X2N_ErrorIndication_IEs_tags_201,	/* Same as above */
+	sizeof(asn_DEF_X2N_ErrorIndication_IEs_tags_201)
+		/sizeof(asn_DEF_X2N_ErrorIndication_IEs_tags_201[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ErrorIndication_IEs_201,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ErrorIndication_IEs_specs_201	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_208[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_208[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_208 = {
+	sizeof(struct X2N_ResetRequest_IEs__value),
+	offsetof(struct X2N_ResetRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResetRequest_IEs__value, present),
+	sizeof(((struct X2N_ResetRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_208,
+	4,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_208 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_208,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_208	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResetRequest_IEs_205[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_206,  memb_X2N_id_constraint_205 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResetRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_207,  memb_X2N_criticality_constraint_205 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResetRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_208,
+		select_ResetRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_208,  memb_X2N_value_constraint_205 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResetRequest_IEs_tags_205[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResetRequest_IEs_tag2el_205[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetRequest_IEs_specs_205 = {
+	sizeof(struct X2N_ResetRequest_IEs),
+	offsetof(struct X2N_ResetRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_ResetRequest_IEs_tag2el_205,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResetRequest_IEs = {
+	"ResetRequest-IEs",
+	"ResetRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResetRequest_IEs_tags_205,
+	sizeof(asn_DEF_X2N_ResetRequest_IEs_tags_205)
+		/sizeof(asn_DEF_X2N_ResetRequest_IEs_tags_205[0]), /* 1 */
+	asn_DEF_X2N_ResetRequest_IEs_tags_205,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResetRequest_IEs_tags_205)
+		/sizeof(asn_DEF_X2N_ResetRequest_IEs_tags_205[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResetRequest_IEs_205,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResetRequest_IEs_specs_205	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_212[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_212[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_212 = {
+	sizeof(struct X2N_ResetResponse_IEs__value),
+	offsetof(struct X2N_ResetResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResetResponse_IEs__value, present),
+	sizeof(((struct X2N_ResetResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_212,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_212 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_212,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_212	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResetResponse_IEs_209[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_210,  memb_X2N_id_constraint_209 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResetResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_211,  memb_X2N_criticality_constraint_209 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResetResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_212,
+		select_ResetResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_212,  memb_X2N_value_constraint_209 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResetResponse_IEs_tags_209[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResetResponse_IEs_tag2el_209[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetResponse_IEs_specs_209 = {
+	sizeof(struct X2N_ResetResponse_IEs),
+	offsetof(struct X2N_ResetResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_ResetResponse_IEs_tag2el_209,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResetResponse_IEs = {
+	"ResetResponse-IEs",
+	"ResetResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResetResponse_IEs_tags_209,
+	sizeof(asn_DEF_X2N_ResetResponse_IEs_tags_209)
+		/sizeof(asn_DEF_X2N_ResetResponse_IEs_tags_209[0]), /* 1 */
+	asn_DEF_X2N_ResetResponse_IEs_tags_209,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResetResponse_IEs_tags_209)
+		/sizeof(asn_DEF_X2N_ResetResponse_IEs_tags_209[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResetResponse_IEs_209,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResetResponse_IEs_specs_209	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_216[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs__value, choice.ServedCells),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCells,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedCells"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs__value, choice.GUGroupIDList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUGroupIDList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GUGroupIDList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs__value, choice.LHN_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_LHN_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LHN-ID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_216[] = { 3, 0, 1, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_216[] = { 1, 2, 3, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_216[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* LHN-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* GlobalENB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ServedCells */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* GUGroupIDList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_216 = {
+	sizeof(struct X2N_X2SetupRequest_IEs__value),
+	offsetof(struct X2N_X2SetupRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2SetupRequest_IEs__value, present),
+	sizeof(((struct X2N_X2SetupRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_216,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_216,
+	asn_MAP_X2N_value_from_canonical_216,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_216 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_216,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_216	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupRequest_IEs_213[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_214,  memb_X2N_id_constraint_213 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2SetupRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_215,  memb_X2N_criticality_constraint_213 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_216,
+		select_X2SetupRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_216,  memb_X2N_value_constraint_213 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupRequest_IEs_tags_213[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupRequest_IEs_tag2el_213[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupRequest_IEs_specs_213 = {
+	sizeof(struct X2N_X2SetupRequest_IEs),
+	offsetof(struct X2N_X2SetupRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_X2SetupRequest_IEs_tag2el_213,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupRequest_IEs = {
+	"X2SetupRequest-IEs",
+	"X2SetupRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupRequest_IEs_tags_213,
+	sizeof(asn_DEF_X2N_X2SetupRequest_IEs_tags_213)
+		/sizeof(asn_DEF_X2N_X2SetupRequest_IEs_tags_213[0]), /* 1 */
+	asn_DEF_X2N_X2SetupRequest_IEs_tags_213,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupRequest_IEs_tags_213)
+		/sizeof(asn_DEF_X2N_X2SetupRequest_IEs_tags_213[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupRequest_IEs_213,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2SetupRequest_IEs_specs_213	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_220[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs__value, choice.ServedCells),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCells,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedCells"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs__value, choice.GUGroupIDList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUGroupIDList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GUGroupIDList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs__value, choice.LHN_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_LHN_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"LHN-ID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_220[] = { 4, 0, 1, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_220[] = { 1, 2, 3, 4, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_220[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* LHN-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 3 }, /* GlobalENB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 2 }, /* ServedCells */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 1 }, /* GUGroupIDList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_220 = {
+	sizeof(struct X2N_X2SetupResponse_IEs__value),
+	offsetof(struct X2N_X2SetupResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2SetupResponse_IEs__value, present),
+	sizeof(((struct X2N_X2SetupResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_220,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_220,
+	asn_MAP_X2N_value_from_canonical_220,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_220 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_220,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_220	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupResponse_IEs_217[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_218,  memb_X2N_id_constraint_217 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2SetupResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_219,  memb_X2N_criticality_constraint_217 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_220,
+		select_X2SetupResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_220,  memb_X2N_value_constraint_217 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupResponse_IEs_tags_217[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupResponse_IEs_tag2el_217[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupResponse_IEs_specs_217 = {
+	sizeof(struct X2N_X2SetupResponse_IEs),
+	offsetof(struct X2N_X2SetupResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_X2SetupResponse_IEs_tag2el_217,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupResponse_IEs = {
+	"X2SetupResponse-IEs",
+	"X2SetupResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupResponse_IEs_tags_217,
+	sizeof(asn_DEF_X2N_X2SetupResponse_IEs_tags_217)
+		/sizeof(asn_DEF_X2N_X2SetupResponse_IEs_tags_217[0]), /* 1 */
+	asn_DEF_X2N_X2SetupResponse_IEs_tags_217,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupResponse_IEs_tags_217)
+		/sizeof(asn_DEF_X2N_X2SetupResponse_IEs_tags_217[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupResponse_IEs_217,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2SetupResponse_IEs_specs_217	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_224[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_224[] = { 1, 2, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_224[] = { 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_224[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_224 = {
+	sizeof(struct X2N_X2SetupFailure_IEs__value),
+	offsetof(struct X2N_X2SetupFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2SetupFailure_IEs__value, present),
+	sizeof(((struct X2N_X2SetupFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_224,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_224,
+	asn_MAP_X2N_value_from_canonical_224,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_224 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_224,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_224	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupFailure_IEs_221[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_222,  memb_X2N_id_constraint_221 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2SetupFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_223,  memb_X2N_criticality_constraint_221 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_224,
+		select_X2SetupFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_224,  memb_X2N_value_constraint_221 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupFailure_IEs_tags_221[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupFailure_IEs_tag2el_221[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupFailure_IEs_specs_221 = {
+	sizeof(struct X2N_X2SetupFailure_IEs),
+	offsetof(struct X2N_X2SetupFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_X2SetupFailure_IEs_tag2el_221,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupFailure_IEs = {
+	"X2SetupFailure-IEs",
+	"X2SetupFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupFailure_IEs_tags_221,
+	sizeof(asn_DEF_X2N_X2SetupFailure_IEs_tags_221)
+		/sizeof(asn_DEF_X2N_X2SetupFailure_IEs_tags_221[0]), /* 1 */
+	asn_DEF_X2N_X2SetupFailure_IEs_tags_221,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupFailure_IEs_tags_221)
+		/sizeof(asn_DEF_X2N_X2SetupFailure_IEs_tags_221[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupFailure_IEs_221,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2SetupFailure_IEs_specs_221	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_228[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LoadInformation_IEs__value, choice.CellInformation_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellInformation_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellInformation-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_228[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CellInformation-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_228 = {
+	sizeof(struct X2N_LoadInformation_IEs__value),
+	offsetof(struct X2N_LoadInformation_IEs__value, _asn_ctx),
+	offsetof(struct X2N_LoadInformation_IEs__value, present),
+	sizeof(((struct X2N_LoadInformation_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_228,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_228 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_228,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_228	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_LoadInformation_IEs_225[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LoadInformation_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_226,  memb_X2N_id_constraint_225 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_LoadInformation_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_LoadInformation_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_227,  memb_X2N_criticality_constraint_225 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_LoadInformation_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_228,
+		select_LoadInformation_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_228,  memb_X2N_value_constraint_225 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_LoadInformation_IEs_tags_225[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_LoadInformation_IEs_tag2el_225[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_LoadInformation_IEs_specs_225 = {
+	sizeof(struct X2N_LoadInformation_IEs),
+	offsetof(struct X2N_LoadInformation_IEs, _asn_ctx),
+	asn_MAP_X2N_LoadInformation_IEs_tag2el_225,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_LoadInformation_IEs = {
+	"LoadInformation-IEs",
+	"LoadInformation-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_LoadInformation_IEs_tags_225,
+	sizeof(asn_DEF_X2N_LoadInformation_IEs_tags_225)
+		/sizeof(asn_DEF_X2N_LoadInformation_IEs_tags_225[0]), /* 1 */
+	asn_DEF_X2N_LoadInformation_IEs_tags_225,	/* Same as above */
+	sizeof(asn_DEF_X2N_LoadInformation_IEs_tags_225)
+		/sizeof(asn_DEF_X2N_LoadInformation_IEs_tags_225[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_LoadInformation_IEs_225,
+	3,	/* Elements count */
+	&asn_SPC_X2N_LoadInformation_IEs_specs_225	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_232[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, choice.ServedCells),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCells,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedCells"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, choice.ServedCellsToModify),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToModify,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedCellsToModify"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, choice.Old_ECGIs),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Old_ECGIs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Old-ECGIs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, choice.GUGroupIDList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUGroupIDList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GUGroupIDList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, choice.CoverageModificationList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CoverageModificationList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CoverageModificationList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_232[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 4 }, /* ServedCells */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 3 }, /* ServedCellsToModify */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 2 }, /* Old-ECGIs */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 1 }, /* GUGroupIDList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 0 } /* CoverageModificationList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_232 = {
+	sizeof(struct X2N_ENBConfigurationUpdate_IEs__value),
+	offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENBConfigurationUpdate_IEs__value, present),
+	sizeof(((struct X2N_ENBConfigurationUpdate_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_232,
+	5,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_232 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_232,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_232	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdate_IEs_229[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_230,  memb_X2N_id_constraint_229 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENBConfigurationUpdate_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_231,  memb_X2N_criticality_constraint_229 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdate_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_232,
+		select_ENBConfigurationUpdate_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_232,  memb_X2N_value_constraint_229 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdate_IEs_tag2el_229[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdate_IEs_specs_229 = {
+	sizeof(struct X2N_ENBConfigurationUpdate_IEs),
+	offsetof(struct X2N_ENBConfigurationUpdate_IEs, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdate_IEs_tag2el_229,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdate_IEs = {
+	"ENBConfigurationUpdate-IEs",
+	"ENBConfigurationUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdate_IEs_tags_229[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdate_IEs_229,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdate_IEs_specs_229	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_236[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_236[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_236 = {
+	sizeof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value),
+	offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_236,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_236 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_236,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_236	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_IEs_233[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_234,  memb_X2N_id_constraint_233 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENBConfigurationUpdateAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_235,  memb_X2N_criticality_constraint_233 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_236,
+		select_ENBConfigurationUpdateAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_236,  memb_X2N_value_constraint_233 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdateAcknowledge_IEs_tag2el_233[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_IEs_specs_233 = {
+	sizeof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs),
+	offsetof(struct X2N_ENBConfigurationUpdateAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdateAcknowledge_IEs_tag2el_233,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs = {
+	"ENBConfigurationUpdateAcknowledge-IEs",
+	"ENBConfigurationUpdateAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs_tags_233[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_IEs_233,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_IEs_specs_233	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_240[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_240[] = { 1, 2, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_240[] = { 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_240[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_240 = {
+	sizeof(struct X2N_ENBConfigurationUpdateFailure_IEs__value),
+	offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs__value, present),
+	sizeof(((struct X2N_ENBConfigurationUpdateFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_240,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_240,
+	asn_MAP_X2N_value_from_canonical_240,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_240 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_240,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_240	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateFailure_IEs_237[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_238,  memb_X2N_id_constraint_237 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENBConfigurationUpdateFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_239,  memb_X2N_criticality_constraint_237 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_240,
+		select_ENBConfigurationUpdateFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_240,  memb_X2N_value_constraint_237 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENBConfigurationUpdateFailure_IEs_tag2el_237[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateFailure_IEs_specs_237 = {
+	sizeof(struct X2N_ENBConfigurationUpdateFailure_IEs),
+	offsetof(struct X2N_ENBConfigurationUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ENBConfigurationUpdateFailure_IEs_tag2el_237,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs = {
+	"ENBConfigurationUpdateFailure-IEs",
+	"ENBConfigurationUpdateFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237,
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237[0]), /* 1 */
+	asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237)
+		/sizeof(asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs_tags_237[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENBConfigurationUpdateFailure_IEs_237,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENBConfigurationUpdateFailure_IEs_specs_237	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_244[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.Measurement_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Measurement_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Measurement-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.Registration_Request),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_Registration_Request,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Registration-Request"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.ReportCharacteristics),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_ReportCharacteristics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReportCharacteristics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.CellToReport_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellToReport_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellToReport-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.ReportingPeriodicity),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ReportingPeriodicity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReportingPeriodicity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.PartialSuccessIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PartialSuccessIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PartialSuccessIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.ReportingPeriodicityRSRPMR),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ReportingPeriodicityRSRPMR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReportingPeriodicityRSRPMR"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs__value, choice.ReportingPeriodicityCSIR),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_ReportingPeriodicityCSIR,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ReportingPeriodicityCSIR"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_244[] = { 0, 2, 1, 4, 5, 6, 7, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_244[] = { 0, 2, 1, 7, 3, 4, 5, 6 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_244[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* ReportCharacteristics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 4 }, /* Registration-Request */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, -1, 3 }, /* ReportingPeriodicity */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, -2, 2 }, /* PartialSuccessIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -3, 1 }, /* ReportingPeriodicityRSRPMR */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, -4, 0 }, /* ReportingPeriodicityCSIR */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 } /* CellToReport-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_244 = {
+	sizeof(struct X2N_ResourceStatusRequest_IEs__value),
+	offsetof(struct X2N_ResourceStatusRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResourceStatusRequest_IEs__value, present),
+	sizeof(((struct X2N_ResourceStatusRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_244,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_244,
+	asn_MAP_X2N_value_from_canonical_244,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_244 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_244,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_244	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusRequest_IEs_241[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_242,  memb_X2N_id_constraint_241 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResourceStatusRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_243,  memb_X2N_criticality_constraint_241 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_244,
+		select_ResourceStatusRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_244,  memb_X2N_value_constraint_241 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusRequest_IEs_tag2el_241[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusRequest_IEs_specs_241 = {
+	sizeof(struct X2N_ResourceStatusRequest_IEs),
+	offsetof(struct X2N_ResourceStatusRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusRequest_IEs_tag2el_241,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusRequest_IEs = {
+	"ResourceStatusRequest-IEs",
+	"ResourceStatusRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241,
+	sizeof(asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241)
+		/sizeof(asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241)
+		/sizeof(asn_DEF_X2N_ResourceStatusRequest_IEs_tags_241[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusRequest_IEs_241,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusRequest_IEs_specs_241	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_248[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs__value, choice.Measurement_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Measurement_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Measurement-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs__value, choice.MeasurementInitiationResult_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeasurementInitiationResult_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeasurementInitiationResult-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_248[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* MeasurementInitiationResult-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_248 = {
+	sizeof(struct X2N_ResourceStatusResponse_IEs__value),
+	offsetof(struct X2N_ResourceStatusResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResourceStatusResponse_IEs__value, present),
+	sizeof(((struct X2N_ResourceStatusResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_248,
+	3,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_248 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_248,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_248	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusResponse_IEs_245[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_246,  memb_X2N_id_constraint_245 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResourceStatusResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_247,  memb_X2N_criticality_constraint_245 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_248,
+		select_ResourceStatusResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_248,  memb_X2N_value_constraint_245 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusResponse_IEs_tag2el_245[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusResponse_IEs_specs_245 = {
+	sizeof(struct X2N_ResourceStatusResponse_IEs),
+	offsetof(struct X2N_ResourceStatusResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusResponse_IEs_tag2el_245,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusResponse_IEs = {
+	"ResourceStatusResponse-IEs",
+	"ResourceStatusResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245,
+	sizeof(asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245)
+		/sizeof(asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245)
+		/sizeof(asn_DEF_X2N_ResourceStatusResponse_IEs_tags_245[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusResponse_IEs_245,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusResponse_IEs_specs_245	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_252[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs__value, choice.Measurement_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Measurement_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Measurement-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs__value, choice.CompleteFailureCauseInformation_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CompleteFailureCauseInformation_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CompleteFailureCauseInformation-List"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_252[] = { 0, 2, 3, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_252[] = { 0, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_252[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 }, /* CompleteFailureCauseInformation-List */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_252 = {
+	sizeof(struct X2N_ResourceStatusFailure_IEs__value),
+	offsetof(struct X2N_ResourceStatusFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResourceStatusFailure_IEs__value, present),
+	sizeof(((struct X2N_ResourceStatusFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_252,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_252,
+	asn_MAP_X2N_value_from_canonical_252,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_252 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_252,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_252	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusFailure_IEs_249[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_250,  memb_X2N_id_constraint_249 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResourceStatusFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_251,  memb_X2N_criticality_constraint_249 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_252,
+		select_ResourceStatusFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_252,  memb_X2N_value_constraint_249 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusFailure_IEs_tag2el_249[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusFailure_IEs_specs_249 = {
+	sizeof(struct X2N_ResourceStatusFailure_IEs),
+	offsetof(struct X2N_ResourceStatusFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusFailure_IEs_tag2el_249,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusFailure_IEs = {
+	"ResourceStatusFailure-IEs",
+	"ResourceStatusFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249,
+	sizeof(asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249)
+		/sizeof(asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249)
+		/sizeof(asn_DEF_X2N_ResourceStatusFailure_IEs_tags_249[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusFailure_IEs_249,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusFailure_IEs_specs_249	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_256[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate_IEs__value, choice.Measurement_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_Measurement_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Measurement-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate_IEs__value, choice.CellMeasurementResult_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellMeasurementResult_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellMeasurementResult-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_256[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* Measurement-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* CellMeasurementResult-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_256 = {
+	sizeof(struct X2N_ResourceStatusUpdate_IEs__value),
+	offsetof(struct X2N_ResourceStatusUpdate_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ResourceStatusUpdate_IEs__value, present),
+	sizeof(((struct X2N_ResourceStatusUpdate_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_256,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_256 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_256,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_256	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusUpdate_IEs_253[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_254,  memb_X2N_id_constraint_253 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ResourceStatusUpdate_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_255,  memb_X2N_criticality_constraint_253 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_256,
+		select_ResourceStatusUpdate_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_256,  memb_X2N_value_constraint_253 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusUpdate_IEs_tag2el_253[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusUpdate_IEs_specs_253 = {
+	sizeof(struct X2N_ResourceStatusUpdate_IEs),
+	offsetof(struct X2N_ResourceStatusUpdate_IEs, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusUpdate_IEs_tag2el_253,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusUpdate_IEs = {
+	"ResourceStatusUpdate-IEs",
+	"ResourceStatusUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253,
+	sizeof(asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253)
+		/sizeof(asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253)
+		/sizeof(asn_DEF_X2N_ResourceStatusUpdate_IEs_tags_253[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusUpdate_IEs_253,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusUpdate_IEs_specs_253	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_260[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs__value, choice.MobilityParametersInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityParametersInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityParametersInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_260[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ECGI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 }, /* MobilityParametersInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_260 = {
+	sizeof(struct X2N_MobilityChangeRequest_IEs__value),
+	offsetof(struct X2N_MobilityChangeRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_MobilityChangeRequest_IEs__value, present),
+	sizeof(((struct X2N_MobilityChangeRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_260,
+	6,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_260 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_260,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_260	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeRequest_IEs_257[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_258,  memb_X2N_id_constraint_257 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MobilityChangeRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_259,  memb_X2N_criticality_constraint_257 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_260,
+		select_MobilityChangeRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_260,  memb_X2N_value_constraint_257 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeRequest_IEs_tag2el_257[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeRequest_IEs_specs_257 = {
+	sizeof(struct X2N_MobilityChangeRequest_IEs),
+	offsetof(struct X2N_MobilityChangeRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeRequest_IEs_tag2el_257,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeRequest_IEs = {
+	"MobilityChangeRequest-IEs",
+	"MobilityChangeRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257,
+	sizeof(asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257)
+		/sizeof(asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257)
+		/sizeof(asn_DEF_X2N_MobilityChangeRequest_IEs_tags_257[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeRequest_IEs_257,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeRequest_IEs_specs_257	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_264[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_264[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ECGI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_264 = {
+	sizeof(struct X2N_MobilityChangeAcknowledge_IEs__value),
+	offsetof(struct X2N_MobilityChangeAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_MobilityChangeAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_MobilityChangeAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_264,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_264 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_264,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_264	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeAcknowledge_IEs_261[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_262,  memb_X2N_id_constraint_261 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MobilityChangeAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_263,  memb_X2N_criticality_constraint_261 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_264,
+		select_MobilityChangeAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_264,  memb_X2N_value_constraint_261 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeAcknowledge_IEs_tag2el_261[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeAcknowledge_IEs_specs_261 = {
+	sizeof(struct X2N_MobilityChangeAcknowledge_IEs),
+	offsetof(struct X2N_MobilityChangeAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeAcknowledge_IEs_tag2el_261,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeAcknowledge_IEs = {
+	"MobilityChangeAcknowledge-IEs",
+	"MobilityChangeAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261,
+	sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261)
+		/sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261)
+		/sizeof(asn_DEF_X2N_MobilityChangeAcknowledge_IEs_tags_261[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeAcknowledge_IEs_261,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeAcknowledge_IEs_specs_261	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_268[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs__value, choice.MobilityParametersModificationRange),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityParametersModificationRange,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityParametersModificationRange"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_268[] = { 0, 2, 3, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_268[] = { 0, 3, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_268[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* ECGI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* MobilityParametersModificationRange */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_268 = {
+	sizeof(struct X2N_MobilityChangeFailure_IEs__value),
+	offsetof(struct X2N_MobilityChangeFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_MobilityChangeFailure_IEs__value, present),
+	sizeof(((struct X2N_MobilityChangeFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_268,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_268,
+	asn_MAP_X2N_value_from_canonical_268,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_268 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_268,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_268	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_MobilityChangeFailure_IEs_265[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_266,  memb_X2N_id_constraint_265 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_MobilityChangeFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_267,  memb_X2N_criticality_constraint_265 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_MobilityChangeFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_268,
+		select_MobilityChangeFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_268,  memb_X2N_value_constraint_265 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_MobilityChangeFailure_IEs_tag2el_265[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeFailure_IEs_specs_265 = {
+	sizeof(struct X2N_MobilityChangeFailure_IEs),
+	offsetof(struct X2N_MobilityChangeFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_MobilityChangeFailure_IEs_tag2el_265,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeFailure_IEs = {
+	"MobilityChangeFailure-IEs",
+	"MobilityChangeFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265,
+	sizeof(asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265)
+		/sizeof(asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265[0]), /* 1 */
+	asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265,	/* Same as above */
+	sizeof(asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265)
+		/sizeof(asn_DEF_X2N_MobilityChangeFailure_IEs_tags_265[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MobilityChangeFailure_IEs_265,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MobilityChangeFailure_IEs_specs_265	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_272[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.PCI),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.CRNTI),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_CRNTI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CRNTI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.ShortMAC_I),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_ShortMAC_I,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ShortMAC-I"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.UE_RLF_Report_Container),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_UE_RLF_Report_Container,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-RLF-Report-Container"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.RRCConnSetupIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RRCConnSetupIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRCConnSetupIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.RRCConnReestabIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RRCConnReestabIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRCConnReestabIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs__value, choice.UE_RLF_Report_Container_for_extended_bands),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-RLF-Report-Container-for-extended-bands"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_272[] = { 0, 2, 3, 4, 7, 5, 6, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_272[] = { 0, 7, 1, 2, 3, 5, 6, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_272[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* PCI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 1 }, /* CRNTI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, -1, 0 }, /* ShortMAC-I */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* UE-RLF-Report-Container */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* UE-RLF-Report-Container-for-extended-bands */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* RRCConnSetupIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 0 }, /* RRCConnReestabIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* ECGI */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_272 = {
+	sizeof(struct X2N_RLFIndication_IEs__value),
+	offsetof(struct X2N_RLFIndication_IEs__value, _asn_ctx),
+	offsetof(struct X2N_RLFIndication_IEs__value, present),
+	sizeof(((struct X2N_RLFIndication_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_272,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_272,
+	asn_MAP_X2N_value_from_canonical_272,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_272 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_272,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_272	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RLFIndication_IEs_269[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_270,  memb_X2N_id_constraint_269 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RLFIndication_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_271,  memb_X2N_criticality_constraint_269 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_272,
+		select_RLFIndication_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_272,  memb_X2N_value_constraint_269 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RLFIndication_IEs_tags_269[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RLFIndication_IEs_tag2el_269[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RLFIndication_IEs_specs_269 = {
+	sizeof(struct X2N_RLFIndication_IEs),
+	offsetof(struct X2N_RLFIndication_IEs, _asn_ctx),
+	asn_MAP_X2N_RLFIndication_IEs_tag2el_269,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RLFIndication_IEs = {
+	"RLFIndication-IEs",
+	"RLFIndication-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RLFIndication_IEs_tags_269,
+	sizeof(asn_DEF_X2N_RLFIndication_IEs_tags_269)
+		/sizeof(asn_DEF_X2N_RLFIndication_IEs_tags_269[0]), /* 1 */
+	asn_DEF_X2N_RLFIndication_IEs_tags_269,	/* Same as above */
+	sizeof(asn_DEF_X2N_RLFIndication_IEs_tags_269)
+		/sizeof(asn_DEF_X2N_RLFIndication_IEs_tags_269[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RLFIndication_IEs_269,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RLFIndication_IEs_specs_269	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_276[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationRequest_IEs__value, choice.ServedCellsToActivate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToActivate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedCellsToActivate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_276[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedCellsToActivate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_276 = {
+	sizeof(struct X2N_CellActivationRequest_IEs__value),
+	offsetof(struct X2N_CellActivationRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_CellActivationRequest_IEs__value, present),
+	sizeof(((struct X2N_CellActivationRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_276,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_276 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_276,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_276	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationRequest_IEs_273[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_274,  memb_X2N_id_constraint_273 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellActivationRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_275,  memb_X2N_criticality_constraint_273 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_276,
+		select_CellActivationRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_276,  memb_X2N_value_constraint_273 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationRequest_IEs_tags_273[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationRequest_IEs_tag2el_273[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationRequest_IEs_specs_273 = {
+	sizeof(struct X2N_CellActivationRequest_IEs),
+	offsetof(struct X2N_CellActivationRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_CellActivationRequest_IEs_tag2el_273,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationRequest_IEs = {
+	"CellActivationRequest-IEs",
+	"CellActivationRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationRequest_IEs_tags_273,
+	sizeof(asn_DEF_X2N_CellActivationRequest_IEs_tags_273)
+		/sizeof(asn_DEF_X2N_CellActivationRequest_IEs_tags_273[0]), /* 1 */
+	asn_DEF_X2N_CellActivationRequest_IEs_tags_273,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationRequest_IEs_tags_273)
+		/sizeof(asn_DEF_X2N_CellActivationRequest_IEs_tags_273[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationRequest_IEs_273,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellActivationRequest_IEs_specs_273	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_280[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse_IEs__value, choice.ActivatedCellList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedCellList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ActivatedCellList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_280[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ActivatedCellList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_280 = {
+	sizeof(struct X2N_CellActivationResponse_IEs__value),
+	offsetof(struct X2N_CellActivationResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_CellActivationResponse_IEs__value, present),
+	sizeof(((struct X2N_CellActivationResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_280,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_280 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_280,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_280	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationResponse_IEs_277[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_278,  memb_X2N_id_constraint_277 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellActivationResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_279,  memb_X2N_criticality_constraint_277 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_280,
+		select_CellActivationResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_280,  memb_X2N_value_constraint_277 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationResponse_IEs_tags_277[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationResponse_IEs_tag2el_277[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationResponse_IEs_specs_277 = {
+	sizeof(struct X2N_CellActivationResponse_IEs),
+	offsetof(struct X2N_CellActivationResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_CellActivationResponse_IEs_tag2el_277,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationResponse_IEs = {
+	"CellActivationResponse-IEs",
+	"CellActivationResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationResponse_IEs_tags_277,
+	sizeof(asn_DEF_X2N_CellActivationResponse_IEs_tags_277)
+		/sizeof(asn_DEF_X2N_CellActivationResponse_IEs_tags_277[0]), /* 1 */
+	asn_DEF_X2N_CellActivationResponse_IEs_tags_277,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationResponse_IEs_tags_277)
+		/sizeof(asn_DEF_X2N_CellActivationResponse_IEs_tags_277[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationResponse_IEs_277,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellActivationResponse_IEs_specs_277	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_284[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_284[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_284[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_284[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_284 = {
+	sizeof(struct X2N_CellActivationFailure_IEs__value),
+	offsetof(struct X2N_CellActivationFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_CellActivationFailure_IEs__value, present),
+	sizeof(((struct X2N_CellActivationFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_284,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_284,
+	asn_MAP_X2N_value_from_canonical_284,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_284 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_284,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_284	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_CellActivationFailure_IEs_281[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_282,  memb_X2N_id_constraint_281 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_CellActivationFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_283,  memb_X2N_criticality_constraint_281 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_CellActivationFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_284,
+		select_CellActivationFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_284,  memb_X2N_value_constraint_281 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_CellActivationFailure_IEs_tags_281[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_CellActivationFailure_IEs_tag2el_281[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationFailure_IEs_specs_281 = {
+	sizeof(struct X2N_CellActivationFailure_IEs),
+	offsetof(struct X2N_CellActivationFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_CellActivationFailure_IEs_tag2el_281,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationFailure_IEs = {
+	"CellActivationFailure-IEs",
+	"CellActivationFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_CellActivationFailure_IEs_tags_281,
+	sizeof(asn_DEF_X2N_CellActivationFailure_IEs_tags_281)
+		/sizeof(asn_DEF_X2N_CellActivationFailure_IEs_tags_281[0]), /* 1 */
+	asn_DEF_X2N_CellActivationFailure_IEs_tags_281,	/* Same as above */
+	sizeof(asn_DEF_X2N_CellActivationFailure_IEs_tags_281)
+		/sizeof(asn_DEF_X2N_CellActivationFailure_IEs_tags_281[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellActivationFailure_IEs_281,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellActivationFailure_IEs_specs_281	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_288[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2Release_IEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_288[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_288 = {
+	sizeof(struct X2N_X2Release_IEs__value),
+	offsetof(struct X2N_X2Release_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2Release_IEs__value, present),
+	sizeof(((struct X2N_X2Release_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_288,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_288 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_288,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_288	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2Release_IEs_285[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2Release_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_286,  memb_X2N_id_constraint_285 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2Release_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2Release_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_287,  memb_X2N_criticality_constraint_285 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2Release_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_288,
+		select_X2Release_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_288,  memb_X2N_value_constraint_285 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2Release_IEs_tags_285[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2Release_IEs_tag2el_285[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2Release_IEs_specs_285 = {
+	sizeof(struct X2N_X2Release_IEs),
+	offsetof(struct X2N_X2Release_IEs, _asn_ctx),
+	asn_MAP_X2N_X2Release_IEs_tag2el_285,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2Release_IEs = {
+	"X2Release-IEs",
+	"X2Release-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2Release_IEs_tags_285,
+	sizeof(asn_DEF_X2N_X2Release_IEs_tags_285)
+		/sizeof(asn_DEF_X2N_X2Release_IEs_tags_285[0]), /* 1 */
+	asn_DEF_X2N_X2Release_IEs_tags_285,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2Release_IEs_tags_285)
+		/sizeof(asn_DEF_X2N_X2Release_IEs_tags_285[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2Release_IEs_285,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2Release_IEs_specs_285	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_292[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer_IEs__value, choice.RNL_Header),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RNL_Header,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RNL-Header"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer_IEs__value, choice.X2AP_Message),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_X2AP_Message,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2AP-Message"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_292[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_292[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_292[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* X2AP-Message */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* RNL-Header */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_292 = {
+	sizeof(struct X2N_X2APMessageTransfer_IEs__value),
+	offsetof(struct X2N_X2APMessageTransfer_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2APMessageTransfer_IEs__value, present),
+	sizeof(((struct X2N_X2APMessageTransfer_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_292,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_292,
+	asn_MAP_X2N_value_from_canonical_292,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_292 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_292,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_292	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2APMessageTransfer_IEs_289[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_290,  memb_X2N_id_constraint_289 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2APMessageTransfer_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_291,  memb_X2N_criticality_constraint_289 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_292,
+		select_X2APMessageTransfer_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_292,  memb_X2N_value_constraint_289 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2APMessageTransfer_IEs_tag2el_289[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2APMessageTransfer_IEs_specs_289 = {
+	sizeof(struct X2N_X2APMessageTransfer_IEs),
+	offsetof(struct X2N_X2APMessageTransfer_IEs, _asn_ctx),
+	asn_MAP_X2N_X2APMessageTransfer_IEs_tag2el_289,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2APMessageTransfer_IEs = {
+	"X2APMessageTransfer-IEs",
+	"X2APMessageTransfer-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289,
+	sizeof(asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289)
+		/sizeof(asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289[0]), /* 1 */
+	asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289)
+		/sizeof(asn_DEF_X2N_X2APMessageTransfer_IEs_tags_289[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2APMessageTransfer_IEs_289,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2APMessageTransfer_IEs_specs_289	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_296[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.UESecurityCapabilities),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UESecurityCapabilities"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.SeNBSecurityKey),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBSecurityKey,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBSecurityKey"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.UEAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEAggregateMaximumBitRate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.PLMN_Identity),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.E_RABs_ToBeAdded_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.MeNBtoSeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.CSGMembershipStatus),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_CSGMembershipStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CSGMembershipStatus"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs__value, choice.ExpectedUEBehaviour),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEBehaviour,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExpectedUEBehaviour"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_296[] = { 0, 8, 2, 4, 6, 7, 1, 3, 5, 9 };
+static const unsigned asn_MAP_X2N_value_from_canonical_296[] = { 0, 6, 2, 7, 3, 8, 4, 5, 1, 9 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_296[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* SeNBSecurityKey */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* PLMN-Identity */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, -1, 0 }, /* MeNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 0 }, /* CSGMembershipStatus */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 3 }, /* UESecurityCapabilities */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 2 }, /* UEAggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 1 }, /* E-RABs-ToBeAdded-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -3, 0 } /* ExpectedUEBehaviour */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_296 = {
+	sizeof(struct X2N_SeNBAdditionRequest_IEs__value),
+	offsetof(struct X2N_SeNBAdditionRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBAdditionRequest_IEs__value, present),
+	sizeof(((struct X2N_SeNBAdditionRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_296,
+	10,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_296,
+	asn_MAP_X2N_value_from_canonical_296,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_296 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_296,
+	10,	/* Elements count */
+	&asn_SPC_X2N_value_specs_296	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequest_IEs_293[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_294,  memb_X2N_id_constraint_293 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBAdditionRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_295,  memb_X2N_criticality_constraint_293 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_296,
+		select_SeNBAdditionRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_296,  memb_X2N_value_constraint_293 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequest_IEs_tag2el_293[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequest_IEs_specs_293 = {
+	sizeof(struct X2N_SeNBAdditionRequest_IEs),
+	offsetof(struct X2N_SeNBAdditionRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequest_IEs_tag2el_293,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequest_IEs = {
+	"SeNBAdditionRequest-IEs",
+	"SeNBAdditionRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequest_IEs_tags_293[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequest_IEs_293,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequest_IEs_specs_293	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_300[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.E_RAB_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.SeNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.TransportLayerAddress),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_TransportLayerAddress,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TransportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, choice.TunnelInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TunnelInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TunnelInformation"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_300[] = { 0, 6, 5, 3, 1, 2, 4, 7 };
+static const unsigned asn_MAP_X2N_value_from_canonical_300[] = { 0, 4, 5, 3, 6, 2, 1, 7 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_300[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, 0, 0 }, /* TransportLayerAddress */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* SeNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 3 }, /* E-RABs-Admitted-ToBeAdded-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 2 }, /* E-RAB-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -3, 0 } /* TunnelInformation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_300 = {
+	sizeof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_SeNBAdditionRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_300,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_300,
+	asn_MAP_X2N_value_from_canonical_300,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_300 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_300,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_300	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestAcknowledge_IEs_297[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_298,  memb_X2N_id_constraint_297 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBAdditionRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_299,  memb_X2N_criticality_constraint_297 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_300,
+		select_SeNBAdditionRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_300,  memb_X2N_value_constraint_297 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequestAcknowledge_IEs_tag2el_297[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestAcknowledge_IEs_specs_297 = {
+	sizeof(struct X2N_SeNBAdditionRequestAcknowledge_IEs),
+	offsetof(struct X2N_SeNBAdditionRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequestAcknowledge_IEs_tag2el_297,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs = {
+	"SeNBAdditionRequestAcknowledge-IEs",
+	"SeNBAdditionRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs_tags_297[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequestAcknowledge_IEs_297,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequestAcknowledge_IEs_specs_297	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_304[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_304[] = { 0, 3, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_304[] = { 0, 3, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_304[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_304 = {
+	sizeof(struct X2N_SeNBAdditionRequestReject_IEs__value),
+	offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBAdditionRequestReject_IEs__value, present),
+	sizeof(((struct X2N_SeNBAdditionRequestReject_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_304,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_304,
+	asn_MAP_X2N_value_from_canonical_304,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_304 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_304,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_304	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestReject_IEs_301[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_302,  memb_X2N_id_constraint_301 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBAdditionRequestReject_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_303,  memb_X2N_criticality_constraint_301 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_304,
+		select_SeNBAdditionRequestReject_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_304,  memb_X2N_value_constraint_301 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequestReject_IEs_tag2el_301[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestReject_IEs_specs_301 = {
+	sizeof(struct X2N_SeNBAdditionRequestReject_IEs),
+	offsetof(struct X2N_SeNBAdditionRequestReject_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequestReject_IEs_tag2el_301,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestReject_IEs = {
+	"SeNBAdditionRequestReject-IEs",
+	"SeNBAdditionRequestReject-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_IEs_tags_301[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequestReject_IEs_301,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequestReject_IEs_specs_301	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_308[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs__value, choice.ResponseInformationSeNBReconfComp),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_ResponseInformationSeNBReconfComp,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResponseInformationSeNBReconfComp"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_308[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_308[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_308[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* success */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_308 = {
+	sizeof(struct X2N_SeNBReconfigurationComplete_IEs__value),
+	offsetof(struct X2N_SeNBReconfigurationComplete_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBReconfigurationComplete_IEs__value, present),
+	sizeof(((struct X2N_SeNBReconfigurationComplete_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_308,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_308,
+	asn_MAP_X2N_value_from_canonical_308,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_308 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_308,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_308	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReconfigurationComplete_IEs_305[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_306,  memb_X2N_id_constraint_305 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBReconfigurationComplete_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_307,  memb_X2N_criticality_constraint_305 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_308,
+		select_SeNBReconfigurationComplete_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_308,  memb_X2N_value_constraint_305 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReconfigurationComplete_IEs_tag2el_305[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReconfigurationComplete_IEs_specs_305 = {
+	sizeof(struct X2N_SeNBReconfigurationComplete_IEs),
+	offsetof(struct X2N_SeNBReconfigurationComplete_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBReconfigurationComplete_IEs_tag2el_305,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReconfigurationComplete_IEs = {
+	"SeNBReconfigurationComplete-IEs",
+	"SeNBReconfigurationComplete-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305,
+	sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305)
+		/sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305[0]), /* 1 */
+	asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305)
+		/sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_IEs_tags_305[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReconfigurationComplete_IEs_305,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBReconfigurationComplete_IEs_specs_305	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_312[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.SCGChangeIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SCGChangeIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SCGChangeIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.PLMN_Identity),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.UE_ContextInformationSeNBModReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformationSeNBModReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextInformationSeNBModReq"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.MeNBtoSeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.CSGMembershipStatus),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_CSGMembershipStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CSGMembershipStatus"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_312[] = { 0, 7, 3, 5, 2, 6, 4, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_312[] = { 0, 7, 4, 2, 6, 3, 5, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_312[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 7, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 1 }, /* PLMN-Identity */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, -1, 0 }, /* MeNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 1 }, /* SCGChangeIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 6, -1, 0 }, /* CSGMembershipStatus */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* UE-ContextInformationSeNBModReq */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_312 = {
+	sizeof(struct X2N_SeNBModificationRequest_IEs__value),
+	offsetof(struct X2N_SeNBModificationRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationRequest_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_312,
+	11,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_312,
+	asn_MAP_X2N_value_from_canonical_312,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_312 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_312,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_312	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequest_IEs_309[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_310,  memb_X2N_id_constraint_309 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_311,  memb_X2N_criticality_constraint_309 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_312,
+		select_SeNBModificationRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_312,  memb_X2N_value_constraint_309 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequest_IEs_tag2el_309[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequest_IEs_specs_309 = {
+	sizeof(struct X2N_SeNBModificationRequest_IEs),
+	offsetof(struct X2N_SeNBModificationRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequest_IEs_tag2el_309,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequest_IEs = {
+	"SeNBModificationRequest-IEs",
+	"SeNBModificationRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309,
+	sizeof(asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequest_IEs_tags_309[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequest_IEs_309,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequest_IEs_specs_309	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_316[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_ModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-ModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeModified_ModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeModified-ModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_ModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeReleased-ModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.E_RAB_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.SeNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_316[] = { 0, 7, 5, 1, 2, 3, 4, 6 };
+static const unsigned asn_MAP_X2N_value_from_canonical_316[] = { 0, 3, 4, 5, 6, 2, 7, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_316[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 7, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 0 }, /* SeNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 4 }, /* E-RABs-Admitted-ToBeAdded-ModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 3 }, /* E-RABs-Admitted-ToBeModified-ModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 2 }, /* E-RABs-Admitted-ToBeReleased-ModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -3, 1 }, /* E-RAB-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -4, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_316 = {
+	sizeof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_316,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_316,
+	asn_MAP_X2N_value_from_canonical_316,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_316 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_316,
+	8,	/* Elements count */
+	&asn_SPC_X2N_value_specs_316	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestAcknowledge_IEs_313[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_314,  memb_X2N_id_constraint_313 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_315,  memb_X2N_criticality_constraint_313 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_316,
+		select_SeNBModificationRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_316,  memb_X2N_value_constraint_313 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequestAcknowledge_IEs_tag2el_313[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestAcknowledge_IEs_specs_313 = {
+	sizeof(struct X2N_SeNBModificationRequestAcknowledge_IEs),
+	offsetof(struct X2N_SeNBModificationRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequestAcknowledge_IEs_tag2el_313,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs = {
+	"SeNBModificationRequestAcknowledge-IEs",
+	"SeNBModificationRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313,
+	sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs_tags_313[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequestAcknowledge_IEs_313,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequestAcknowledge_IEs_specs_313	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_320[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_320[] = { 0, 3, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_320[] = { 0, 3, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_320[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_320 = {
+	sizeof(struct X2N_SeNBModificationRequestReject_IEs__value),
+	offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationRequestReject_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationRequestReject_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_320,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_320,
+	asn_MAP_X2N_value_from_canonical_320,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_320 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_320,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_320	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestReject_IEs_317[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_318,  memb_X2N_id_constraint_317 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationRequestReject_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_319,  memb_X2N_criticality_constraint_317 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_320,
+		select_SeNBModificationRequestReject_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_320,  memb_X2N_value_constraint_317 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequestReject_IEs_tag2el_317[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestReject_IEs_specs_317 = {
+	sizeof(struct X2N_SeNBModificationRequestReject_IEs),
+	offsetof(struct X2N_SeNBModificationRequestReject_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequestReject_IEs_tag2el_317,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestReject_IEs = {
+	"SeNBModificationRequestReject-IEs",
+	"SeNBModificationRequestReject-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317,
+	sizeof(asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestReject_IEs_tags_317[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequestReject_IEs_317,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequestReject_IEs_specs_317	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_324[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.SCGChangeIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SCGChangeIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SCGChangeIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.E_RABs_ToBeReleased_ModReqd),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_ModReqd,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-ModReqd"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.SeNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_324[] = { 0, 5, 4, 2, 3, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_324[] = { 0, 5, 3, 4, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_324[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SeNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* SCGChangeIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* E-RABs-ToBeReleased-ModReqd */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_324 = {
+	sizeof(struct X2N_SeNBModificationRequired_IEs__value),
+	offsetof(struct X2N_SeNBModificationRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationRequired_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_324,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_324,
+	asn_MAP_X2N_value_from_canonical_324,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_324 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_324,
+	6,	/* Elements count */
+	&asn_SPC_X2N_value_specs_324	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequired_IEs_321[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_322,  memb_X2N_id_constraint_321 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_323,  memb_X2N_criticality_constraint_321 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_324,
+		select_SeNBModificationRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_324,  memb_X2N_value_constraint_321 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequired_IEs_tag2el_321[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequired_IEs_specs_321 = {
+	sizeof(struct X2N_SeNBModificationRequired_IEs),
+	offsetof(struct X2N_SeNBModificationRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequired_IEs_tag2el_321,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequired_IEs = {
+	"SeNBModificationRequired-IEs",
+	"SeNBModificationRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321,
+	sizeof(asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequired_IEs_tags_321[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequired_IEs_321,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequired_IEs_specs_321	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_328[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs__value, choice.MeNBtoSeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_328[] = { 0, 3, 1, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_328[] = { 0, 2, 3, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_328[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* MeNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_328 = {
+	sizeof(struct X2N_SeNBModificationConfirm_IEs__value),
+	offsetof(struct X2N_SeNBModificationConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationConfirm_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_328,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_328,
+	asn_MAP_X2N_value_from_canonical_328,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_328 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_328,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_328	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationConfirm_IEs_325[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_326,  memb_X2N_id_constraint_325 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_327,  memb_X2N_criticality_constraint_325 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_328,
+		select_SeNBModificationConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_328,  memb_X2N_value_constraint_325 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationConfirm_IEs_tag2el_325[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationConfirm_IEs_specs_325 = {
+	sizeof(struct X2N_SeNBModificationConfirm_IEs),
+	offsetof(struct X2N_SeNBModificationConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationConfirm_IEs_tag2el_325,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationConfirm_IEs = {
+	"SeNBModificationConfirm-IEs",
+	"SeNBModificationConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325,
+	sizeof(asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325)
+		/sizeof(asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325)
+		/sizeof(asn_DEF_X2N_SeNBModificationConfirm_IEs_tags_325[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationConfirm_IEs_325,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationConfirm_IEs_specs_325	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_332[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs__value, choice.MeNBtoSeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_332[] = { 0, 4, 2, 3, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_332[] = { 0, 4, 2, 3, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_332[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 }, /* MeNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_332 = {
+	sizeof(struct X2N_SeNBModificationRefuse_IEs__value),
+	offsetof(struct X2N_SeNBModificationRefuse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBModificationRefuse_IEs__value, present),
+	sizeof(((struct X2N_SeNBModificationRefuse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_332,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_332,
+	asn_MAP_X2N_value_from_canonical_332,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_332 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_332,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_332	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRefuse_IEs_329[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_330,  memb_X2N_id_constraint_329 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBModificationRefuse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_331,  memb_X2N_criticality_constraint_329 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_332,
+		select_SeNBModificationRefuse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_332,  memb_X2N_value_constraint_329 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRefuse_IEs_tag2el_329[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRefuse_IEs_specs_329 = {
+	sizeof(struct X2N_SeNBModificationRefuse_IEs),
+	offsetof(struct X2N_SeNBModificationRefuse_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRefuse_IEs_tag2el_329,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRefuse_IEs = {
+	"SeNBModificationRefuse-IEs",
+	"SeNBModificationRefuse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329,
+	sizeof(asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329)
+		/sizeof(asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329)
+		/sizeof(asn_DEF_X2N_SeNBModificationRefuse_IEs_tags_329[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRefuse_IEs_329,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRefuse_IEs_specs_329	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_336[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.E_RABs_ToBeReleased_List_RelReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_List_RelReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-List-RelReq"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.UE_ContextKeptIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextKeptIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextKeptIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs__value, choice.MakeBeforeBreakIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_MakeBeforeBreakIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MakeBeforeBreakIndicator"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_336[] = { 0, 4, 3, 5, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_336[] = { 0, 5, 4, 2, 1, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_336[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 1 }, /* UE-ContextKeptIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, -1, 0 }, /* MakeBeforeBreakIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* E-RABs-ToBeReleased-List-RelReq */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_336 = {
+	sizeof(struct X2N_SeNBReleaseRequest_IEs__value),
+	offsetof(struct X2N_SeNBReleaseRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBReleaseRequest_IEs__value, present),
+	sizeof(((struct X2N_SeNBReleaseRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_336,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_336,
+	asn_MAP_X2N_value_from_canonical_336,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_336 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_336,
+	6,	/* Elements count */
+	&asn_SPC_X2N_value_specs_336	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequest_IEs_333[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_334,  memb_X2N_id_constraint_333 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBReleaseRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_335,  memb_X2N_criticality_constraint_333 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_336,
+		select_SeNBReleaseRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_336,  memb_X2N_value_constraint_333 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseRequest_IEs_tag2el_333[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequest_IEs_specs_333 = {
+	sizeof(struct X2N_SeNBReleaseRequest_IEs),
+	offsetof(struct X2N_SeNBReleaseRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseRequest_IEs_tag2el_333,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequest_IEs = {
+	"SeNBReleaseRequest-IEs",
+	"SeNBReleaseRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333,
+	sizeof(asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequest_IEs_tags_333[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseRequest_IEs_333,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseRequest_IEs_specs_333	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_340[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_340[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_340[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_340[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_340 = {
+	sizeof(struct X2N_SeNBReleaseRequired_IEs__value),
+	offsetof(struct X2N_SeNBReleaseRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBReleaseRequired_IEs__value, present),
+	sizeof(((struct X2N_SeNBReleaseRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_340,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_340,
+	asn_MAP_X2N_value_from_canonical_340,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_340 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_340,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_340	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequired_IEs_337[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_338,  memb_X2N_id_constraint_337 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBReleaseRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_339,  memb_X2N_criticality_constraint_337 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_340,
+		select_SeNBReleaseRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_340,  memb_X2N_value_constraint_337 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseRequired_IEs_tag2el_337[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequired_IEs_specs_337 = {
+	sizeof(struct X2N_SeNBReleaseRequired_IEs),
+	offsetof(struct X2N_SeNBReleaseRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseRequired_IEs_tag2el_337,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequired_IEs = {
+	"SeNBReleaseRequired-IEs",
+	"SeNBReleaseRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337,
+	sizeof(asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequired_IEs_tags_337[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseRequired_IEs_337,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseRequired_IEs_specs_337	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_344[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, choice.E_RABs_ToBeReleased_List_RelConf),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_List_RelConf,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-List-RelConf"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_344[] = { 0, 3, 1, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_344[] = { 0, 2, 3, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_344[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* E-RABs-ToBeReleased-List-RelConf */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_344 = {
+	sizeof(struct X2N_SeNBReleaseConfirm_IEs__value),
+	offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBReleaseConfirm_IEs__value, present),
+	sizeof(((struct X2N_SeNBReleaseConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_344,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_344,
+	asn_MAP_X2N_value_from_canonical_344,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_344 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_344,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_344	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseConfirm_IEs_341[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_342,  memb_X2N_id_constraint_341 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBReleaseConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_343,  memb_X2N_criticality_constraint_341 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_344,
+		select_SeNBReleaseConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_344,  memb_X2N_value_constraint_341 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseConfirm_IEs_tag2el_341[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseConfirm_IEs_specs_341 = {
+	sizeof(struct X2N_SeNBReleaseConfirm_IEs),
+	offsetof(struct X2N_SeNBReleaseConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseConfirm_IEs_tag2el_341,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseConfirm_IEs = {
+	"SeNBReleaseConfirm-IEs",
+	"SeNBReleaseConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341,
+	sizeof(asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341)
+		/sizeof(asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341)
+		/sizeof(asn_DEF_X2N_SeNBReleaseConfirm_IEs_tags_341[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseConfirm_IEs_341,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseConfirm_IEs_specs_341	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_348[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs__value, choice.E_RABs_SubjectToCounterCheck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToCounterCheck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToCounterCheck-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_348[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_348[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_348[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* E-RABs-SubjectToCounterCheck-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_348 = {
+	sizeof(struct X2N_SeNBCounterCheckRequest_IEs__value),
+	offsetof(struct X2N_SeNBCounterCheckRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SeNBCounterCheckRequest_IEs__value, present),
+	sizeof(((struct X2N_SeNBCounterCheckRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_348,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_348,
+	asn_MAP_X2N_value_from_canonical_348,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_348 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_348,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_348	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBCounterCheckRequest_IEs_345[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_346,  memb_X2N_id_constraint_345 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SeNBCounterCheckRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_347,  memb_X2N_criticality_constraint_345 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_348,
+		select_SeNBCounterCheckRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_348,  memb_X2N_value_constraint_345 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBCounterCheckRequest_IEs_tag2el_345[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBCounterCheckRequest_IEs_specs_345 = {
+	sizeof(struct X2N_SeNBCounterCheckRequest_IEs),
+	offsetof(struct X2N_SeNBCounterCheckRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SeNBCounterCheckRequest_IEs_tag2el_345,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBCounterCheckRequest_IEs = {
+	"SeNBCounterCheckRequest-IEs",
+	"SeNBCounterCheckRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345,
+	sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345)
+		/sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345[0]), /* 1 */
+	asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345)
+		/sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_IEs_tags_345[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBCounterCheckRequest_IEs_345,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SeNBCounterCheckRequest_IEs_specs_345	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_352[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest_IEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest_IEs__value, choice.X2BenefitValue),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_X2BenefitValue,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2BenefitValue"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_352[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_352[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_352[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* X2BenefitValue */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_352 = {
+	sizeof(struct X2N_X2RemovalRequest_IEs__value),
+	offsetof(struct X2N_X2RemovalRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2RemovalRequest_IEs__value, present),
+	sizeof(((struct X2N_X2RemovalRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_352,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_352,
+	asn_MAP_X2N_value_from_canonical_352,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_352 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_352,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_352	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalRequest_IEs_349[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_350,  memb_X2N_id_constraint_349 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2RemovalRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_351,  memb_X2N_criticality_constraint_349 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_352,
+		select_X2RemovalRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_352,  memb_X2N_value_constraint_349 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalRequest_IEs_tags_349[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalRequest_IEs_tag2el_349[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalRequest_IEs_specs_349 = {
+	sizeof(struct X2N_X2RemovalRequest_IEs),
+	offsetof(struct X2N_X2RemovalRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_X2RemovalRequest_IEs_tag2el_349,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalRequest_IEs = {
+	"X2RemovalRequest-IEs",
+	"X2RemovalRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalRequest_IEs_tags_349,
+	sizeof(asn_DEF_X2N_X2RemovalRequest_IEs_tags_349)
+		/sizeof(asn_DEF_X2N_X2RemovalRequest_IEs_tags_349[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalRequest_IEs_tags_349,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalRequest_IEs_tags_349)
+		/sizeof(asn_DEF_X2N_X2RemovalRequest_IEs_tags_349[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalRequest_IEs_349,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalRequest_IEs_specs_349	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_356[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse_IEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_356[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_356 = {
+	sizeof(struct X2N_X2RemovalResponse_IEs__value),
+	offsetof(struct X2N_X2RemovalResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2RemovalResponse_IEs__value, present),
+	sizeof(((struct X2N_X2RemovalResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_356,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_356 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_356,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_356	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalResponse_IEs_353[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_354,  memb_X2N_id_constraint_353 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2RemovalResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_355,  memb_X2N_criticality_constraint_353 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_356,
+		select_X2RemovalResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_356,  memb_X2N_value_constraint_353 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalResponse_IEs_tags_353[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalResponse_IEs_tag2el_353[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalResponse_IEs_specs_353 = {
+	sizeof(struct X2N_X2RemovalResponse_IEs),
+	offsetof(struct X2N_X2RemovalResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_X2RemovalResponse_IEs_tag2el_353,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalResponse_IEs = {
+	"X2RemovalResponse-IEs",
+	"X2RemovalResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalResponse_IEs_tags_353,
+	sizeof(asn_DEF_X2N_X2RemovalResponse_IEs_tags_353)
+		/sizeof(asn_DEF_X2N_X2RemovalResponse_IEs_tags_353[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalResponse_IEs_tags_353,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalResponse_IEs_tags_353)
+		/sizeof(asn_DEF_X2N_X2RemovalResponse_IEs_tags_353[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalResponse_IEs_353,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalResponse_IEs_specs_353	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_360[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_360[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_360[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_360[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_360 = {
+	sizeof(struct X2N_X2RemovalFailure_IEs__value),
+	offsetof(struct X2N_X2RemovalFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_X2RemovalFailure_IEs__value, present),
+	sizeof(((struct X2N_X2RemovalFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_360,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_360,
+	asn_MAP_X2N_value_from_canonical_360,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_360 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_360,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_360	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalFailure_IEs_357[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_358,  memb_X2N_id_constraint_357 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_X2RemovalFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_359,  memb_X2N_criticality_constraint_357 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_360,
+		select_X2RemovalFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_360,  memb_X2N_value_constraint_357 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalFailure_IEs_tags_357[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalFailure_IEs_tag2el_357[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalFailure_IEs_specs_357 = {
+	sizeof(struct X2N_X2RemovalFailure_IEs),
+	offsetof(struct X2N_X2RemovalFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_X2RemovalFailure_IEs_tag2el_357,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalFailure_IEs = {
+	"X2RemovalFailure-IEs",
+	"X2RemovalFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalFailure_IEs_tags_357,
+	sizeof(asn_DEF_X2N_X2RemovalFailure_IEs_tags_357)
+		/sizeof(asn_DEF_X2N_X2RemovalFailure_IEs_tags_357[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalFailure_IEs_tags_357,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalFailure_IEs_tags_357)
+		/sizeof(asn_DEF_X2N_X2RemovalFailure_IEs_tags_357[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalFailure_IEs_357,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalFailure_IEs_specs_357	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_364[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.ResumeID),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_ResumeID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResumeID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.ShortMAC_I),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_ShortMAC_I,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ShortMAC-I"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.EUTRANCellIdentifier),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_EUTRANCellIdentifier,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EUTRANCellIdentifier"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.CRNTI),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_CRNTI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CRNTI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, choice.PCI),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PCI"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_364[] = { 0, 1, 6, 3, 4, 5, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_364[] = { 0, 1, 6, 3, 4, 5, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_364[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* PCI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 3, 0, 2 }, /* ShortMAC-I */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 4, -1, 1 }, /* EUTRANCellIdentifier */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 5, -2, 0 }, /* CRNTI */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* non-truncated */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* truncated */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_364 = {
+	sizeof(struct X2N_RetrieveUEContextRequest_IEs__value),
+	offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_RetrieveUEContextRequest_IEs__value, present),
+	sizeof(((struct X2N_RetrieveUEContextRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_364,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_364,
+	asn_MAP_X2N_value_from_canonical_364,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_364 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_364,
+	7,	/* Elements count */
+	&asn_SPC_X2N_value_specs_364	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextRequest_IEs_361[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_362,  memb_X2N_id_constraint_361 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RetrieveUEContextRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_363,  memb_X2N_criticality_constraint_361 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_364,
+		select_RetrieveUEContextRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_364,  memb_X2N_value_constraint_361 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextRequest_IEs_tag2el_361[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextRequest_IEs_specs_361 = {
+	sizeof(struct X2N_RetrieveUEContextRequest_IEs),
+	offsetof(struct X2N_RetrieveUEContextRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextRequest_IEs_tag2el_361,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextRequest_IEs = {
+	"RetrieveUEContextRequest-IEs",
+	"RetrieveUEContextRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361,
+	sizeof(asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextRequest_IEs_tags_361[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextRequest_IEs_361,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextRequest_IEs_specs_361	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_368[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.GUMMEI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GUMMEI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GUMMEI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.UE_ContextInformationRetrieve),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformationRetrieve,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextInformationRetrieve"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.TraceActivation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TraceActivation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TraceActivation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.SRVCCOperationPossible),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SRVCCOperationPossible,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SRVCCOperationPossible"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.Masked_IMEISV),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_Masked_IMEISV,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Masked-IMEISV"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.ExpectedUEBehaviour),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEBehaviour,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExpectedUEBehaviour"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.ProSeAuthorized),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProSeAuthorized,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ProSeAuthorized"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.V2XServicesAuthorized),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_V2XServicesAuthorized,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"V2XServicesAuthorized"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.AerialUEsubscriptionInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_AerialUEsubscriptionInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"AerialUEsubscriptionInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, choice.Subscription_Based_UE_DifferentiationInfo),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Subscription-Based-UE-DifferentiationInfo"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_368[] = { 0, 1, 6, 5, 11, 2, 3, 4, 7, 8, 9, 10, 12 };
+static const unsigned asn_MAP_X2N_value_from_canonical_368[] = { 0, 1, 5, 6, 7, 3, 2, 8, 9, 10, 11, 4, 12 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_368[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 6, 0, 0 }, /* Masked-IMEISV */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* SRVCCOperationPossible */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, -1, 0 }, /* AerialUEsubscriptionInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 7 }, /* GUMMEI */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 6 }, /* UE-ContextInformationRetrieve */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 5 }, /* TraceActivation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -3, 4 }, /* ExpectedUEBehaviour */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -4, 3 }, /* ProSeAuthorized */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -5, 2 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -6, 1 }, /* V2XServicesAuthorized */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -7, 0 } /* Subscription-Based-UE-DifferentiationInfo */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_368 = {
+	sizeof(struct X2N_RetrieveUEContextResponse_IEs__value),
+	offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_RetrieveUEContextResponse_IEs__value, present),
+	sizeof(((struct X2N_RetrieveUEContextResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_368,
+	13,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_368,
+	asn_MAP_X2N_value_from_canonical_368,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_368 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_368,
+	13,	/* Elements count */
+	&asn_SPC_X2N_value_specs_368	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextResponse_IEs_365[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_366,  memb_X2N_id_constraint_365 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RetrieveUEContextResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_367,  memb_X2N_criticality_constraint_365 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_368,
+		select_RetrieveUEContextResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_368,  memb_X2N_value_constraint_365 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextResponse_IEs_tag2el_365[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextResponse_IEs_specs_365 = {
+	sizeof(struct X2N_RetrieveUEContextResponse_IEs),
+	offsetof(struct X2N_RetrieveUEContextResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextResponse_IEs_tag2el_365,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextResponse_IEs = {
+	"RetrieveUEContextResponse-IEs",
+	"RetrieveUEContextResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365,
+	sizeof(asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextResponse_IEs_tags_365[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextResponse_IEs_365,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextResponse_IEs_specs_365	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_372[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_372[] = { 0, 1, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_372[] = { 0, 1, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_372[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_372 = {
+	sizeof(struct X2N_RetrieveUEContextFailure_IEs__value),
+	offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_RetrieveUEContextFailure_IEs__value, present),
+	sizeof(((struct X2N_RetrieveUEContextFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_372,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_372,
+	asn_MAP_X2N_value_from_canonical_372,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_372 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_372,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_372	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextFailure_IEs_369[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_370,  memb_X2N_id_constraint_369 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RetrieveUEContextFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_371,  memb_X2N_criticality_constraint_369 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_372,
+		select_RetrieveUEContextFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_372,  memb_X2N_value_constraint_369 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextFailure_IEs_tag2el_369[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextFailure_IEs_specs_369 = {
+	sizeof(struct X2N_RetrieveUEContextFailure_IEs),
+	offsetof(struct X2N_RetrieveUEContextFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextFailure_IEs_tag2el_369,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextFailure_IEs = {
+	"RetrieveUEContextFailure-IEs",
+	"RetrieveUEContextFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369,
+	sizeof(asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextFailure_IEs_tags_369[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextFailure_IEs_369,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextFailure_IEs_specs_369	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_376[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.NRUESecurityCapabilities),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRUESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"NRUESecurityCapabilities"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.SgNBSecurityKey),
+		(ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBSecurityKey,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBSecurityKey"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.UEAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEAggregateMaximumBitRate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.PLMN_Identity),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.HandoverRestrictionList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRestrictionList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverRestrictionList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.E_RABs_ToBeAdded_SgNBAddReqList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReqList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeAdded-SgNBAddReqList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.MeNBtoSgNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSgNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.ExpectedUEBehaviour),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ExpectedUEBehaviour,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ExpectedUEBehaviour"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.SplitSRBs),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRBs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SplitSRBs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.MeNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBResourceCoordinationInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.SGNB_Addition_Trigger_Ind),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SGNB_Addition_Trigger_Ind,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SGNB-Addition-Trigger-Ind"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.SubscriberProfileIDforRFP),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SubscriberProfileIDforRFP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SubscriberProfileIDforRFP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs__value, choice.ECGI),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ECGI"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_376[] = { 0, 8, 10, 14, 2, 4, 7, 11, 13, 1, 3, 5, 6, 9, 12, 15 };
+static const unsigned asn_MAP_X2N_value_from_canonical_376[] = { 0, 9, 4, 10, 5, 11, 12, 6, 1, 13, 2, 7, 14, 8, 3, 15 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_376[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 3 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -1, 2 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 10, -2, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 14, -3, 0 }, /* SubscriberProfileIDforRFP */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* SgNBSecurityKey */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 1 }, /* PLMN-Identity */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* MeNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, 0, 1 }, /* SplitSRBs */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 13, -1, 0 }, /* SGNB-Addition-Trigger-Ind */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 6 }, /* NRUESecurityCapabilities */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 5 }, /* UEAggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 4 }, /* HandoverRestrictionList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -3, 3 }, /* E-RABs-ToBeAdded-SgNBAddReqList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -4, 2 }, /* ExpectedUEBehaviour */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -5, 1 }, /* MeNBResourceCoordinationInformation */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -6, 0 } /* ECGI */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_376 = {
+	sizeof(struct X2N_SgNBAdditionRequest_IEs__value),
+	offsetof(struct X2N_SgNBAdditionRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBAdditionRequest_IEs__value, present),
+	sizeof(((struct X2N_SgNBAdditionRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_376,
+	16,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_376,
+	asn_MAP_X2N_value_from_canonical_376,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_376 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_376,
+	16,	/* Elements count */
+	&asn_SPC_X2N_value_specs_376	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequest_IEs_373[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_374,  memb_X2N_id_constraint_373 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBAdditionRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_375,  memb_X2N_criticality_constraint_373 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_376,
+		select_SgNBAdditionRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_376,  memb_X2N_value_constraint_373 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequest_IEs_tag2el_373[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequest_IEs_specs_373 = {
+	sizeof(struct X2N_SgNBAdditionRequest_IEs),
+	offsetof(struct X2N_SgNBAdditionRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequest_IEs_tag2el_373,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequest_IEs = {
+	"SgNBAdditionRequest-IEs",
+	"SgNBAdditionRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequest_IEs_tags_373[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequest_IEs_373,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequest_IEs_specs_373	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_380[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.E_RAB_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.SplitSRBs),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRBs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SplitSRBs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.SgNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBResourceCoordinationInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, choice.RRC_Config_Ind),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RRC_Config_Ind,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRC-Config-Ind"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_380[] = { 0, 1, 6, 4, 7, 9, 2, 3, 5, 8 };
+static const unsigned asn_MAP_X2N_value_from_canonical_380[] = { 0, 1, 6, 7, 3, 8, 2, 4, 9, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_380[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SgNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 7, 0, 1 }, /* SplitSRBs */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 9, -1, 0 }, /* RRC-Config-Ind */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 3 }, /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 2 }, /* E-RAB-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -2, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -3, 0 } /* SgNBResourceCoordinationInformation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_380 = {
+	sizeof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_SgNBAdditionRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_380,
+	10,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_380,
+	asn_MAP_X2N_value_from_canonical_380,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_380 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_380,
+	10,	/* Elements count */
+	&asn_SPC_X2N_value_specs_380	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestAcknowledge_IEs_377[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_378,  memb_X2N_id_constraint_377 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBAdditionRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_379,  memb_X2N_criticality_constraint_377 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_380,
+		select_SgNBAdditionRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_380,  memb_X2N_value_constraint_377 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequestAcknowledge_IEs_tag2el_377[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestAcknowledge_IEs_specs_377 = {
+	sizeof(struct X2N_SgNBAdditionRequestAcknowledge_IEs),
+	offsetof(struct X2N_SgNBAdditionRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequestAcknowledge_IEs_tag2el_377,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs = {
+	"SgNBAdditionRequestAcknowledge-IEs",
+	"SgNBAdditionRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs_tags_377[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequestAcknowledge_IEs_377,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequestAcknowledge_IEs_specs_377	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_384[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_384[] = { 0, 1, 4, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_384[] = { 0, 1, 4, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_384[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_384 = {
+	sizeof(struct X2N_SgNBAdditionRequestReject_IEs__value),
+	offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBAdditionRequestReject_IEs__value, present),
+	sizeof(((struct X2N_SgNBAdditionRequestReject_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_384,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_384,
+	asn_MAP_X2N_value_from_canonical_384,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_384 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_384,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_384	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestReject_IEs_381[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_382,  memb_X2N_id_constraint_381 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBAdditionRequestReject_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_383,  memb_X2N_criticality_constraint_381 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_384,
+		select_SgNBAdditionRequestReject_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_384,  memb_X2N_value_constraint_381 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequestReject_IEs_tag2el_381[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestReject_IEs_specs_381 = {
+	sizeof(struct X2N_SgNBAdditionRequestReject_IEs),
+	offsetof(struct X2N_SgNBAdditionRequestReject_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequestReject_IEs_tag2el_381,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestReject_IEs = {
+	"SgNBAdditionRequestReject-IEs",
+	"SgNBAdditionRequestReject-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_IEs_tags_381[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequestReject_IEs_381,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequestReject_IEs_specs_381	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_388[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, choice.ResponseInformationSgNBReconfComp),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_ResponseInformationSgNBReconfComp,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResponseInformationSgNBReconfComp"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_388[] = { 0, 1, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_388[] = { 0, 1, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_388[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* success-SgNBReconfComp */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* reject-by-MeNB-SgNBReconfComp */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_388 = {
+	sizeof(struct X2N_SgNBReconfigurationComplete_IEs__value),
+	offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReconfigurationComplete_IEs__value, present),
+	sizeof(((struct X2N_SgNBReconfigurationComplete_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_388,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_388,
+	asn_MAP_X2N_value_from_canonical_388,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_388 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_388,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_388	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReconfigurationComplete_IEs_385[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_386,  memb_X2N_id_constraint_385 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReconfigurationComplete_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_387,  memb_X2N_criticality_constraint_385 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_388,
+		select_SgNBReconfigurationComplete_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_388,  memb_X2N_value_constraint_385 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReconfigurationComplete_IEs_tag2el_385[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReconfigurationComplete_IEs_specs_385 = {
+	sizeof(struct X2N_SgNBReconfigurationComplete_IEs),
+	offsetof(struct X2N_SgNBReconfigurationComplete_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReconfigurationComplete_IEs_tag2el_385,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReconfigurationComplete_IEs = {
+	"SgNBReconfigurationComplete-IEs",
+	"SgNBReconfigurationComplete-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385,
+	sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385)
+		/sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385[0]), /* 1 */
+	asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385)
+		/sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_IEs_tags_385[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReconfigurationComplete_IEs_385,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReconfigurationComplete_IEs_specs_385	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_392[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.PLMN_Identity),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.HandoverRestrictionList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRestrictionList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverRestrictionList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.SCGConfigurationQuery),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SCGConfigurationQuery,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SCGConfigurationQuery"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.UE_ContextInformation_SgNBModReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextInformation_SgNBModReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextInformation-SgNBModReq"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.MeNBtoSgNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSgNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.MeNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBResourceCoordinationInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs__value, choice.SplitSRBs),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRBs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SplitSRBs"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_392[] = { 0, 1, 8, 3, 7, 5, 10, 4, 6, 9, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_392[] = { 0, 1, 10, 3, 7, 5, 8, 4, 2, 9, 6 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_392[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 1 }, /* PLMN-Identity */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 7, -1, 0 }, /* MeNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 5, 0, 1 }, /* SCGConfigurationQuery */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 10, -1, 0 }, /* SplitSRBs */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 2 }, /* HandoverRestrictionList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -1, 1 }, /* UE-ContextInformation-SgNBModReq */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -2, 0 }, /* MeNBResourceCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_392 = {
+	sizeof(struct X2N_SgNBModificationRequest_IEs__value),
+	offsetof(struct X2N_SgNBModificationRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationRequest_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_392,
+	14,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_392,
+	asn_MAP_X2N_value_from_canonical_392,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_392 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_392,
+	11,	/* Elements count */
+	&asn_SPC_X2N_value_specs_392	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequest_IEs_389[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_390,  memb_X2N_id_constraint_389 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_391,  memb_X2N_criticality_constraint_389 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_392,
+		select_SgNBModificationRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_392,  memb_X2N_value_constraint_389 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequest_IEs_tag2el_389[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequest_IEs_specs_389 = {
+	sizeof(struct X2N_SgNBModificationRequest_IEs),
+	offsetof(struct X2N_SgNBModificationRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequest_IEs_tag2el_389,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequest_IEs = {
+	"SgNBModificationRequest-IEs",
+	"SgNBModificationRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389,
+	sizeof(asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequest_IEs_tags_389[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequest_IEs_389,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequest_IEs_specs_389	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_396[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeAdded_SgNBModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeAdded-SgNBModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeModified_SgNBModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeModified-SgNBModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBModAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeReleased-SgNBModAckList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.E_RAB_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RAB_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RAB-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.SgNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.SgNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBResourceCoordinationInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.SplitSRBs),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRBs,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SplitSRBs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, choice.RRC_Config_Ind),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RRC_Config_Ind,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRC-Config-Ind"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_396[] = { 0, 1, 8, 6, 10, 11, 2, 3, 4, 5, 7, 9 };
+static const unsigned asn_MAP_X2N_value_from_canonical_396[] = { 0, 1, 6, 7, 8, 9, 3, 10, 2, 11, 4, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_396[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 8, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, 0, 0 }, /* SgNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 10, 0, 1 }, /* SplitSRBs */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 11, -1, 0 }, /* RRC-Config-Ind */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 5 }, /* E-RABs-Admitted-ToBeAdded-SgNBModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 4 }, /* E-RABs-Admitted-ToBeModified-SgNBModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -2, 3 }, /* E-RABs-Admitted-ToBeReleased-SgNBModAckList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -3, 2 }, /* E-RAB-List */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -4, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -5, 0 } /* SgNBResourceCoordinationInformation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_396 = {
+	sizeof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_396,
+	12,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_396,
+	asn_MAP_X2N_value_from_canonical_396,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_396 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_396,
+	12,	/* Elements count */
+	&asn_SPC_X2N_value_specs_396	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestAcknowledge_IEs_393[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_394,  memb_X2N_id_constraint_393 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_395,  memb_X2N_criticality_constraint_393 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_396,
+		select_SgNBModificationRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_396,  memb_X2N_value_constraint_393 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequestAcknowledge_IEs_tag2el_393[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestAcknowledge_IEs_specs_393 = {
+	sizeof(struct X2N_SgNBModificationRequestAcknowledge_IEs),
+	offsetof(struct X2N_SgNBModificationRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequestAcknowledge_IEs_tag2el_393,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs = {
+	"SgNBModificationRequestAcknowledge-IEs",
+	"SgNBModificationRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393,
+	sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs_tags_393[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequestAcknowledge_IEs_393,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequestAcknowledge_IEs_specs_393	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_400[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_400[] = { 0, 1, 4, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_400[] = { 0, 1, 4, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_400[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_400 = {
+	sizeof(struct X2N_SgNBModificationRequestReject_IEs__value),
+	offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationRequestReject_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationRequestReject_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_400,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_400,
+	asn_MAP_X2N_value_from_canonical_400,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_400 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_400,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_400	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestReject_IEs_397[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_398,  memb_X2N_id_constraint_397 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationRequestReject_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_399,  memb_X2N_criticality_constraint_397 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_400,
+		select_SgNBModificationRequestReject_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_400,  memb_X2N_value_constraint_397 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequestReject_IEs_tag2el_397[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestReject_IEs_specs_397 = {
+	sizeof(struct X2N_SgNBModificationRequestReject_IEs),
+	offsetof(struct X2N_SgNBModificationRequestReject_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequestReject_IEs_tag2el_397,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestReject_IEs = {
+	"SgNBModificationRequestReject-IEs",
+	"SgNBModificationRequestReject-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397,
+	sizeof(asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestReject_IEs_tags_397[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequestReject_IEs_397,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequestReject_IEs_specs_397	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_404[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.PDCPChangeIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_PDCPChangeIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"PDCPChangeIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.E_RABs_ToBeReleased_SgNBModReqdList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqdList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBModReqdList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.SgNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.E_RABs_ToBeModified_SgNBModReqdList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqdList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeModified-SgNBModReqdList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.SgNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBResourceCoordinationInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs__value, choice.RRC_Config_Ind),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_RRC_Config_Ind,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RRC-Config-Ind"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_404[] = { 0, 1, 6, 5, 3, 9, 4, 7, 8, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_404[] = { 0, 1, 9, 4, 6, 3, 2, 7, 8, 5 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_404[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 5, 0, 0 }, /* SgNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 3, 0, 1 }, /* PDCPChangeIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 9, -1, 0 }, /* RRC-Config-Ind */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 2 }, /* E-RABs-ToBeReleased-SgNBModReqdList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -1, 1 }, /* E-RABs-ToBeModified-SgNBModReqdList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -2, 0 }, /* SgNBResourceCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_404 = {
+	sizeof(struct X2N_SgNBModificationRequired_IEs__value),
+	offsetof(struct X2N_SgNBModificationRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationRequired_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_404,
+	13,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_404,
+	asn_MAP_X2N_value_from_canonical_404,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_404 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_404,
+	10,	/* Elements count */
+	&asn_SPC_X2N_value_specs_404	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequired_IEs_401[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_402,  memb_X2N_id_constraint_401 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_403,  memb_X2N_criticality_constraint_401 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_404,
+		select_SgNBModificationRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_404,  memb_X2N_value_constraint_401 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequired_IEs_tag2el_401[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequired_IEs_specs_401 = {
+	sizeof(struct X2N_SgNBModificationRequired_IEs),
+	offsetof(struct X2N_SgNBModificationRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequired_IEs_tag2el_401,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequired_IEs = {
+	"SgNBModificationRequired-IEs",
+	"SgNBModificationRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401,
+	sizeof(asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequired_IEs_tags_401[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequired_IEs_401,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequired_IEs_specs_401	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_408[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.E_RABs_AdmittedToBeModified_SgNBModConfList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConfList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-AdmittedToBeModified-SgNBModConfList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.MeNBtoSgNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSgNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs__value, choice.MeNBResourceCoordinationInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBResourceCoordinationInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBResourceCoordinationInformation"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_408[] = { 0, 1, 5, 3, 2, 4, 6 };
+static const unsigned asn_MAP_X2N_value_from_canonical_408[] = { 0, 1, 4, 3, 5, 2, 6 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_408[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* MeNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 2 }, /* E-RABs-AdmittedToBeModified-SgNBModConfList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -2, 0 } /* MeNBResourceCoordinationInformation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_408 = {
+	sizeof(struct X2N_SgNBModificationConfirm_IEs__value),
+	offsetof(struct X2N_SgNBModificationConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationConfirm_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_408,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_408,
+	asn_MAP_X2N_value_from_canonical_408,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_408 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_408,
+	7,	/* Elements count */
+	&asn_SPC_X2N_value_specs_408	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationConfirm_IEs_405[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_406,  memb_X2N_id_constraint_405 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_407,  memb_X2N_criticality_constraint_405 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_408,
+		select_SgNBModificationConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_408,  memb_X2N_value_constraint_405 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationConfirm_IEs_tag2el_405[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationConfirm_IEs_specs_405 = {
+	sizeof(struct X2N_SgNBModificationConfirm_IEs),
+	offsetof(struct X2N_SgNBModificationConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationConfirm_IEs_tag2el_405,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationConfirm_IEs = {
+	"SgNBModificationConfirm-IEs",
+	"SgNBModificationConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405,
+	sizeof(asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405)
+		/sizeof(asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405)
+		/sizeof(asn_DEF_X2N_SgNBModificationConfirm_IEs_tags_405[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationConfirm_IEs_405,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationConfirm_IEs_specs_405	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_412[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.MeNBtoSgNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSgNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_412[] = { 0, 1, 5, 3, 4, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_412[] = { 0, 1, 5, 3, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_412[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* MeNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_412 = {
+	sizeof(struct X2N_SgNBModificationRefuse_IEs__value),
+	offsetof(struct X2N_SgNBModificationRefuse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBModificationRefuse_IEs__value, present),
+	sizeof(((struct X2N_SgNBModificationRefuse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_412,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_412,
+	asn_MAP_X2N_value_from_canonical_412,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_412 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_412,
+	6,	/* Elements count */
+	&asn_SPC_X2N_value_specs_412	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRefuse_IEs_409[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_410,  memb_X2N_id_constraint_409 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBModificationRefuse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_411,  memb_X2N_criticality_constraint_409 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_412,
+		select_SgNBModificationRefuse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_412,  memb_X2N_value_constraint_409 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRefuse_IEs_tag2el_409[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRefuse_IEs_specs_409 = {
+	sizeof(struct X2N_SgNBModificationRefuse_IEs),
+	offsetof(struct X2N_SgNBModificationRefuse_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRefuse_IEs_tag2el_409,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRefuse_IEs = {
+	"SgNBModificationRefuse-IEs",
+	"SgNBModificationRefuse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409,
+	sizeof(asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409)
+		/sizeof(asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409)
+		/sizeof(asn_DEF_X2N_SgNBModificationRefuse_IEs_tags_409[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRefuse_IEs_409,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRefuse_IEs_specs_409	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_416[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelReqList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.UE_ContextKeptIndicator),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_UE_ContextKeptIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-ContextKeptIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs__value, choice.MeNBtoSgNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MeNBtoSgNBContainer"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_416[] = { 0, 1, 5, 6, 4, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_416[] = { 0, 1, 6, 5, 4, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_416[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 6, 0, 0 }, /* MeNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* UE-ContextKeptIndicator */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* E-RABs-ToBeReleased-SgNBRelReqList */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_416 = {
+	sizeof(struct X2N_SgNBReleaseRequest_IEs__value),
+	offsetof(struct X2N_SgNBReleaseRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReleaseRequest_IEs__value, present),
+	sizeof(((struct X2N_SgNBReleaseRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_416,
+	10,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_416,
+	asn_MAP_X2N_value_from_canonical_416,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_416 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_416,
+	7,	/* Elements count */
+	&asn_SPC_X2N_value_specs_416	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequest_IEs_413[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_414,  memb_X2N_id_constraint_413 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReleaseRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_415,  memb_X2N_criticality_constraint_413 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_416,
+		select_SgNBReleaseRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_416,  memb_X2N_value_constraint_413 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequest_IEs_tag2el_413[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequest_IEs_specs_413 = {
+	sizeof(struct X2N_SgNBReleaseRequest_IEs),
+	offsetof(struct X2N_SgNBReleaseRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequest_IEs_tag2el_413,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequest_IEs = {
+	"SgNBReleaseRequest-IEs",
+	"SgNBReleaseRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequest_IEs_tags_413[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequest_IEs_413,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequest_IEs_specs_413	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_420[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, choice.E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_420[] = { 0, 1, 3, 2, 4 };
+static const unsigned asn_MAP_X2N_value_from_canonical_420[] = { 0, 1, 3, 2, 4 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_420[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -1, 0 } /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_420 = {
+	sizeof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value),
+	offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_SgNBReleaseRequestAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_420,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_420,
+	asn_MAP_X2N_value_from_canonical_420,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_420 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_420,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_420	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestAcknowledge_IEs_417[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_418,  memb_X2N_id_constraint_417 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReleaseRequestAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_419,  memb_X2N_criticality_constraint_417 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_420,
+		select_SgNBReleaseRequestAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_420,  memb_X2N_value_constraint_417 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequestAcknowledge_IEs_tag2el_417[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestAcknowledge_IEs_specs_417 = {
+	sizeof(struct X2N_SgNBReleaseRequestAcknowledge_IEs),
+	offsetof(struct X2N_SgNBReleaseRequestAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequestAcknowledge_IEs_tag2el_417,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs = {
+	"SgNBReleaseRequestAcknowledge-IEs",
+	"SgNBReleaseRequestAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs_tags_417[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequestAcknowledge_IEs_417,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequestAcknowledge_IEs_specs_417	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_424[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_424[] = { 0, 1, 4, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_424[] = { 0, 1, 4, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_424[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_424 = {
+	sizeof(struct X2N_SgNBReleaseRequestReject_IEs__value),
+	offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReleaseRequestReject_IEs__value, present),
+	sizeof(((struct X2N_SgNBReleaseRequestReject_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_424,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_424,
+	asn_MAP_X2N_value_from_canonical_424,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_424 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_424,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_424	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestReject_IEs_421[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_422,  memb_X2N_id_constraint_421 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReleaseRequestReject_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_423,  memb_X2N_criticality_constraint_421 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_424,
+		select_SgNBReleaseRequestReject_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_424,  memb_X2N_value_constraint_421 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequestReject_IEs_tag2el_421[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestReject_IEs_specs_421 = {
+	sizeof(struct X2N_SgNBReleaseRequestReject_IEs),
+	offsetof(struct X2N_SgNBReleaseRequestReject_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequestReject_IEs_tag2el_421,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestReject_IEs = {
+	"SgNBReleaseRequestReject-IEs",
+	"SgNBReleaseRequestReject-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_IEs_tags_421[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequestReject_IEs_421,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequestReject_IEs_specs_421	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_428[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelReqdList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqdList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelReqdList"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_428[] = { 0, 1, 3, 4, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_428[] = { 0, 1, 4, 2, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_428[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, 0, 0 }, /* E-RABs-ToBeReleased-SgNBRelReqdList */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_428 = {
+	sizeof(struct X2N_SgNBReleaseRequired_IEs__value),
+	offsetof(struct X2N_SgNBReleaseRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReleaseRequired_IEs__value, present),
+	sizeof(((struct X2N_SgNBReleaseRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_428,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_428,
+	asn_MAP_X2N_value_from_canonical_428,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_428 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_428,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_428	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequired_IEs_425[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_426,  memb_X2N_id_constraint_425 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReleaseRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_427,  memb_X2N_criticality_constraint_425 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_428,
+		select_SgNBReleaseRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_428,  memb_X2N_value_constraint_425 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequired_IEs_tag2el_425[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequired_IEs_specs_425 = {
+	sizeof(struct X2N_SgNBReleaseRequired_IEs),
+	offsetof(struct X2N_SgNBReleaseRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequired_IEs_tag2el_425,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequired_IEs = {
+	"SgNBReleaseRequired-IEs",
+	"SgNBReleaseRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequired_IEs_tags_425[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequired_IEs_425,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequired_IEs_specs_425	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_432[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, choice.E_RABs_ToBeReleased_SgNBRelConfList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConfList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBRelConfList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_432[] = { 0, 1, 4, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_432[] = { 0, 1, 3, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_432[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* E-RABs-ToBeReleased-SgNBRelConfList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_432 = {
+	sizeof(struct X2N_SgNBReleaseConfirm_IEs__value),
+	offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBReleaseConfirm_IEs__value, present),
+	sizeof(((struct X2N_SgNBReleaseConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_432,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_432,
+	asn_MAP_X2N_value_from_canonical_432,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_432 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_432,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_432	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseConfirm_IEs_429[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_430,  memb_X2N_id_constraint_429 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBReleaseConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_431,  memb_X2N_criticality_constraint_429 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_432,
+		select_SgNBReleaseConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_432,  memb_X2N_value_constraint_429 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseConfirm_IEs_tag2el_429[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseConfirm_IEs_specs_429 = {
+	sizeof(struct X2N_SgNBReleaseConfirm_IEs),
+	offsetof(struct X2N_SgNBReleaseConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseConfirm_IEs_tag2el_429,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseConfirm_IEs = {
+	"SgNBReleaseConfirm-IEs",
+	"SgNBReleaseConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429,
+	sizeof(asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429)
+		/sizeof(asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429)
+		/sizeof(asn_DEF_X2N_SgNBReleaseConfirm_IEs_tags_429[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseConfirm_IEs_429,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseConfirm_IEs_specs_429	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_436[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, choice.E_RABs_SubjectToSgNBCounterCheck_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-SubjectToSgNBCounterCheck-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_436[] = { 0, 1, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_436[] = { 0, 1, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_436[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* E-RABs-SubjectToSgNBCounterCheck-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_436 = {
+	sizeof(struct X2N_SgNBCounterCheckRequest_IEs__value),
+	offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBCounterCheckRequest_IEs__value, present),
+	sizeof(((struct X2N_SgNBCounterCheckRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_436,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_436,
+	asn_MAP_X2N_value_from_canonical_436,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_436 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_436,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_436	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBCounterCheckRequest_IEs_433[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_434,  memb_X2N_id_constraint_433 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBCounterCheckRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_435,  memb_X2N_criticality_constraint_433 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_436,
+		select_SgNBCounterCheckRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_436,  memb_X2N_value_constraint_433 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBCounterCheckRequest_IEs_tag2el_433[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBCounterCheckRequest_IEs_specs_433 = {
+	sizeof(struct X2N_SgNBCounterCheckRequest_IEs),
+	offsetof(struct X2N_SgNBCounterCheckRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBCounterCheckRequest_IEs_tag2el_433,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCounterCheckRequest_IEs = {
+	"SgNBCounterCheckRequest-IEs",
+	"SgNBCounterCheckRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433,
+	sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433)
+		/sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433[0]), /* 1 */
+	asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433)
+		/sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_IEs_tags_433[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBCounterCheckRequest_IEs_433,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBCounterCheckRequest_IEs_specs_433	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_440[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.GlobalGNB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalGNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.SgNBtoMeNBContainer),
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBtoMeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBtoMeNBContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_440[] = { 0, 1, 5, 4, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_440[] = { 0, 1, 4, 5, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_440[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 5, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 4, 0, 0 }, /* SgNBtoMeNBContainer */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* GlobalGNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 3, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_440 = {
+	sizeof(struct X2N_SgNBChangeRequired_IEs__value),
+	offsetof(struct X2N_SgNBChangeRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBChangeRequired_IEs__value, present),
+	sizeof(((struct X2N_SgNBChangeRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_440,
+	9,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_440,
+	asn_MAP_X2N_value_from_canonical_440,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_440 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_440,
+	6,	/* Elements count */
+	&asn_SPC_X2N_value_specs_440	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRequired_IEs_437[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_438,  memb_X2N_id_constraint_437 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBChangeRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_439,  memb_X2N_criticality_constraint_437 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_440,
+		select_SgNBChangeRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_440,  memb_X2N_value_constraint_437 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeRequired_IEs_tag2el_437[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRequired_IEs_specs_437 = {
+	sizeof(struct X2N_SgNBChangeRequired_IEs),
+	offsetof(struct X2N_SgNBChangeRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeRequired_IEs_tag2el_437,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRequired_IEs = {
+	"SgNBChangeRequired-IEs",
+	"SgNBChangeRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437,
+	sizeof(asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437)
+		/sizeof(asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437)
+		/sizeof(asn_DEF_X2N_SgNBChangeRequired_IEs_tags_437[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeRequired_IEs_437,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeRequired_IEs_specs_437	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_444[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs__value, choice.E_RABs_ToBeReleased_SgNBChaConfList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConfList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-ToBeReleased-SgNBChaConfList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_444[] = { 0, 1, 4, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_444[] = { 0, 1, 3, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_444[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* E-RABs-ToBeReleased-SgNBChaConfList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_444 = {
+	sizeof(struct X2N_SgNBChangeConfirm_IEs__value),
+	offsetof(struct X2N_SgNBChangeConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBChangeConfirm_IEs__value, present),
+	sizeof(((struct X2N_SgNBChangeConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_444,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_444,
+	asn_MAP_X2N_value_from_canonical_444,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_444 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_444,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_444	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeConfirm_IEs_441[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_442,  memb_X2N_id_constraint_441 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBChangeConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_443,  memb_X2N_criticality_constraint_441 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_444,
+		select_SgNBChangeConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_444,  memb_X2N_value_constraint_441 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeConfirm_IEs_tag2el_441[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeConfirm_IEs_specs_441 = {
+	sizeof(struct X2N_SgNBChangeConfirm_IEs),
+	offsetof(struct X2N_SgNBChangeConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeConfirm_IEs_tag2el_441,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeConfirm_IEs = {
+	"SgNBChangeConfirm-IEs",
+	"SgNBChangeConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441,
+	sizeof(asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441)
+		/sizeof(asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441)
+		/sizeof(asn_DEF_X2N_SgNBChangeConfirm_IEs_tags_441[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeConfirm_IEs_441,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeConfirm_IEs_specs_441	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_448[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs__value, choice.SplitSRB),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SplitSRB,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SplitSRB"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs__value, choice.UENRMeasurement),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UENRMeasurement,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UENRMeasurement"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_448[] = { 0, 1, 4, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_448[] = { 0, 1, 3, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_448[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 1 }, /* SplitSRB */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -1, 0 } /* UENRMeasurement */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_448 = {
+	sizeof(struct X2N_RRCTransfer_IEs__value),
+	offsetof(struct X2N_RRCTransfer_IEs__value, _asn_ctx),
+	offsetof(struct X2N_RRCTransfer_IEs__value, present),
+	sizeof(((struct X2N_RRCTransfer_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_448,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_448,
+	asn_MAP_X2N_value_from_canonical_448,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_448 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_448,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_448	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RRCTransfer_IEs_445[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_446,  memb_X2N_id_constraint_445 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_RRCTransfer_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_447,  memb_X2N_criticality_constraint_445 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_448,
+		select_RRCTransfer_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_448,  memb_X2N_value_constraint_445 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RRCTransfer_IEs_tags_445[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RRCTransfer_IEs_tag2el_445[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RRCTransfer_IEs_specs_445 = {
+	sizeof(struct X2N_RRCTransfer_IEs),
+	offsetof(struct X2N_RRCTransfer_IEs, _asn_ctx),
+	asn_MAP_X2N_RRCTransfer_IEs_tag2el_445,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRCTransfer_IEs = {
+	"RRCTransfer-IEs",
+	"RRCTransfer-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RRCTransfer_IEs_tags_445,
+	sizeof(asn_DEF_X2N_RRCTransfer_IEs_tags_445)
+		/sizeof(asn_DEF_X2N_RRCTransfer_IEs_tags_445[0]), /* 1 */
+	asn_DEF_X2N_RRCTransfer_IEs_tags_445,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRCTransfer_IEs_tags_445)
+		/sizeof(asn_DEF_X2N_RRCTransfer_IEs_tags_445[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RRCTransfer_IEs_445,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RRCTransfer_IEs_specs_445	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_452[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_452[] = { 0, 1, 4, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_452[] = { 0, 1, 4, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_452[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_452 = {
+	sizeof(struct X2N_SgNBChangeRefuse_IEs__value),
+	offsetof(struct X2N_SgNBChangeRefuse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBChangeRefuse_IEs__value, present),
+	sizeof(((struct X2N_SgNBChangeRefuse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_452,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_452,
+	asn_MAP_X2N_value_from_canonical_452,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_452 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_452,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_452	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRefuse_IEs_449[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_450,  memb_X2N_id_constraint_449 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBChangeRefuse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_451,  memb_X2N_criticality_constraint_449 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_452,
+		select_SgNBChangeRefuse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_452,  memb_X2N_value_constraint_449 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeRefuse_IEs_tag2el_449[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRefuse_IEs_specs_449 = {
+	sizeof(struct X2N_SgNBChangeRefuse_IEs),
+	offsetof(struct X2N_SgNBChangeRefuse_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeRefuse_IEs_tag2el_449,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRefuse_IEs = {
+	"SgNBChangeRefuse-IEs",
+	"SgNBChangeRefuse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449,
+	sizeof(asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449)
+		/sizeof(asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449)
+		/sizeof(asn_DEF_X2N_SgNBChangeRefuse_IEs_tags_449[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeRefuse_IEs_449,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeRefuse_IEs_specs_449	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_456[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupRequest_IEs__value, choice.InitiatingNodeType_EndcX2Setup),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_InitiatingNodeType_EndcX2Setup,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"InitiatingNodeType-EndcX2Setup"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_456[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_456 = {
+	sizeof(struct X2N_ENDCX2SetupRequest_IEs__value),
+	offsetof(struct X2N_ENDCX2SetupRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2SetupRequest_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2SetupRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_456,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_456 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_456,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_456	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupRequest_IEs_453[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_454,  memb_X2N_id_constraint_453 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2SetupRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_455,  memb_X2N_criticality_constraint_453 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_456,
+		select_ENDCX2SetupRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_456,  memb_X2N_value_constraint_453 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupRequest_IEs_tag2el_453[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupRequest_IEs_specs_453 = {
+	sizeof(struct X2N_ENDCX2SetupRequest_IEs),
+	offsetof(struct X2N_ENDCX2SetupRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupRequest_IEs_tag2el_453,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupRequest_IEs = {
+	"ENDCX2SetupRequest-IEs",
+	"ENDCX2SetupRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453,
+	sizeof(asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupRequest_IEs_tags_453[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupRequest_IEs_453,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupRequest_IEs_specs_453	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_460[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqIEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedEUTRAcellsENDCX2ManagementList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_460[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedEUTRAcellsENDCX2ManagementList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_460 = {
+	sizeof(struct X2N_ENB_ENDCX2SetupReqIEs__value),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCX2SetupReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_460,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_460 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_460,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_460	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2SetupReqIEs_457[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_458,  memb_X2N_id_constraint_457 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_ENDCX2SetupReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_459,  memb_X2N_criticality_constraint_457 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_460,
+		select_ENB_ENDCX2SetupReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_460,  memb_X2N_value_constraint_457 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCX2SetupReqIEs_tag2el_457[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2SetupReqIEs_specs_457 = {
+	sizeof(struct X2N_ENB_ENDCX2SetupReqIEs),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCX2SetupReqIEs_tag2el_457,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2SetupReqIEs = {
+	"ENB-ENDCX2SetupReqIEs",
+	"ENB-ENDCX2SetupReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457,
+	sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqIEs_tags_457[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCX2SetupReqIEs_457,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCX2SetupReqIEs_specs_457	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_464[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs__value, choice.GlobalGNB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalGNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs__value, choice.ServedNRcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsENDCX2ManagementList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_464[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalGNB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedNRcellsENDCX2ManagementList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_464 = {
+	sizeof(struct X2N_En_gNB_ENDCX2SetupReqIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCX2SetupReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_464,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_464 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_464,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_464	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2SetupReqIEs_461[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_462,  memb_X2N_id_constraint_461 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCX2SetupReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_463,  memb_X2N_criticality_constraint_461 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_464,
+		select_En_gNB_ENDCX2SetupReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_464,  memb_X2N_value_constraint_461 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCX2SetupReqIEs_tag2el_461[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2SetupReqIEs_specs_461 = {
+	sizeof(struct X2N_En_gNB_ENDCX2SetupReqIEs),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCX2SetupReqIEs_tag2el_461,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs = {
+	"En-gNB-ENDCX2SetupReqIEs",
+	"En-gNB-ENDCX2SetupReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs_tags_461[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCX2SetupReqIEs_461,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCX2SetupReqIEs_specs_461	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_468[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupResponse_IEs__value, choice.RespondingNodeType_EndcX2Setup),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_RespondingNodeType_EndcX2Setup,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RespondingNodeType-EndcX2Setup"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_468[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_468 = {
+	sizeof(struct X2N_ENDCX2SetupResponse_IEs__value),
+	offsetof(struct X2N_ENDCX2SetupResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2SetupResponse_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2SetupResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_468,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_468 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_468,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_468	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupResponse_IEs_465[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_466,  memb_X2N_id_constraint_465 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2SetupResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_467,  memb_X2N_criticality_constraint_465 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_468,
+		select_ENDCX2SetupResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_468,  memb_X2N_value_constraint_465 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupResponse_IEs_tag2el_465[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupResponse_IEs_specs_465 = {
+	sizeof(struct X2N_ENDCX2SetupResponse_IEs),
+	offsetof(struct X2N_ENDCX2SetupResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupResponse_IEs_tag2el_465,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupResponse_IEs = {
+	"ENDCX2SetupResponse-IEs",
+	"ENDCX2SetupResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465,
+	sizeof(asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupResponse_IEs_tags_465[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupResponse_IEs_465,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupResponse_IEs_specs_465	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_472[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedEUTRAcellsENDCX2ManagementList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_472[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalENB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedEUTRAcellsENDCX2ManagementList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_472 = {
+	sizeof(struct X2N_ENB_ENDCX2SetupReqAckIEs__value),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCX2SetupReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_472,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_472 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_472,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_472	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2SetupReqAckIEs_469[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_470,  memb_X2N_id_constraint_469 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_ENDCX2SetupReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_471,  memb_X2N_criticality_constraint_469 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_472,
+		select_ENB_ENDCX2SetupReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_472,  memb_X2N_value_constraint_469 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCX2SetupReqAckIEs_tag2el_469[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2SetupReqAckIEs_specs_469 = {
+	sizeof(struct X2N_ENB_ENDCX2SetupReqAckIEs),
+	offsetof(struct X2N_ENB_ENDCX2SetupReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCX2SetupReqAckIEs_tag2el_469,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs = {
+	"ENB-ENDCX2SetupReqAckIEs",
+	"ENB-ENDCX2SetupReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469,
+	sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs_tags_469[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCX2SetupReqAckIEs_469,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCX2SetupReqAckIEs_specs_469	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_476[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value, choice.GlobalGNB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalGNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value, choice.ServedNRcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsENDCX2ManagementList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_476[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* GlobalGNB-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ServedNRcellsENDCX2ManagementList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_476 = {
+	sizeof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_476,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_476 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_476,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_476	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2SetupReqAckIEs_473[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_474,  memb_X2N_id_constraint_473 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCX2SetupReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_475,  memb_X2N_criticality_constraint_473 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_476,
+		select_En_gNB_ENDCX2SetupReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_476,  memb_X2N_value_constraint_473 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCX2SetupReqAckIEs_tag2el_473[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2SetupReqAckIEs_specs_473 = {
+	sizeof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs),
+	offsetof(struct X2N_En_gNB_ENDCX2SetupReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCX2SetupReqAckIEs_tag2el_473,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs = {
+	"En-gNB-ENDCX2SetupReqAckIEs",
+	"En-gNB-ENDCX2SetupReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs_tags_473[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCX2SetupReqAckIEs_473,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCX2SetupReqAckIEs_specs_473	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_480[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_480[] = { 2, 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_480[] = { 2, 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_480[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_480 = {
+	sizeof(struct X2N_ENDCX2SetupFailure_IEs__value),
+	offsetof(struct X2N_ENDCX2SetupFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2SetupFailure_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2SetupFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_480,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_480,
+	asn_MAP_X2N_value_from_canonical_480,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_480 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_480,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_480	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupFailure_IEs_477[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_478,  memb_X2N_id_constraint_477 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2SetupFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_479,  memb_X2N_criticality_constraint_477 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2SetupFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_480,
+		select_ENDCX2SetupFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_480,  memb_X2N_value_constraint_477 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2SetupFailure_IEs_tag2el_477[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupFailure_IEs_specs_477 = {
+	sizeof(struct X2N_ENDCX2SetupFailure_IEs),
+	offsetof(struct X2N_ENDCX2SetupFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2SetupFailure_IEs_tag2el_477,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupFailure_IEs = {
+	"ENDCX2SetupFailure-IEs",
+	"ENDCX2SetupFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477,
+	sizeof(asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477)
+		/sizeof(asn_DEF_X2N_ENDCX2SetupFailure_IEs_tags_477[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2SetupFailure_IEs_477,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2SetupFailure_IEs_specs_477	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_484[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdate_IEs__value, choice.InitiatingNodeType_EndcConfigUpdate),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_InitiatingNodeType_EndcConfigUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"InitiatingNodeType-EndcConfigUpdate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_484[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_484 = {
+	sizeof(struct X2N_ENDCConfigurationUpdate_IEs__value),
+	offsetof(struct X2N_ENDCConfigurationUpdate_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCConfigurationUpdate_IEs__value, present),
+	sizeof(((struct X2N_ENDCConfigurationUpdate_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_484,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_484 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_484,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_484	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdate_IEs_481[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdate_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_482,  memb_X2N_id_constraint_481 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdate_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCConfigurationUpdate_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_483,  memb_X2N_criticality_constraint_481 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdate_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_484,
+		select_ENDCConfigurationUpdate_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_484,  memb_X2N_value_constraint_481 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdate_IEs_tag2el_481[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdate_IEs_specs_481 = {
+	sizeof(struct X2N_ENDCConfigurationUpdate_IEs),
+	offsetof(struct X2N_ENDCConfigurationUpdate_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdate_IEs_tag2el_481,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdate_IEs = {
+	"ENDCConfigurationUpdate-IEs",
+	"ENDCConfigurationUpdate-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdate_IEs_tags_481[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdate_IEs_481,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdate_IEs_specs_481	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_488[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, choice.CellAssistanceInformation),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_CellAssistanceInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellAssistanceInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedEUTRAcellsENDCX2ManagementList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsToModifyListENDCConfUpd),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedEUTRAcellsToModifyListENDCConfUpd"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, choice.ServedEUTRAcellsToDeleteListENDCConfUpd),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedEUTRAcellsToDeleteListENDCConfUpd"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_488[] = { 1, 2, 3, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_488[] = { 3, 0, 1, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_488[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 2 }, /* ServedEUTRAcellsENDCX2ManagementList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 1 }, /* ServedEUTRAcellsToModifyListENDCConfUpd */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 }, /* ServedEUTRAcellsToDeleteListENDCConfUpd */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* limited-list */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* full-list */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_488 = {
+	sizeof(struct X2N_ENB_ENDCConfigUpdateIEs__value),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCConfigUpdateIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_488,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_488,
+	asn_MAP_X2N_value_from_canonical_488,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_488 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_488,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_488	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCConfigUpdateIEs_485[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_486,  memb_X2N_id_constraint_485 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_ENDCConfigUpdateIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_487,  memb_X2N_criticality_constraint_485 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_488,
+		select_ENB_ENDCConfigUpdateIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_488,  memb_X2N_value_constraint_485 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCConfigUpdateIEs_tag2el_485[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCConfigUpdateIEs_specs_485 = {
+	sizeof(struct X2N_ENB_ENDCConfigUpdateIEs),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCConfigUpdateIEs_tag2el_485,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCConfigUpdateIEs = {
+	"ENB-ENDCConfigUpdateIEs",
+	"ENB-ENDCConfigUpdateIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485,
+	sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485)
+		/sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485)
+		/sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateIEs_tags_485[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCConfigUpdateIEs_485,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCConfigUpdateIEs_specs_485	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_492[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsENDCX2ManagementList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsToModifyENDCConfUpdList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsToModifyENDCConfUpdList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value, choice.ServedNRcellsToDeleteENDCConfUpdList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsToDeleteENDCConfUpdList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_492[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* ServedNRcellsENDCX2ManagementList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ServedNRcellsToModifyENDCConfUpdList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* ServedNRcellsToDeleteENDCConfUpdList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_492 = {
+	sizeof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCConfigUpdateIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_492,
+	3,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_492 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_492,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_492	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCConfigUpdateIEs_489[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_490,  memb_X2N_id_constraint_489 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCConfigUpdateIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_491,  memb_X2N_criticality_constraint_489 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_492,
+		select_En_gNB_ENDCConfigUpdateIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_492,  memb_X2N_value_constraint_489 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCConfigUpdateIEs_tag2el_489[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCConfigUpdateIEs_specs_489 = {
+	sizeof(struct X2N_En_gNB_ENDCConfigUpdateIEs),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCConfigUpdateIEs_tag2el_489,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs = {
+	"En-gNB-ENDCConfigUpdateIEs",
+	"En-gNB-ENDCConfigUpdateIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs_tags_489[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCConfigUpdateIEs_489,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCConfigUpdateIEs_specs_489	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_496[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value, choice.RespondingNodeType_EndcConfigUpdate),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_RespondingNodeType_EndcConfigUpdate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RespondingNodeType-EndcConfigUpdate"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_496[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_496 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value),
+	offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value, present),
+	sizeof(((struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_496,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_496 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_496,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_496	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_IEs_493[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_494,  memb_X2N_id_constraint_493 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCConfigurationUpdateAcknowledge_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_495,  memb_X2N_criticality_constraint_493 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_496,
+		select_ENDCConfigurationUpdateAcknowledge_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_496,  memb_X2N_value_constraint_493 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tag2el_493[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_IEs_specs_493 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs),
+	offsetof(struct X2N_ENDCConfigurationUpdateAcknowledge_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tag2el_493,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs = {
+	"ENDCConfigurationUpdateAcknowledge-IEs",
+	"ENDCConfigurationUpdateAcknowledge-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs_tags_493[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_IEs_493,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_IEs_specs_493	/* Additional specs */
+};
+
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_500 = {
+	sizeof(struct X2N_ENB_ENDCConfigUpdateAckIEs__value),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCConfigUpdateAckIEs__value *)0)->present),
+	0,	/* No top level tags */
+	0,	/* No tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_500 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_value_specs_500	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCConfigUpdateAckIEs_497[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_498,  memb_X2N_id_constraint_497 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		0,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_499,  memb_X2N_criticality_constraint_497 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_500,
+		0,
+		{ 0, &asn_PER_memb_X2N_value_constr_500,  memb_X2N_value_constraint_497 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCConfigUpdateAckIEs_tag2el_497[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCConfigUpdateAckIEs_specs_497 = {
+	sizeof(struct X2N_ENB_ENDCConfigUpdateAckIEs),
+	offsetof(struct X2N_ENB_ENDCConfigUpdateAckIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCConfigUpdateAckIEs_tag2el_497,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs = {
+	"ENB-ENDCConfigUpdateAckIEs",
+	"ENB-ENDCConfigUpdateAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497,
+	sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497)
+		/sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497)
+		/sizeof(asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs_tags_497[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCConfigUpdateAckIEs_497,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCConfigUpdateAckIEs_specs_497	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_504[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value, choice.ServedNRcellsENDCX2ManagementList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRcellsENDCX2ManagementList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRcellsENDCX2ManagementList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_504[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedNRcellsENDCX2ManagementList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_504 = {
+	sizeof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_504,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_504 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_504,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_504	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCConfigUpdateAckIEs_501[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_502,  memb_X2N_id_constraint_501 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCConfigUpdateAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_503,  memb_X2N_criticality_constraint_501 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_504,
+		select_En_gNB_ENDCConfigUpdateAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_504,  memb_X2N_value_constraint_501 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCConfigUpdateAckIEs_tag2el_501[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCConfigUpdateAckIEs_specs_501 = {
+	sizeof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs),
+	offsetof(struct X2N_En_gNB_ENDCConfigUpdateAckIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCConfigUpdateAckIEs_tag2el_501,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs = {
+	"En-gNB-ENDCConfigUpdateAckIEs",
+	"En-gNB-ENDCConfigUpdateAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs_tags_501[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCConfigUpdateAckIEs_501,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCConfigUpdateAckIEs_specs_501	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_508[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value, choice.TimeToWait),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_TimeToWait,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"TimeToWait"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_508[] = { 2, 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_508[] = { 2, 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_508[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* TimeToWait */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_508 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value),
+	offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs__value, present),
+	sizeof(((struct X2N_ENDCConfigurationUpdateFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_508,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_508,
+	asn_MAP_X2N_value_from_canonical_508,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_508 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_508,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_508	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateFailure_IEs_505[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_506,  memb_X2N_id_constraint_505 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCConfigurationUpdateFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_507,  memb_X2N_criticality_constraint_505 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_508,
+		select_ENDCConfigurationUpdateFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_508,  memb_X2N_value_constraint_505 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCConfigurationUpdateFailure_IEs_tag2el_505[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateFailure_IEs_specs_505 = {
+	sizeof(struct X2N_ENDCConfigurationUpdateFailure_IEs),
+	offsetof(struct X2N_ENDCConfigurationUpdateFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCConfigurationUpdateFailure_IEs_tag2el_505,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs = {
+	"ENDCConfigurationUpdateFailure-IEs",
+	"ENDCConfigurationUpdateFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505,
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505[0]), /* 1 */
+	asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505)
+		/sizeof(asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs_tags_505[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCConfigurationUpdateFailure_IEs_505,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCConfigurationUpdateFailure_IEs_specs_505	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_512[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest_IEs__value, choice.ServedNRCellsToActivate),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCellsToActivate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ServedNRCellsToActivate"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest_IEs__value, choice.ActivationID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_ActivationID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ActivationID"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_512[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_512[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_512[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* ActivationID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* ServedNRCellsToActivate */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_512 = {
+	sizeof(struct X2N_ENDCCellActivationRequest_IEs__value),
+	offsetof(struct X2N_ENDCCellActivationRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCCellActivationRequest_IEs__value, present),
+	sizeof(((struct X2N_ENDCCellActivationRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_512,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_512,
+	asn_MAP_X2N_value_from_canonical_512,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_512 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_512,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_512	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationRequest_IEs_509[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_510,  memb_X2N_id_constraint_509 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCCellActivationRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_511,  memb_X2N_criticality_constraint_509 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_512,
+		select_ENDCCellActivationRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_512,  memb_X2N_value_constraint_509 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationRequest_IEs_tag2el_509[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationRequest_IEs_specs_509 = {
+	sizeof(struct X2N_ENDCCellActivationRequest_IEs),
+	offsetof(struct X2N_ENDCCellActivationRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationRequest_IEs_tag2el_509,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationRequest_IEs = {
+	"ENDCCellActivationRequest-IEs",
+	"ENDCCellActivationRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509,
+	sizeof(asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationRequest_IEs_tags_509[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationRequest_IEs_509,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationRequest_IEs_specs_509	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_516[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs__value, choice.ActivatedNRCellList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ActivatedNRCellList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ActivatedNRCellList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs__value, choice.ActivationID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_ActivationID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ActivationID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_516[] = { 1, 0, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_516[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_516[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* ActivationID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* ActivatedNRCellList */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* CriticalityDiagnostics */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_516 = {
+	sizeof(struct X2N_ENDCCellActivationResponse_IEs__value),
+	offsetof(struct X2N_ENDCCellActivationResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCCellActivationResponse_IEs__value, present),
+	sizeof(((struct X2N_ENDCCellActivationResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_516,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_516,
+	asn_MAP_X2N_value_from_canonical_516,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_516 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_516,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_516	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationResponse_IEs_513[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_514,  memb_X2N_id_constraint_513 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCCellActivationResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_515,  memb_X2N_criticality_constraint_513 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_516,
+		select_ENDCCellActivationResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_516,  memb_X2N_value_constraint_513 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationResponse_IEs_tag2el_513[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationResponse_IEs_specs_513 = {
+	sizeof(struct X2N_ENDCCellActivationResponse_IEs),
+	offsetof(struct X2N_ENDCCellActivationResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationResponse_IEs_tag2el_513,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationResponse_IEs = {
+	"ENDCCellActivationResponse-IEs",
+	"ENDCCellActivationResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513,
+	sizeof(asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationResponse_IEs_tags_513[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationResponse_IEs_513,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationResponse_IEs_specs_513	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_520[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs__value, choice.ActivationID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_ActivationID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ActivationID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_520[] = { 0, 2, 1 };
+static const unsigned asn_MAP_X2N_value_from_canonical_520[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_520[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* ActivationID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_520 = {
+	sizeof(struct X2N_ENDCCellActivationFailure_IEs__value),
+	offsetof(struct X2N_ENDCCellActivationFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCCellActivationFailure_IEs__value, present),
+	sizeof(((struct X2N_ENDCCellActivationFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_520,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_520,
+	asn_MAP_X2N_value_from_canonical_520,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_520 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_520,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_520	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationFailure_IEs_517[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_518,  memb_X2N_id_constraint_517 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCCellActivationFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_519,  memb_X2N_criticality_constraint_517 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCCellActivationFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_520,
+		select_ENDCCellActivationFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_520,  memb_X2N_value_constraint_517 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCCellActivationFailure_IEs_tag2el_517[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationFailure_IEs_specs_517 = {
+	sizeof(struct X2N_ENDCCellActivationFailure_IEs),
+	offsetof(struct X2N_ENDCCellActivationFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCCellActivationFailure_IEs_tag2el_517,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationFailure_IEs = {
+	"ENDCCellActivationFailure-IEs",
+	"ENDCCellActivationFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517,
+	sizeof(asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517[0]), /* 1 */
+	asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517)
+		/sizeof(asn_DEF_X2N_ENDCCellActivationFailure_IEs_tags_517[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCCellActivationFailure_IEs_517,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCCellActivationFailure_IEs_specs_517	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_524[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, choice.SecondaryRATUsageReportList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SecondaryRATUsageReportList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SecondaryRATUsageReportList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_524[] = { 0, 1, 3, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_524[] = { 0, 1, 3, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_524[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* SecondaryRATUsageReportList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_524 = {
+	sizeof(struct X2N_SecondaryRATDataUsageReport_IEs__value),
+	offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SecondaryRATDataUsageReport_IEs__value, present),
+	sizeof(((struct X2N_SecondaryRATDataUsageReport_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_524,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_524,
+	asn_MAP_X2N_value_from_canonical_524,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_524 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_524,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_524	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SecondaryRATDataUsageReport_IEs_521[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_522,  memb_X2N_id_constraint_521 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SecondaryRATDataUsageReport_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_523,  memb_X2N_criticality_constraint_521 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_524,
+		select_SecondaryRATDataUsageReport_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_524,  memb_X2N_value_constraint_521 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SecondaryRATDataUsageReport_IEs_tag2el_521[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATDataUsageReport_IEs_specs_521 = {
+	sizeof(struct X2N_SecondaryRATDataUsageReport_IEs),
+	offsetof(struct X2N_SecondaryRATDataUsageReport_IEs, _asn_ctx),
+	asn_MAP_X2N_SecondaryRATDataUsageReport_IEs_tag2el_521,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATDataUsageReport_IEs = {
+	"SecondaryRATDataUsageReport-IEs",
+	"SecondaryRATDataUsageReport-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521,
+	sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521)
+		/sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521)
+		/sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_IEs_tags_521[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATDataUsageReport_IEs_521,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATDataUsageReport_IEs_specs_521	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_528[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs__value, choice.SgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs__value, choice.UserPlaneTrafficActivityReport),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_UserPlaneTrafficActivityReport,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UserPlaneTrafficActivityReport"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs__value, choice.ERABActivityNotifyItemList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ERABActivityNotifyItemList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ERABActivityNotifyItemList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_528[] = { 0, 1, 4, 2, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_528[] = { 0, 1, 3, 4, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_528[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* SgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 4, -2, 0 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 2, 0, 0 }, /* UserPlaneTrafficActivityReport */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, 0, 0 } /* ERABActivityNotifyItemList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_528 = {
+	sizeof(struct X2N_SgNBActivityNotification_IEs__value),
+	offsetof(struct X2N_SgNBActivityNotification_IEs__value, _asn_ctx),
+	offsetof(struct X2N_SgNBActivityNotification_IEs__value, present),
+	sizeof(((struct X2N_SgNBActivityNotification_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_528,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_528,
+	asn_MAP_X2N_value_from_canonical_528,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_528 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_528,
+	5,	/* Elements count */
+	&asn_SPC_X2N_value_specs_528	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBActivityNotification_IEs_525[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_526,  memb_X2N_id_constraint_525 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SgNBActivityNotification_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_527,  memb_X2N_criticality_constraint_525 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_528,
+		select_SgNBActivityNotification_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_528,  memb_X2N_value_constraint_525 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBActivityNotification_IEs_tag2el_525[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBActivityNotification_IEs_specs_525 = {
+	sizeof(struct X2N_SgNBActivityNotification_IEs),
+	offsetof(struct X2N_SgNBActivityNotification_IEs, _asn_ctx),
+	asn_MAP_X2N_SgNBActivityNotification_IEs_tag2el_525,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBActivityNotification_IEs = {
+	"SgNBActivityNotification-IEs",
+	"SgNBActivityNotification-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525,
+	sizeof(asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525)
+		/sizeof(asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525[0]), /* 1 */
+	asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525)
+		/sizeof(asn_DEF_X2N_SgNBActivityNotification_IEs_tags_525[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBActivityNotification_IEs_525,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SgNBActivityNotification_IEs_specs_525	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_532[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired_IEs__value, choice.UEsToBeResetList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEsToBeResetList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEsToBeResetList"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_532[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* UEsToBeResetList */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_532 = {
+	sizeof(struct X2N_ENDCPartialResetRequired_IEs__value),
+	offsetof(struct X2N_ENDCPartialResetRequired_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCPartialResetRequired_IEs__value, present),
+	sizeof(((struct X2N_ENDCPartialResetRequired_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_532,
+	5,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_532 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_532,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_532	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetRequired_IEs_529[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_530,  memb_X2N_id_constraint_529 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCPartialResetRequired_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_531,  memb_X2N_criticality_constraint_529 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetRequired_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_532,
+		select_ENDCPartialResetRequired_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_532,  memb_X2N_value_constraint_529 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCPartialResetRequired_IEs_tag2el_529[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetRequired_IEs_specs_529 = {
+	sizeof(struct X2N_ENDCPartialResetRequired_IEs),
+	offsetof(struct X2N_ENDCPartialResetRequired_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCPartialResetRequired_IEs_tag2el_529,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetRequired_IEs = {
+	"ENDCPartialResetRequired-IEs",
+	"ENDCPartialResetRequired-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529,
+	sizeof(asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529[0]), /* 1 */
+	asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetRequired_IEs_tags_529[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCPartialResetRequired_IEs_529,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCPartialResetRequired_IEs_specs_529	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_536[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetConfirm_IEs__value, choice.UEsToBeResetList),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEsToBeResetList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UEsToBeResetList"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_536[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* UEsToBeResetList */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_536 = {
+	sizeof(struct X2N_ENDCPartialResetConfirm_IEs__value),
+	offsetof(struct X2N_ENDCPartialResetConfirm_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCPartialResetConfirm_IEs__value, present),
+	sizeof(((struct X2N_ENDCPartialResetConfirm_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_536,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_536 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_536,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_536	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetConfirm_IEs_533[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetConfirm_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_534,  memb_X2N_id_constraint_533 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetConfirm_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCPartialResetConfirm_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_535,  memb_X2N_criticality_constraint_533 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCPartialResetConfirm_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_536,
+		select_ENDCPartialResetConfirm_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_536,  memb_X2N_value_constraint_533 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCPartialResetConfirm_IEs_tag2el_533[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetConfirm_IEs_specs_533 = {
+	sizeof(struct X2N_ENDCPartialResetConfirm_IEs),
+	offsetof(struct X2N_ENDCPartialResetConfirm_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCPartialResetConfirm_IEs_tag2el_533,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetConfirm_IEs = {
+	"ENDCPartialResetConfirm-IEs",
+	"ENDCPartialResetConfirm-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533,
+	sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533[0]), /* 1 */
+	asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533)
+		/sizeof(asn_DEF_X2N_ENDCPartialResetConfirm_IEs_tags_533[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCPartialResetConfirm_IEs_533,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCPartialResetConfirm_IEs_specs_533	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_540[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value, choice.InitiatingNodeType_EutranrCellResourceCoordination),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_InitiatingNodeType_EutranrCellResourceCoordination,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"InitiatingNodeType-EutranrCellResourceCoordination"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_540[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiate-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* initiate-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_540 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value, present),
+	sizeof(((struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_540,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_540 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_540,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_540	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_IEs_537[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_538,  memb_X2N_id_constraint_537 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_EUTRANRCellResourceCoordinationRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_539,  memb_X2N_criticality_constraint_537 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_540,
+		select_EUTRANRCellResourceCoordinationRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_540,  memb_X2N_value_constraint_537 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tag2el_537[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_IEs_specs_537 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tag2el_537,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs = {
+	"EUTRANRCellResourceCoordinationRequest-IEs",
+	"EUTRANRCellResourceCoordinationRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537,
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537[0]), /* 1 */
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs_tags_537[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_IEs_537,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_IEs_specs_537	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_544[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.DataTrafficResourceIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataTrafficResourceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DataTrafficResourceIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.SpectrumSharingGroupID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SpectrumSharingGroupID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SpectrumSharingGroupID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofEUTRACellsinEUTRACoordinationReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ListofEUTRACellsinEUTRACoordinationReq"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_544[] = { 1, 0, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_544[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_544[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofEUTRACellsinEUTRACoordinationReq */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_544 = {
+	sizeof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value, present),
+	sizeof(((struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_544,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_544,
+	asn_MAP_X2N_value_from_canonical_544,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_544 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_544,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_544	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_541[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_542,  memb_X2N_id_constraint_541 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_543,  memb_X2N_criticality_constraint_541 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_544,
+		select_ENB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_544,  memb_X2N_value_constraint_541 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_541[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_541 = {
+	sizeof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_541,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs = {
+	"ENB-EUTRA-NRCellResourceCoordinationReqIEs",
+	"ENB-EUTRA-NRCellResourceCoordinationReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541,
+	sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541)
+		/sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541[0]), /* 1 */
+	asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541)
+		/sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_tags_541[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_541,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_541	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_548[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.DataTrafficResourceIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataTrafficResourceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DataTrafficResourceIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofEUTRACellsinNRCoordinationReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ListofEUTRACellsinNRCoordinationReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ListofEUTRACellsinNRCoordinationReq"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.SpectrumSharingGroupID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SpectrumSharingGroupID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SpectrumSharingGroupID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, choice.ListofNRCellsinNRCoordinationReq),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ListofNRCellsinNRCoordinationReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ListofNRCellsinNRCoordinationReq"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_548[] = { 2, 0, 1, 3 };
+static const unsigned asn_MAP_X2N_value_from_canonical_548[] = { 1, 2, 0, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_548[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, 0, 0 }, /* SpectrumSharingGroupID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* DataTrafficResourceIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* ListofEUTRACellsinNRCoordinationReq */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -2, 0 } /* ListofNRCellsinNRCoordinationReq */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_548 = {
+	sizeof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value, present),
+	sizeof(((struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_548,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_548,
+	asn_MAP_X2N_value_from_canonical_548,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_548 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_548,
+	4,	/* Elements count */
+	&asn_SPC_X2N_value_specs_548	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_545[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_546,  memb_X2N_id_constraint_545 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_547,  memb_X2N_criticality_constraint_545 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_548,
+		select_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_548,  memb_X2N_value_constraint_545 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_545[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_545 = {
+	sizeof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tag2el_545,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs = {
+	"En-gNB-EUTRA-NRCellResourceCoordinationReqIEs",
+	"En-gNB-EUTRA-NRCellResourceCoordinationReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545,
+	sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545)
+		/sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545)
+		/sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_tags_545[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_545,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_545	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_552[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value, choice.RespondingNodeType_EutranrCellResourceCoordination),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_RespondingNodeType_EutranrCellResourceCoordination,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RespondingNodeType-EutranrCellResourceCoordination"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_552[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_552 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value, present),
+	sizeof(((struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_552,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_552 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_552,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_552	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_IEs_549[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_550,  memb_X2N_id_constraint_549 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_EUTRANRCellResourceCoordinationResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_551,  memb_X2N_criticality_constraint_549 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_552,
+		select_EUTRANRCellResourceCoordinationResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_552,  memb_X2N_value_constraint_549 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tag2el_549[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_IEs_specs_549 = {
+	sizeof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs),
+	offsetof(struct X2N_EUTRANRCellResourceCoordinationResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tag2el_549,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs = {
+	"EUTRANRCellResourceCoordinationResponse-IEs",
+	"EUTRANRCellResourceCoordinationResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549,
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549[0]), /* 1 */
+	asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549,	/* Same as above */
+	sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549)
+		/sizeof(asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs_tags_549[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_IEs_549,
+	3,	/* Elements count */
+	&asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_IEs_specs_549	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_556[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.DataTrafficResourceIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataTrafficResourceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DataTrafficResourceIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.SpectrumSharingGroupID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SpectrumSharingGroupID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SpectrumSharingGroupID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.ListofEUTRACellsinEUTRACoordinationResp),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ListofEUTRACellsinEUTRACoordinationResp,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ListofEUTRACellsinEUTRACoordinationResp"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_556[] = { 1, 0, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_556[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_556[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofEUTRACellsinEUTRACoordinationResp */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_556 = {
+	sizeof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, present),
+	sizeof(((struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_556,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_556,
+	asn_MAP_X2N_value_from_canonical_556,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_556 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_556,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_556	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_553[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_554,  memb_X2N_id_constraint_553 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_555,  memb_X2N_criticality_constraint_553 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_556,
+		select_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_556,  memb_X2N_value_constraint_553 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_553[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_553 = {
+	sizeof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs),
+	offsetof(struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_553,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs = {
+	"ENB-EUTRA-NRCellResourceCoordinationReqAckIEs",
+	"ENB-EUTRA-NRCellResourceCoordinationReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553,
+	sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553)
+		/sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553[0]), /* 1 */
+	asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553)
+		/sizeof(asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_553[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_553,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_553	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_560[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.DataTrafficResourceIndication),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_DataTrafficResourceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"DataTrafficResourceIndication"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.SpectrumSharingGroupID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_SpectrumSharingGroupID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SpectrumSharingGroupID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, choice.ListofNRCellsinNRCoordinationResp),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ListofNRCellsinNRCoordinationResp,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ListofNRCellsinNRCoordinationResp"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_560[] = { 1, 0, 2 };
+static const unsigned asn_MAP_X2N_value_from_canonical_560[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_560[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* SpectrumSharingGroupID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* DataTrafficResourceIndication */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 } /* ListofNRCellsinNRCoordinationResp */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_560 = {
+	sizeof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value, present),
+	sizeof(((struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_560,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_560,
+	asn_MAP_X2N_value_from_canonical_560,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_560 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_560,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_560	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_557[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_558,  memb_X2N_id_constraint_557 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_559,  memb_X2N_criticality_constraint_557 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_560,
+		select_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_560,  memb_X2N_value_constraint_557 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_557[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_557 = {
+	sizeof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs),
+	offsetof(struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tag2el_557,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs = {
+	"En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs",
+	"En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557,
+	sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557)
+		/sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557)
+		/sizeof(asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_tags_557[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_557,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_557	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_564[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalRequest_IEs__value, choice.InitiatingNodeType_EndcX2Removal),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_InitiatingNodeType_EndcX2Removal,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"InitiatingNodeType-EndcX2Removal"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_564[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* init-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* init-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_564 = {
+	sizeof(struct X2N_ENDCX2RemovalRequest_IEs__value),
+	offsetof(struct X2N_ENDCX2RemovalRequest_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2RemovalRequest_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2RemovalRequest_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_564,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_564 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_564,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_564	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalRequest_IEs_561[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalRequest_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_562,  memb_X2N_id_constraint_561 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalRequest_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2RemovalRequest_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_563,  memb_X2N_criticality_constraint_561 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalRequest_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_564,
+		select_ENDCX2RemovalRequest_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_564,  memb_X2N_value_constraint_561 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalRequest_IEs_tag2el_561[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalRequest_IEs_specs_561 = {
+	sizeof(struct X2N_ENDCX2RemovalRequest_IEs),
+	offsetof(struct X2N_ENDCX2RemovalRequest_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalRequest_IEs_tag2el_561,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalRequest_IEs = {
+	"ENDCX2RemovalRequest-IEs",
+	"ENDCX2RemovalRequest-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalRequest_IEs_tags_561[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalRequest_IEs_561,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalRequest_IEs_specs_561	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_568[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_568[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_568 = {
+	sizeof(struct X2N_ENB_ENDCX2RemovalReqIEs__value),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCX2RemovalReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_568,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_568 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_568,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_568	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2RemovalReqIEs_565[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_566,  memb_X2N_id_constraint_565 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_ENDCX2RemovalReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_567,  memb_X2N_criticality_constraint_565 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_568,
+		select_ENB_ENDCX2RemovalReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_568,  memb_X2N_value_constraint_565 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCX2RemovalReqIEs_tag2el_565[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2RemovalReqIEs_specs_565 = {
+	sizeof(struct X2N_ENB_ENDCX2RemovalReqIEs),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCX2RemovalReqIEs_tag2el_565,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs = {
+	"ENB-ENDCX2RemovalReqIEs",
+	"ENB-ENDCX2RemovalReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565,
+	sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs_tags_565[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCX2RemovalReqIEs_565,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCX2RemovalReqIEs_specs_565	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_572[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs__value, choice.GlobalGNB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalGNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_572[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalGNB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_572 = {
+	sizeof(struct X2N_En_gNB_ENDCX2RemovalReqIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCX2RemovalReqIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_572,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_572 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_572,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_572	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2RemovalReqIEs_569[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_570,  memb_X2N_id_constraint_569 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCX2RemovalReqIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_571,  memb_X2N_criticality_constraint_569 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_572,
+		select_En_gNB_ENDCX2RemovalReqIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_572,  memb_X2N_value_constraint_569 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCX2RemovalReqIEs_tag2el_569[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2RemovalReqIEs_specs_569 = {
+	sizeof(struct X2N_En_gNB_ENDCX2RemovalReqIEs),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCX2RemovalReqIEs_tag2el_569,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs = {
+	"En-gNB-ENDCX2RemovalReqIEs",
+	"En-gNB-ENDCX2RemovalReqIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs_tags_569[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCX2RemovalReqIEs_569,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCX2RemovalReqIEs_specs_569	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_576[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalResponse_IEs__value, choice.RespondingNodeType_EndcX2Removal),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_RespondingNodeType_EndcX2Removal,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RespondingNodeType-EndcX2Removal"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_576[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_576 = {
+	sizeof(struct X2N_ENDCX2RemovalResponse_IEs__value),
+	offsetof(struct X2N_ENDCX2RemovalResponse_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2RemovalResponse_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2RemovalResponse_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_576,
+	2,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_576 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_576,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_576	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalResponse_IEs_573[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalResponse_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_574,  memb_X2N_id_constraint_573 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalResponse_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2RemovalResponse_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_575,  memb_X2N_criticality_constraint_573 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalResponse_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_576,
+		select_ENDCX2RemovalResponse_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_576,  memb_X2N_value_constraint_573 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalResponse_IEs_tag2el_573[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalResponse_IEs_specs_573 = {
+	sizeof(struct X2N_ENDCX2RemovalResponse_IEs),
+	offsetof(struct X2N_ENDCX2RemovalResponse_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalResponse_IEs_tag2el_573,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalResponse_IEs = {
+	"ENDCX2RemovalResponse-IEs",
+	"ENDCX2RemovalResponse-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalResponse_IEs_tags_573[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalResponse_IEs_573,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalResponse_IEs_specs_573	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_580[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs__value, choice.GlobalENB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalENB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_580[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalENB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_580 = {
+	sizeof(struct X2N_ENB_ENDCX2RemovalReqAckIEs__value),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs__value, present),
+	sizeof(((struct X2N_ENB_ENDCX2RemovalReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_580,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_580 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_580,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_580	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2RemovalReqAckIEs_577[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_578,  memb_X2N_id_constraint_577 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENB_ENDCX2RemovalReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_579,  memb_X2N_criticality_constraint_577 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_580,
+		select_ENB_ENDCX2RemovalReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_580,  memb_X2N_value_constraint_577 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENB_ENDCX2RemovalReqAckIEs_tag2el_577[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2RemovalReqAckIEs_specs_577 = {
+	sizeof(struct X2N_ENB_ENDCX2RemovalReqAckIEs),
+	offsetof(struct X2N_ENB_ENDCX2RemovalReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_ENB_ENDCX2RemovalReqAckIEs_tag2el_577,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs = {
+	"ENB-ENDCX2RemovalReqAckIEs",
+	"ENB-ENDCX2RemovalReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577,
+	sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577[0]), /* 1 */
+	asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577)
+		/sizeof(asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs_tags_577[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENB_ENDCX2RemovalReqAckIEs_577,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENB_ENDCX2RemovalReqAckIEs_specs_577	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_584[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value, choice.GlobalGNB_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GlobalGNB-ID"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_584[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* GlobalGNB-ID */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_584 = {
+	sizeof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value, _asn_ctx),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value, present),
+	sizeof(((struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_584,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_584 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_584,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_584	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2RemovalReqAckIEs_581[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_582,  memb_X2N_id_constraint_581 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_En_gNB_ENDCX2RemovalReqAckIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_583,  memb_X2N_criticality_constraint_581 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_584,
+		select_En_gNB_ENDCX2RemovalReqAckIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_584,  memb_X2N_value_constraint_581 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tag2el_581[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2RemovalReqAckIEs_specs_581 = {
+	sizeof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs),
+	offsetof(struct X2N_En_gNB_ENDCX2RemovalReqAckIEs, _asn_ctx),
+	asn_MAP_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tag2el_581,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs = {
+	"En-gNB-ENDCX2RemovalReqAckIEs",
+	"En-gNB-ENDCX2RemovalReqAckIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581,
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581[0]), /* 1 */
+	asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581,	/* Same as above */
+	sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581)
+		/sizeof(asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs_tags_581[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_En_gNB_ENDCX2RemovalReqAckIEs_581,
+	3,	/* Elements count */
+	&asn_SPC_X2N_En_gNB_ENDCX2RemovalReqAckIEs_specs_581	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_588[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure_IEs__value, choice.Cause),
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"Cause"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure_IEs__value, choice.CriticalityDiagnostics),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CriticalityDiagnostics,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CriticalityDiagnostics"
+		},
+};
+static const unsigned asn_MAP_X2N_value_to_canonical_588[] = { 1, 0 };
+static const unsigned asn_MAP_X2N_value_from_canonical_588[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_588[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* CriticalityDiagnostics */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioNetwork */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* transport */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* protocol */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* misc */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_588 = {
+	sizeof(struct X2N_ENDCX2RemovalFailure_IEs__value),
+	offsetof(struct X2N_ENDCX2RemovalFailure_IEs__value, _asn_ctx),
+	offsetof(struct X2N_ENDCX2RemovalFailure_IEs__value, present),
+	sizeof(((struct X2N_ENDCX2RemovalFailure_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_588,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_value_to_canonical_588,
+	asn_MAP_X2N_value_from_canonical_588,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_588 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_588,
+	2,	/* Elements count */
+	&asn_SPC_X2N_value_specs_588	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalFailure_IEs_585[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_586,  memb_X2N_id_constraint_585 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_ENDCX2RemovalFailure_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_587,  memb_X2N_criticality_constraint_585 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_ENDCX2RemovalFailure_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_588,
+		select_ENDCX2RemovalFailure_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_588,  memb_X2N_value_constraint_585 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ENDCX2RemovalFailure_IEs_tag2el_585[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalFailure_IEs_specs_585 = {
+	sizeof(struct X2N_ENDCX2RemovalFailure_IEs),
+	offsetof(struct X2N_ENDCX2RemovalFailure_IEs, _asn_ctx),
+	asn_MAP_X2N_ENDCX2RemovalFailure_IEs_tag2el_585,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalFailure_IEs = {
+	"ENDCX2RemovalFailure-IEs",
+	"ENDCX2RemovalFailure-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585,
+	sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585[0]), /* 1 */
+	asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585,	/* Same as above */
+	sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585)
+		/sizeof(asn_DEF_X2N_ENDCX2RemovalFailure_IEs_tags_585[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ENDCX2RemovalFailure_IEs_585,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ENDCX2RemovalFailure_IEs_specs_585	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_592[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs__value, choice.UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID-Extension"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs__value, choice.UE_X2AP_ID),
+		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		0,
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs__value, choice.E_RABs_DataForwardingAddress_List),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_E_RABs_DataForwardingAddress_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"E-RABs-DataForwardingAddress-List"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_592[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* UE-X2AP-ID */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* E-RABs-DataForwardingAddress-List */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_592 = {
+	sizeof(struct X2N_DataForwardingAddressIndication_IEs__value),
+	offsetof(struct X2N_DataForwardingAddressIndication_IEs__value, _asn_ctx),
+	offsetof(struct X2N_DataForwardingAddressIndication_IEs__value, present),
+	sizeof(((struct X2N_DataForwardingAddressIndication_IEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_592,
+	3,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_592 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_592,
+	3,	/* Elements count */
+	&asn_SPC_X2N_value_specs_592	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_DataForwardingAddressIndication_IEs_589[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_590,  memb_X2N_id_constraint_589 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_DataForwardingAddressIndication_IEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_591,  memb_X2N_criticality_constraint_589 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_DataForwardingAddressIndication_IEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_592,
+		select_DataForwardingAddressIndication_IEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_592,  memb_X2N_value_constraint_589 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_DataForwardingAddressIndication_IEs_tag2el_589[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_DataForwardingAddressIndication_IEs_specs_589 = {
+	sizeof(struct X2N_DataForwardingAddressIndication_IEs),
+	offsetof(struct X2N_DataForwardingAddressIndication_IEs, _asn_ctx),
+	asn_MAP_X2N_DataForwardingAddressIndication_IEs_tag2el_589,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_DataForwardingAddressIndication_IEs = {
+	"DataForwardingAddressIndication-IEs",
+	"DataForwardingAddressIndication-IEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589,
+	sizeof(asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589)
+		/sizeof(asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589[0]), /* 1 */
+	asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589,	/* Same as above */
+	sizeof(asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589)
+		/sizeof(asn_DEF_X2N_DataForwardingAddressIndication_IEs_tags_589[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_DataForwardingAddressIndication_IEs_589,
+	3,	/* Elements count */
+	&asn_SPC_X2N_DataForwardingAddressIndication_IEs_specs_589	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_value_596[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GNBStatusIndicationIEs__value, choice.GNBOverloadInformation),
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_GNBOverloadInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"GNBOverloadInformation"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_596[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* GNBOverloadInformation */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_596 = {
+	sizeof(struct X2N_GNBStatusIndicationIEs__value),
+	offsetof(struct X2N_GNBStatusIndicationIEs__value, _asn_ctx),
+	offsetof(struct X2N_GNBStatusIndicationIEs__value, present),
+	sizeof(((struct X2N_GNBStatusIndicationIEs__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_596,
+	1,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_596 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_596,
+	1,	/* Elements count */
+	&asn_SPC_X2N_value_specs_596	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_GNBStatusIndicationIEs_593[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GNBStatusIndicationIEs, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_ID,
+		0,
+		{ 0, &asn_PER_memb_X2N_id_constr_594,  memb_X2N_id_constraint_593 },
+		0, 0, /* No default value */
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_GNBStatusIndicationIEs, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_GNBStatusIndicationIEs_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_595,  memb_X2N_criticality_constraint_593 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_GNBStatusIndicationIEs, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_596,
+		select_GNBStatusIndicationIEs_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_596,  memb_X2N_value_constraint_593 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_GNBStatusIndicationIEs_tags_593[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_GNBStatusIndicationIEs_tag2el_593[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_GNBStatusIndicationIEs_specs_593 = {
+	sizeof(struct X2N_GNBStatusIndicationIEs),
+	offsetof(struct X2N_GNBStatusIndicationIEs, _asn_ctx),
+	asn_MAP_X2N_GNBStatusIndicationIEs_tag2el_593,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_GNBStatusIndicationIEs = {
+	"GNBStatusIndicationIEs",
+	"GNBStatusIndicationIEs",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_GNBStatusIndicationIEs_tags_593,
+	sizeof(asn_DEF_X2N_GNBStatusIndicationIEs_tags_593)
+		/sizeof(asn_DEF_X2N_GNBStatusIndicationIEs_tags_593[0]), /* 1 */
+	asn_DEF_X2N_GNBStatusIndicationIEs_tags_593,	/* Same as above */
+	sizeof(asn_DEF_X2N_GNBStatusIndicationIEs_tags_593)
+		/sizeof(asn_DEF_X2N_GNBStatusIndicationIEs_tags_593[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_GNBStatusIndicationIEs_593,
+	3,	/* Elements count */
+	&asn_SPC_X2N_GNBStatusIndicationIEs_specs_593	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolIE-Field.h b/asn1c_defs/X2N_ProtocolIE-Field.h
new file mode 100644
index 0000000..fb36b2c
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Field.h
@@ -0,0 +1,4330 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_Field_H_
+#define	_X2N_ProtocolIE_Field_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-ID.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "X2N_E-RABs-ToBeSetup-Item.h"
+#include "X2N_Presence.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+#include "X2N_E-RABs-Admitted-Item.h"
+#include "X2N_E-RABs-SubjectToStatusTransfer-Item.h"
+#include "X2N_CellInformation-Item.h"
+#include "X2N_CellToReport-Item.h"
+#include "X2N_MeasurementInitiationResult-Item.h"
+#include "X2N_MeasurementFailureCause-Item.h"
+#include "X2N_CompleteFailureCauseInformation-Item.h"
+#include "X2N_CellMeasurementResult-Item.h"
+#include "X2N_E-RABs-ToBeAdded-Item.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-Item.h"
+#include "X2N_E-RABs-ToBeAdded-ModReqItem.h"
+#include "X2N_E-RABs-ToBeModified-ModReqItem.h"
+#include "X2N_E-RABs-ToBeReleased-ModReqItem.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckItem.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckItem.h"
+#include "X2N_E-RABs-Admitted-ToReleased-ModAckItem.h"
+#include "X2N_E-RABs-ToBeReleased-ModReqdItem.h"
+#include "X2N_E-RABs-ToBeReleased-RelReqItem.h"
+#include "X2N_E-RABs-ToBeReleased-RelConfItem.h"
+#include "X2N_E-RABs-SubjectToCounterCheckItem.h"
+#include "X2N_E-RABs-ToBeSetupRetrieve-Item.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReq-Item.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-Item.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-Item.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAck-Item.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAck-Item.h"
+#include "X2N_E-RABs-Admitted-ToReleased-SgNBModAck-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReqd-Item.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReqd-Item.h"
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConf-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReq-Item.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqd-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConf-Item.h"
+#include "X2N_E-RABs-SubjectToSgNBCounterCheck-Item.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConf-Item.h"
+#include "X2N_E-RABs-DataForwardingAddress-Item.h"
+#include "X2N_E-RAB-Item.h"
+#include "X2N_E-RABUsageReport-Item.h"
+#include "X2N_SecondaryRATUsageReport-Item.h"
+#include "X2N_UE-X2AP-ID.h"
+#include "X2N_Cause.h"
+#include "X2N_ECGI.h"
+#include "X2N_GUMMEI.h"
+#include "X2N_UE-ContextInformation.h"
+#include "X2N_UE-HistoryInformation.h"
+#include "X2N_TraceActivation.h"
+#include "X2N_SRVCCOperationPossible.h"
+#include "X2N_CSGMembershipStatus.h"
+#include "X2N_MobilityInformation.h"
+#include "X2N_Masked-IMEISV.h"
+#include "X2N_UE-HistoryInformationFromTheUE.h"
+#include "X2N_ExpectedUEBehaviour.h"
+#include "X2N_ProSeAuthorized.h"
+#include "X2N_UE-ContextReferenceAtSeNB.h"
+#include "X2N_UE-X2AP-ID-Extension.h"
+#include "X2N_V2XServicesAuthorized.h"
+#include "X2N_UE-ContextReferenceAtWT.h"
+#include "X2N_NRUESecurityCapabilities.h"
+#include "X2N_UE-ContextReferenceAtSgNB.h"
+#include "X2N_AerialUEsubscriptionInformation.h"
+#include "X2N_Subscription-Based-UE-DifferentiationInfo.h"
+#include "X2N_E-RABs-Admitted-List.h"
+#include "X2N_E-RAB-List.h"
+#include "X2N_TargeteNBtoSource-eNBTransparentContainer.h"
+#include "X2N_CriticalityDiagnostics.h"
+#include "X2N_UE-ContextKeptIndicator.h"
+#include "X2N_HandoverReportType.h"
+#include "X2N_TargetCellInUTRAN.h"
+#include "X2N_CRNTI.h"
+#include "X2N_UE-RLF-Report-Container.h"
+#include "X2N_UE-RLF-Report-Container-for-extended-bands.h"
+#include "X2N_E-RABs-SubjectToStatusTransfer-List.h"
+#include "X2N_SgNB-UE-X2AP-ID.h"
+#include "X2N_SIPTOBearerDeactivationIndication.h"
+#include "X2N_GlobalENB-ID.h"
+#include "X2N_ServedCells.h"
+#include "X2N_GUGroupIDList.h"
+#include "X2N_LHN-ID.h"
+#include "X2N_TimeToWait.h"
+#include "X2N_CellInformation-List.h"
+#include "X2N_ServedCellsToModify.h"
+#include "X2N_Old-ECGIs.h"
+#include "X2N_CoverageModificationList.h"
+#include "X2N_Measurement-ID.h"
+#include "X2N_Registration-Request.h"
+#include "X2N_ReportCharacteristics.h"
+#include "X2N_CellToReport-List.h"
+#include "X2N_ReportingPeriodicity.h"
+#include "X2N_PartialSuccessIndicator.h"
+#include "X2N_ReportingPeriodicityRSRPMR.h"
+#include "X2N_ReportingPeriodicityCSIR.h"
+#include "X2N_MeasurementInitiationResult-List.h"
+#include "X2N_CompleteFailureCauseInformation-List.h"
+#include "X2N_CellMeasurementResult-List.h"
+#include "X2N_MobilityParametersInformation.h"
+#include "X2N_MobilityParametersModificationRange.h"
+#include "X2N_PCI.h"
+#include "X2N_ShortMAC-I.h"
+#include "X2N_RRCConnSetupIndicator.h"
+#include "X2N_RRCConnReestabIndicator.h"
+#include "X2N_ServedCellsToActivate.h"
+#include "X2N_ActivatedCellList.h"
+#include "X2N_RNL-Header.h"
+#include "X2N_X2AP-Message.h"
+#include "X2N_UESecurityCapabilities.h"
+#include "X2N_SeNBSecurityKey.h"
+#include "X2N_UEAggregateMaximumBitRate.h"
+#include "X2N_PLMN-Identity.h"
+#include "X2N_E-RABs-ToBeAdded-List.h"
+#include "X2N_MeNBtoSeNBContainer.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-List.h"
+#include "X2N_SeNBtoMeNBContainer.h"
+#include "X2N_TransportLayerAddress.h"
+#include "X2N_TunnelInformation.h"
+#include "X2N_ResponseInformationSeNBReconfComp.h"
+#include "X2N_SCGChangeIndication.h"
+#include "X2N_UE-ContextInformationSeNBModReq.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-ModAckList.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-ModAckList.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-ModAckList.h"
+#include "X2N_E-RABs-ToBeReleased-ModReqd.h"
+#include "X2N_E-RABs-ToBeReleased-List-RelReq.h"
+#include "X2N_MakeBeforeBreakIndicator.h"
+#include "X2N_E-RABs-ToBeReleased-List-RelConf.h"
+#include "X2N_E-RABs-SubjectToCounterCheck-List.h"
+#include "X2N_X2BenefitValue.h"
+#include "X2N_ResumeID.h"
+#include "X2N_EUTRANCellIdentifier.h"
+#include "X2N_UE-ContextInformationRetrieve.h"
+#include "X2N_SgNBSecurityKey.h"
+#include "X2N_HandoverRestrictionList.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBAddReqList.h"
+#include "X2N_MeNBtoSgNBContainer.h"
+#include "X2N_SplitSRBs.h"
+#include "X2N_MeNBResourceCoordinationInformation.h"
+#include "X2N_SGNB-Addition-Trigger-Ind.h"
+#include "X2N_SubscriberProfileIDforRFP.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList.h"
+#include "X2N_SgNBtoMeNBContainer.h"
+#include "X2N_SgNBResourceCoordinationInformation.h"
+#include "X2N_RRC-Config-Ind.h"
+#include "X2N_ResponseInformationSgNBReconfComp.h"
+#include "X2N_SCGConfigurationQuery.h"
+#include "X2N_UE-ContextInformation-SgNBModReq.h"
+#include "X2N_E-RABs-Admitted-ToBeAdded-SgNBModAckList.h"
+#include "X2N_E-RABs-Admitted-ToBeModified-SgNBModAckList.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBModAckList.h"
+#include "X2N_PDCPChangeIndication.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReqdList.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReqdList.h"
+#include "X2N_E-RABs-AdmittedToBeModified-SgNBModConfList.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqList.h"
+#include "X2N_E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelReqdList.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBRelConfList.h"
+#include "X2N_E-RABs-SubjectToSgNBCounterCheck-List.h"
+#include "X2N_GlobalGNB-ID.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBChaConfList.h"
+#include "X2N_SplitSRB.h"
+#include "X2N_UENRMeasurement.h"
+#include "X2N_InitiatingNodeType-EndcX2Setup.h"
+#include "X2N_ServedEUTRAcellsENDCX2ManagementList.h"
+#include "X2N_ServedNRcellsENDCX2ManagementList.h"
+#include "X2N_RespondingNodeType-EndcX2Setup.h"
+#include "X2N_InitiatingNodeType-EndcConfigUpdate.h"
+#include "X2N_CellAssistanceInformation.h"
+#include "X2N_ServedEUTRAcellsToModifyListENDCConfUpd.h"
+#include "X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.h"
+#include "X2N_ServedNRcellsToModifyENDCConfUpdList.h"
+#include "X2N_ServedNRcellsToDeleteENDCConfUpdList.h"
+#include "X2N_RespondingNodeType-EndcConfigUpdate.h"
+#include "X2N_ServedNRCellsToActivate.h"
+#include "X2N_ActivationID.h"
+#include "X2N_ActivatedNRCellList.h"
+#include "X2N_SecondaryRATUsageReportList.h"
+#include "X2N_UserPlaneTrafficActivityReport.h"
+#include "X2N_ERABActivityNotifyItemList.h"
+#include "X2N_UEsToBeResetList.h"
+#include "X2N_InitiatingNodeType-EutranrCellResourceCoordination.h"
+#include "X2N_DataTrafficResourceIndication.h"
+#include "X2N_SpectrumSharingGroupID.h"
+#include "X2N_ListofEUTRACellsinEUTRACoordinationReq.h"
+#include "X2N_ListofEUTRACellsinNRCoordinationReq.h"
+#include "X2N_ListofNRCellsinNRCoordinationReq.h"
+#include "X2N_RespondingNodeType-EutranrCellResourceCoordination.h"
+#include "X2N_ListofEUTRACellsinEUTRACoordinationResp.h"
+#include "X2N_ListofNRCellsinNRCoordinationResp.h"
+#include "X2N_InitiatingNodeType-EndcX2Removal.h"
+#include "X2N_RespondingNodeType-EndcX2Removal.h"
+#include "X2N_E-RABs-DataForwardingAddress-List.h"
+#include "X2N_GNBOverloadInformation.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_E_RABs_ToBeSetup_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeSetup_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeSetup_ItemIEs__value_PR_E_RABs_ToBeSetup_Item
+} X2N_E_RABs_ToBeSetup_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ItemIEs__value_PR_E_RABs_Admitted_Item
+} X2N_E_RABs_Admitted_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR {
+	X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR_E_RABs_SubjectToStatusTransfer_Item
+} X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR;
+typedef enum X2N_CellInformation_ItemIEs__value_PR {
+	X2N_CellInformation_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellInformation_ItemIEs__value_PR_CellInformation_Item
+} X2N_CellInformation_ItemIEs__value_PR;
+typedef enum X2N_CellToReport_ItemIEs__value_PR {
+	X2N_CellToReport_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellToReport_ItemIEs__value_PR_CellToReport_Item
+} X2N_CellToReport_ItemIEs__value_PR;
+typedef enum X2N_MeasurementInitiationResult_ItemIEs__value_PR {
+	X2N_MeasurementInitiationResult_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_MeasurementInitiationResult_ItemIEs__value_PR_MeasurementInitiationResult_Item
+} X2N_MeasurementInitiationResult_ItemIEs__value_PR;
+typedef enum X2N_MeasurementFailureCause_ItemIEs__value_PR {
+	X2N_MeasurementFailureCause_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_MeasurementFailureCause_ItemIEs__value_PR_MeasurementFailureCause_Item
+} X2N_MeasurementFailureCause_ItemIEs__value_PR;
+typedef enum X2N_CompleteFailureCauseInformation_ItemIEs__value_PR {
+	X2N_CompleteFailureCauseInformation_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_CompleteFailureCauseInformation_ItemIEs__value_PR_CompleteFailureCauseInformation_Item
+} X2N_CompleteFailureCauseInformation_ItemIEs__value_PR;
+typedef enum X2N_CellMeasurementResult_ItemIEs__value_PR {
+	X2N_CellMeasurementResult_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellMeasurementResult_ItemIEs__value_PR_CellMeasurementResult_Item
+} X2N_CellMeasurementResult_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeAdded_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeAdded_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_ItemIEs__value_PR_E_RABs_ToBeAdded_Item
+} X2N_E_RABs_ToBeAdded_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_Item
+} X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeAdded_ModReqItemIEs__value_PR {
+	X2N_E_RABs_ToBeAdded_ModReqItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_ModReqItemIEs__value_PR_E_RABs_ToBeAdded_ModReqItem
+} X2N_E_RABs_ToBeAdded_ModReqItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeModified_ModReqItemIEs__value_PR {
+	X2N_E_RABs_ToBeModified_ModReqItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_ModReqItemIEs__value_PR_E_RABs_ToBeModified_ModReqItem
+} X2N_E_RABs_ToBeModified_ModReqItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_ModReqItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_ModReqItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_ModReqItemIEs__value_PR_E_RABs_ToBeReleased_ModReqItem
+} X2N_E_RABs_ToBeReleased_ModReqItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckItem
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckItem
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR_E_RABs_Admitted_ToReleased_ModAckItem
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value_PR_E_RABs_ToBeReleased_ModReqdItem
+} X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelReqItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_RelReqItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_RelReqItemIEs__value_PR_E_RABs_ToBeReleased_RelReqItem
+} X2N_E_RABs_ToBeReleased_RelReqItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_RelConfItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_RelConfItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_RelConfItemIEs__value_PR_E_RABs_ToBeReleased_RelConfItem
+} X2N_E_RABs_ToBeReleased_RelConfItemIEs__value_PR;
+typedef enum X2N_E_RABs_SubjectToCounterCheckItemIEs__value_PR {
+	X2N_E_RABs_SubjectToCounterCheckItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_SubjectToCounterCheckItemIEs__value_PR_E_RABs_SubjectToCounterCheckItem
+} X2N_E_RABs_SubjectToCounterCheckItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR_E_RABs_ToBeSetupRetrieve_Item
+} X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR_E_RABs_ToBeAdded_SgNBAddReq_Item
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeAdded_SgNBModReq_Item
+} X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeModified_SgNBModReq_Item
+} X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBModReq_Item
+} X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAck_Item
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR_E_RABs_Admitted_ToReleased_SgNBModAck_Item
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBModReqd_Item
+} X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR_E_RABs_ToBeModified_SgNBModReqd_Item
+} X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR {
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR_E_RABs_AdmittedToBeModified_SgNBModConf_Item
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelReq_Item
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR {
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqd_Item
+} X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBRelConf_Item
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR {
+	X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR_E_RABs_SubjectToSgNBCounterCheck_Item
+} X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR {
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR_E_RABs_ToBeReleased_SgNBChaConf_Item
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR;
+typedef enum X2N_E_RABs_DataForwardingAddress_ItemIEs__value_PR {
+	X2N_E_RABs_DataForwardingAddress_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABs_DataForwardingAddress_ItemIEs__value_PR_E_RABs_DataForwardingAddress_Item
+} X2N_E_RABs_DataForwardingAddress_ItemIEs__value_PR;
+typedef enum X2N_E_RAB_ItemIEs__value_PR {
+	X2N_E_RAB_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RAB_ItemIEs__value_PR_E_RAB_Item
+} X2N_E_RAB_ItemIEs__value_PR;
+typedef enum X2N_E_RABUsageReport_ItemIEs__value_PR {
+	X2N_E_RABUsageReport_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_E_RABUsageReport_ItemIEs__value_PR_E_RABUsageReport_Item
+} X2N_E_RABUsageReport_ItemIEs__value_PR;
+typedef enum X2N_SecondaryRATUsageReport_ItemIEs__value_PR {
+	X2N_SecondaryRATUsageReport_ItemIEs__value_PR_NOTHING,	/* No components present */
+	X2N_SecondaryRATUsageReport_ItemIEs__value_PR_SecondaryRATUsageReport_Item
+} X2N_SecondaryRATUsageReport_ItemIEs__value_PR;
+typedef enum X2N_HandoverRequest_IEs__value_PR {
+	X2N_HandoverRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_HandoverRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_HandoverRequest_IEs__value_PR_Cause,
+	X2N_HandoverRequest_IEs__value_PR_ECGI,
+	X2N_HandoverRequest_IEs__value_PR_GUMMEI,
+	X2N_HandoverRequest_IEs__value_PR_UE_ContextInformation,
+	X2N_HandoverRequest_IEs__value_PR_UE_HistoryInformation,
+	X2N_HandoverRequest_IEs__value_PR_TraceActivation,
+	X2N_HandoverRequest_IEs__value_PR_SRVCCOperationPossible,
+	X2N_HandoverRequest_IEs__value_PR_CSGMembershipStatus,
+	X2N_HandoverRequest_IEs__value_PR_MobilityInformation,
+	X2N_HandoverRequest_IEs__value_PR_Masked_IMEISV,
+	X2N_HandoverRequest_IEs__value_PR_UE_HistoryInformationFromTheUE,
+	X2N_HandoverRequest_IEs__value_PR_ExpectedUEBehaviour,
+	X2N_HandoverRequest_IEs__value_PR_ProSeAuthorized,
+	X2N_HandoverRequest_IEs__value_PR_UE_ContextReferenceAtSeNB,
+	X2N_HandoverRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_HandoverRequest_IEs__value_PR_V2XServicesAuthorized,
+	X2N_HandoverRequest_IEs__value_PR_UE_ContextReferenceAtWT,
+	X2N_HandoverRequest_IEs__value_PR_NRUESecurityCapabilities,
+	X2N_HandoverRequest_IEs__value_PR_UE_ContextReferenceAtSgNB,
+	X2N_HandoverRequest_IEs__value_PR_AerialUEsubscriptionInformation,
+	X2N_HandoverRequest_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo
+} X2N_HandoverRequest_IEs__value_PR;
+typedef enum X2N_HandoverRequestAcknowledge_IEs__value_PR {
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_List,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_E_RAB_List,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_TargeteNBtoSource_eNBTransparentContainer,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_ContextKeptIndicator,
+	X2N_HandoverRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_HandoverRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_HandoverPreparationFailure_IEs__value_PR {
+	X2N_HandoverPreparationFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_HandoverPreparationFailure_IEs__value_PR_UE_X2AP_ID,
+	X2N_HandoverPreparationFailure_IEs__value_PR_Cause,
+	X2N_HandoverPreparationFailure_IEs__value_PR_CriticalityDiagnostics,
+	X2N_HandoverPreparationFailure_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_HandoverPreparationFailure_IEs__value_PR;
+typedef enum X2N_HandoverReport_IEs__value_PR {
+	X2N_HandoverReport_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_HandoverReport_IEs__value_PR_HandoverReportType,
+	X2N_HandoverReport_IEs__value_PR_Cause,
+	X2N_HandoverReport_IEs__value_PR_ECGI,
+	X2N_HandoverReport_IEs__value_PR_TargetCellInUTRAN,
+	X2N_HandoverReport_IEs__value_PR_CRNTI,
+	X2N_HandoverReport_IEs__value_PR_MobilityInformation,
+	X2N_HandoverReport_IEs__value_PR_UE_RLF_Report_Container,
+	X2N_HandoverReport_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands
+} X2N_HandoverReport_IEs__value_PR;
+typedef enum X2N_SNStatusTransfer_IEs__value_PR {
+	X2N_SNStatusTransfer_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID,
+	X2N_SNStatusTransfer_IEs__value_PR_E_RABs_SubjectToStatusTransfer_List,
+	X2N_SNStatusTransfer_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SNStatusTransfer_IEs__value_PR_SgNB_UE_X2AP_ID
+} X2N_SNStatusTransfer_IEs__value_PR;
+typedef enum X2N_UEContextRelease_IEs__value_PR {
+	X2N_UEContextRelease_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID,
+	X2N_UEContextRelease_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_UEContextRelease_IEs__value_PR_SIPTOBearerDeactivationIndication,
+	X2N_UEContextRelease_IEs__value_PR_SgNB_UE_X2AP_ID
+} X2N_UEContextRelease_IEs__value_PR;
+typedef enum X2N_HandoverCancel_IEs__value_PR {
+	X2N_HandoverCancel_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID,
+	X2N_HandoverCancel_IEs__value_PR_Cause,
+	X2N_HandoverCancel_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_HandoverCancel_IEs__value_PR;
+typedef enum X2N_ErrorIndication_IEs__value_PR {
+	X2N_ErrorIndication_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID,
+	X2N_ErrorIndication_IEs__value_PR_Cause,
+	X2N_ErrorIndication_IEs__value_PR_CriticalityDiagnostics,
+	X2N_ErrorIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_ErrorIndication_IEs__value_PR_SgNB_UE_X2AP_ID
+} X2N_ErrorIndication_IEs__value_PR;
+typedef enum X2N_ResetRequest_IEs__value_PR {
+	X2N_ResetRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResetRequest_IEs__value_PR_Cause
+} X2N_ResetRequest_IEs__value_PR;
+typedef enum X2N_ResetResponse_IEs__value_PR {
+	X2N_ResetResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResetResponse_IEs__value_PR_CriticalityDiagnostics
+} X2N_ResetResponse_IEs__value_PR;
+typedef enum X2N_X2SetupRequest_IEs__value_PR {
+	X2N_X2SetupRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2SetupRequest_IEs__value_PR_GlobalENB_ID,
+	X2N_X2SetupRequest_IEs__value_PR_ServedCells,
+	X2N_X2SetupRequest_IEs__value_PR_GUGroupIDList,
+	X2N_X2SetupRequest_IEs__value_PR_LHN_ID
+} X2N_X2SetupRequest_IEs__value_PR;
+typedef enum X2N_X2SetupResponse_IEs__value_PR {
+	X2N_X2SetupResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2SetupResponse_IEs__value_PR_GlobalENB_ID,
+	X2N_X2SetupResponse_IEs__value_PR_ServedCells,
+	X2N_X2SetupResponse_IEs__value_PR_GUGroupIDList,
+	X2N_X2SetupResponse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_X2SetupResponse_IEs__value_PR_LHN_ID
+} X2N_X2SetupResponse_IEs__value_PR;
+typedef enum X2N_X2SetupFailure_IEs__value_PR {
+	X2N_X2SetupFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2SetupFailure_IEs__value_PR_Cause,
+	X2N_X2SetupFailure_IEs__value_PR_TimeToWait,
+	X2N_X2SetupFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_X2SetupFailure_IEs__value_PR;
+typedef enum X2N_LoadInformation_IEs__value_PR {
+	X2N_LoadInformation_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_LoadInformation_IEs__value_PR_CellInformation_List
+} X2N_LoadInformation_IEs__value_PR;
+typedef enum X2N_ENBConfigurationUpdate_IEs__value_PR {
+	X2N_ENBConfigurationUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENBConfigurationUpdate_IEs__value_PR_ServedCells,
+	X2N_ENBConfigurationUpdate_IEs__value_PR_ServedCellsToModify,
+	X2N_ENBConfigurationUpdate_IEs__value_PR_Old_ECGIs,
+	X2N_ENBConfigurationUpdate_IEs__value_PR_GUGroupIDList,
+	X2N_ENBConfigurationUpdate_IEs__value_PR_CoverageModificationList
+} X2N_ENBConfigurationUpdate_IEs__value_PR;
+typedef enum X2N_ENBConfigurationUpdateAcknowledge_IEs__value_PR {
+	X2N_ENBConfigurationUpdateAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENBConfigurationUpdateAcknowledge_IEs__value_PR_CriticalityDiagnostics
+} X2N_ENBConfigurationUpdateAcknowledge_IEs__value_PR;
+typedef enum X2N_ENBConfigurationUpdateFailure_IEs__value_PR {
+	X2N_ENBConfigurationUpdateFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENBConfigurationUpdateFailure_IEs__value_PR_Cause,
+	X2N_ENBConfigurationUpdateFailure_IEs__value_PR_TimeToWait,
+	X2N_ENBConfigurationUpdateFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_ENBConfigurationUpdateFailure_IEs__value_PR;
+typedef enum X2N_ResourceStatusRequest_IEs__value_PR {
+	X2N_ResourceStatusRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResourceStatusRequest_IEs__value_PR_Measurement_ID,
+	X2N_ResourceStatusRequest_IEs__value_PR_Registration_Request,
+	X2N_ResourceStatusRequest_IEs__value_PR_ReportCharacteristics,
+	X2N_ResourceStatusRequest_IEs__value_PR_CellToReport_List,
+	X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicity,
+	X2N_ResourceStatusRequest_IEs__value_PR_PartialSuccessIndicator,
+	X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityRSRPMR,
+	X2N_ResourceStatusRequest_IEs__value_PR_ReportingPeriodicityCSIR
+} X2N_ResourceStatusRequest_IEs__value_PR;
+typedef enum X2N_ResourceStatusResponse_IEs__value_PR {
+	X2N_ResourceStatusResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResourceStatusResponse_IEs__value_PR_Measurement_ID,
+	X2N_ResourceStatusResponse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_ResourceStatusResponse_IEs__value_PR_MeasurementInitiationResult_List
+} X2N_ResourceStatusResponse_IEs__value_PR;
+typedef enum X2N_ResourceStatusFailure_IEs__value_PR {
+	X2N_ResourceStatusFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResourceStatusFailure_IEs__value_PR_Measurement_ID,
+	X2N_ResourceStatusFailure_IEs__value_PR_Cause,
+	X2N_ResourceStatusFailure_IEs__value_PR_CriticalityDiagnostics,
+	X2N_ResourceStatusFailure_IEs__value_PR_CompleteFailureCauseInformation_List
+} X2N_ResourceStatusFailure_IEs__value_PR;
+typedef enum X2N_ResourceStatusUpdate_IEs__value_PR {
+	X2N_ResourceStatusUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ResourceStatusUpdate_IEs__value_PR_Measurement_ID,
+	X2N_ResourceStatusUpdate_IEs__value_PR_CellMeasurementResult_List
+} X2N_ResourceStatusUpdate_IEs__value_PR;
+typedef enum X2N_MobilityChangeRequest_IEs__value_PR {
+	X2N_MobilityChangeRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_MobilityChangeRequest_IEs__value_PR_ECGI,
+	X2N_MobilityChangeRequest_IEs__value_PR_MobilityParametersInformation,
+	X2N_MobilityChangeRequest_IEs__value_PR_Cause
+} X2N_MobilityChangeRequest_IEs__value_PR;
+typedef enum X2N_MobilityChangeAcknowledge_IEs__value_PR {
+	X2N_MobilityChangeAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_MobilityChangeAcknowledge_IEs__value_PR_ECGI,
+	X2N_MobilityChangeAcknowledge_IEs__value_PR_CriticalityDiagnostics
+} X2N_MobilityChangeAcknowledge_IEs__value_PR;
+typedef enum X2N_MobilityChangeFailure_IEs__value_PR {
+	X2N_MobilityChangeFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_MobilityChangeFailure_IEs__value_PR_ECGI,
+	X2N_MobilityChangeFailure_IEs__value_PR_Cause,
+	X2N_MobilityChangeFailure_IEs__value_PR_MobilityParametersModificationRange,
+	X2N_MobilityChangeFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_MobilityChangeFailure_IEs__value_PR;
+typedef enum X2N_RLFIndication_IEs__value_PR {
+	X2N_RLFIndication_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_RLFIndication_IEs__value_PR_PCI,
+	X2N_RLFIndication_IEs__value_PR_ECGI,
+	X2N_RLFIndication_IEs__value_PR_CRNTI,
+	X2N_RLFIndication_IEs__value_PR_ShortMAC_I,
+	X2N_RLFIndication_IEs__value_PR_UE_RLF_Report_Container,
+	X2N_RLFIndication_IEs__value_PR_RRCConnSetupIndicator,
+	X2N_RLFIndication_IEs__value_PR_RRCConnReestabIndicator,
+	X2N_RLFIndication_IEs__value_PR_UE_RLF_Report_Container_for_extended_bands
+} X2N_RLFIndication_IEs__value_PR;
+typedef enum X2N_CellActivationRequest_IEs__value_PR {
+	X2N_CellActivationRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellActivationRequest_IEs__value_PR_ServedCellsToActivate
+} X2N_CellActivationRequest_IEs__value_PR;
+typedef enum X2N_CellActivationResponse_IEs__value_PR {
+	X2N_CellActivationResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellActivationResponse_IEs__value_PR_ActivatedCellList,
+	X2N_CellActivationResponse_IEs__value_PR_CriticalityDiagnostics
+} X2N_CellActivationResponse_IEs__value_PR;
+typedef enum X2N_CellActivationFailure_IEs__value_PR {
+	X2N_CellActivationFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_CellActivationFailure_IEs__value_PR_Cause,
+	X2N_CellActivationFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_CellActivationFailure_IEs__value_PR;
+typedef enum X2N_X2Release_IEs__value_PR {
+	X2N_X2Release_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2Release_IEs__value_PR_GlobalENB_ID
+} X2N_X2Release_IEs__value_PR;
+typedef enum X2N_X2APMessageTransfer_IEs__value_PR {
+	X2N_X2APMessageTransfer_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2APMessageTransfer_IEs__value_PR_RNL_Header,
+	X2N_X2APMessageTransfer_IEs__value_PR_X2AP_Message
+} X2N_X2APMessageTransfer_IEs__value_PR;
+typedef enum X2N_SeNBAdditionRequest_IEs__value_PR {
+	X2N_SeNBAdditionRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBAdditionRequest_IEs__value_PR_UESecurityCapabilities,
+	X2N_SeNBAdditionRequest_IEs__value_PR_SeNBSecurityKey,
+	X2N_SeNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate,
+	X2N_SeNBAdditionRequest_IEs__value_PR_PLMN_Identity,
+	X2N_SeNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_List,
+	X2N_SeNBAdditionRequest_IEs__value_PR_MeNBtoSeNBContainer,
+	X2N_SeNBAdditionRequest_IEs__value_PR_CSGMembershipStatus,
+	X2N_SeNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SeNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour
+} X2N_SeNBAdditionRequest_IEs__value_PR;
+typedef enum X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR {
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_List,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_TransportLayerAddress,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR_TunnelInformation
+} X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_SeNBAdditionRequestReject_IEs__value_PR {
+	X2N_SeNBAdditionRequestReject_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBAdditionRequestReject_IEs__value_PR_Cause,
+	X2N_SeNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBAdditionRequestReject_IEs__value_PR;
+typedef enum X2N_SeNBReconfigurationComplete_IEs__value_PR {
+	X2N_SeNBReconfigurationComplete_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBReconfigurationComplete_IEs__value_PR_ResponseInformationSeNBReconfComp,
+	X2N_SeNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBReconfigurationComplete_IEs__value_PR;
+typedef enum X2N_SeNBModificationRequest_IEs__value_PR {
+	X2N_SeNBModificationRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationRequest_IEs__value_PR_Cause,
+	X2N_SeNBModificationRequest_IEs__value_PR_SCGChangeIndication,
+	X2N_SeNBModificationRequest_IEs__value_PR_PLMN_Identity,
+	X2N_SeNBModificationRequest_IEs__value_PR_UE_ContextInformationSeNBModReq,
+	X2N_SeNBModificationRequest_IEs__value_PR_MeNBtoSeNBContainer,
+	X2N_SeNBModificationRequest_IEs__value_PR_CSGMembershipStatus,
+	X2N_SeNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationRequest_IEs__value_PR;
+typedef enum X2N_SeNBModificationRequestAcknowledge_IEs__value_PR {
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_ModAckList,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_ModAckList,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_ModAckList,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_SeNBtoMeNBContainer,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_SeNBModificationRequestReject_IEs__value_PR {
+	X2N_SeNBModificationRequestReject_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationRequestReject_IEs__value_PR_Cause,
+	X2N_SeNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationRequestReject_IEs__value_PR;
+typedef enum X2N_SeNBModificationRequired_IEs__value_PR {
+	X2N_SeNBModificationRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationRequired_IEs__value_PR_Cause,
+	X2N_SeNBModificationRequired_IEs__value_PR_SCGChangeIndication,
+	X2N_SeNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_ModReqd,
+	X2N_SeNBModificationRequired_IEs__value_PR_SeNBtoMeNBContainer,
+	X2N_SeNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationRequired_IEs__value_PR;
+typedef enum X2N_SeNBModificationConfirm_IEs__value_PR {
+	X2N_SeNBModificationConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationConfirm_IEs__value_PR_MeNBtoSeNBContainer,
+	X2N_SeNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationConfirm_IEs__value_PR;
+typedef enum X2N_SeNBModificationRefuse_IEs__value_PR {
+	X2N_SeNBModificationRefuse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBModificationRefuse_IEs__value_PR_Cause,
+	X2N_SeNBModificationRefuse_IEs__value_PR_MeNBtoSeNBContainer,
+	X2N_SeNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBModificationRefuse_IEs__value_PR;
+typedef enum X2N_SeNBReleaseRequest_IEs__value_PR {
+	X2N_SeNBReleaseRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBReleaseRequest_IEs__value_PR_Cause,
+	X2N_SeNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_List_RelReq,
+	X2N_SeNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator,
+	X2N_SeNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SeNBReleaseRequest_IEs__value_PR_MakeBeforeBreakIndicator
+} X2N_SeNBReleaseRequest_IEs__value_PR;
+typedef enum X2N_SeNBReleaseRequired_IEs__value_PR {
+	X2N_SeNBReleaseRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBReleaseRequired_IEs__value_PR_Cause,
+	X2N_SeNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBReleaseRequired_IEs__value_PR;
+typedef enum X2N_SeNBReleaseConfirm_IEs__value_PR {
+	X2N_SeNBReleaseConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_List_RelConf,
+	X2N_SeNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SeNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBReleaseConfirm_IEs__value_PR;
+typedef enum X2N_SeNBCounterCheckRequest_IEs__value_PR {
+	X2N_SeNBCounterCheckRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SeNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToCounterCheck_List,
+	X2N_SeNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SeNBCounterCheckRequest_IEs__value_PR;
+typedef enum X2N_X2RemovalRequest_IEs__value_PR {
+	X2N_X2RemovalRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2RemovalRequest_IEs__value_PR_GlobalENB_ID,
+	X2N_X2RemovalRequest_IEs__value_PR_X2BenefitValue
+} X2N_X2RemovalRequest_IEs__value_PR;
+typedef enum X2N_X2RemovalResponse_IEs__value_PR {
+	X2N_X2RemovalResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2RemovalResponse_IEs__value_PR_GlobalENB_ID,
+	X2N_X2RemovalResponse_IEs__value_PR_CriticalityDiagnostics
+} X2N_X2RemovalResponse_IEs__value_PR;
+typedef enum X2N_X2RemovalFailure_IEs__value_PR {
+	X2N_X2RemovalFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_X2RemovalFailure_IEs__value_PR_Cause,
+	X2N_X2RemovalFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_X2RemovalFailure_IEs__value_PR;
+typedef enum X2N_RetrieveUEContextRequest_IEs__value_PR {
+	X2N_RetrieveUEContextRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_RetrieveUEContextRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_ResumeID,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_ShortMAC_I,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_EUTRANCellIdentifier,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_CRNTI,
+	X2N_RetrieveUEContextRequest_IEs__value_PR_PCI
+} X2N_RetrieveUEContextRequest_IEs__value_PR;
+typedef enum X2N_RetrieveUEContextResponse_IEs__value_PR {
+	X2N_RetrieveUEContextResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_GUMMEI,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_UE_ContextInformationRetrieve,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_TraceActivation,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_SRVCCOperationPossible,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_Masked_IMEISV,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_ExpectedUEBehaviour,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_ProSeAuthorized,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_V2XServicesAuthorized,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_AerialUEsubscriptionInformation,
+	X2N_RetrieveUEContextResponse_IEs__value_PR_Subscription_Based_UE_DifferentiationInfo
+} X2N_RetrieveUEContextResponse_IEs__value_PR;
+typedef enum X2N_RetrieveUEContextFailure_IEs__value_PR {
+	X2N_RetrieveUEContextFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_RetrieveUEContextFailure_IEs__value_PR_UE_X2AP_ID,
+	X2N_RetrieveUEContextFailure_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_RetrieveUEContextFailure_IEs__value_PR_Cause,
+	X2N_RetrieveUEContextFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_RetrieveUEContextFailure_IEs__value_PR;
+typedef enum X2N_SgNBAdditionRequest_IEs__value_PR {
+	X2N_SgNBAdditionRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBAdditionRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBAdditionRequest_IEs__value_PR_NRUESecurityCapabilities,
+	X2N_SgNBAdditionRequest_IEs__value_PR_SgNBSecurityKey,
+	X2N_SgNBAdditionRequest_IEs__value_PR_UEAggregateMaximumBitRate,
+	X2N_SgNBAdditionRequest_IEs__value_PR_PLMN_Identity,
+	X2N_SgNBAdditionRequest_IEs__value_PR_HandoverRestrictionList,
+	X2N_SgNBAdditionRequest_IEs__value_PR_E_RABs_ToBeAdded_SgNBAddReqList,
+	X2N_SgNBAdditionRequest_IEs__value_PR_MeNBtoSgNBContainer,
+	X2N_SgNBAdditionRequest_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBAdditionRequest_IEs__value_PR_ExpectedUEBehaviour,
+	X2N_SgNBAdditionRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBAdditionRequest_IEs__value_PR_SplitSRBs,
+	X2N_SgNBAdditionRequest_IEs__value_PR_MeNBResourceCoordinationInformation,
+	X2N_SgNBAdditionRequest_IEs__value_PR_SGNB_Addition_Trigger_Ind,
+	X2N_SgNBAdditionRequest_IEs__value_PR_SubscriberProfileIDforRFP,
+	X2N_SgNBAdditionRequest_IEs__value_PR_ECGI
+} X2N_SgNBAdditionRequest_IEs__value_PR;
+typedef enum X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR {
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RAB_List,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SplitSRBs,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation,
+	X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_RRC_Config_Ind
+} X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_SgNBAdditionRequestReject_IEs__value_PR {
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_Cause,
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBAdditionRequestReject_IEs__value_PR;
+typedef enum X2N_SgNBReconfigurationComplete_IEs__value_PR {
+	X2N_SgNBReconfigurationComplete_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReconfigurationComplete_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReconfigurationComplete_IEs__value_PR_ResponseInformationSgNBReconfComp,
+	X2N_SgNBReconfigurationComplete_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBReconfigurationComplete_IEs__value_PR;
+typedef enum X2N_SgNBModificationRequest_IEs__value_PR {
+	X2N_SgNBModificationRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationRequest_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationRequest_IEs__value_PR_Cause,
+	X2N_SgNBModificationRequest_IEs__value_PR_PLMN_Identity,
+	X2N_SgNBModificationRequest_IEs__value_PR_HandoverRestrictionList,
+	X2N_SgNBModificationRequest_IEs__value_PR_SCGConfigurationQuery,
+	X2N_SgNBModificationRequest_IEs__value_PR_UE_ContextInformation_SgNBModReq,
+	X2N_SgNBModificationRequest_IEs__value_PR_MeNBtoSgNBContainer,
+	X2N_SgNBModificationRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBModificationRequest_IEs__value_PR_MeNBResourceCoordinationInformation,
+	X2N_SgNBModificationRequest_IEs__value_PR_SplitSRBs
+} X2N_SgNBModificationRequest_IEs__value_PR;
+typedef enum X2N_SgNBModificationRequestAcknowledge_IEs__value_PR {
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBModAckList,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeModified_SgNBModAckList,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBModAckList,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_E_RAB_List,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SgNBResourceCoordinationInformation,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_SplitSRBs,
+	X2N_SgNBModificationRequestAcknowledge_IEs__value_PR_RRC_Config_Ind
+} X2N_SgNBModificationRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_SgNBModificationRequestReject_IEs__value_PR {
+	X2N_SgNBModificationRequestReject_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationRequestReject_IEs__value_PR_Cause,
+	X2N_SgNBModificationRequestReject_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBModificationRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBModificationRequestReject_IEs__value_PR;
+typedef enum X2N_SgNBModificationRequired_IEs__value_PR {
+	X2N_SgNBModificationRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationRequired_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationRequired_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationRequired_IEs__value_PR_Cause,
+	X2N_SgNBModificationRequired_IEs__value_PR_PDCPChangeIndication,
+	X2N_SgNBModificationRequired_IEs__value_PR_E_RABs_ToBeReleased_SgNBModReqdList,
+	X2N_SgNBModificationRequired_IEs__value_PR_SgNBtoMeNBContainer,
+	X2N_SgNBModificationRequired_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBModificationRequired_IEs__value_PR_E_RABs_ToBeModified_SgNBModReqdList,
+	X2N_SgNBModificationRequired_IEs__value_PR_SgNBResourceCoordinationInformation,
+	X2N_SgNBModificationRequired_IEs__value_PR_RRC_Config_Ind
+} X2N_SgNBModificationRequired_IEs__value_PR;
+typedef enum X2N_SgNBModificationConfirm_IEs__value_PR {
+	X2N_SgNBModificationConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationConfirm_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationConfirm_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationConfirm_IEs__value_PR_E_RABs_AdmittedToBeModified_SgNBModConfList,
+	X2N_SgNBModificationConfirm_IEs__value_PR_MeNBtoSgNBContainer,
+	X2N_SgNBModificationConfirm_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBModificationConfirm_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBModificationConfirm_IEs__value_PR_MeNBResourceCoordinationInformation
+} X2N_SgNBModificationConfirm_IEs__value_PR;
+typedef enum X2N_SgNBModificationRefuse_IEs__value_PR {
+	X2N_SgNBModificationRefuse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBModificationRefuse_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBModificationRefuse_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBModificationRefuse_IEs__value_PR_Cause,
+	X2N_SgNBModificationRefuse_IEs__value_PR_MeNBtoSgNBContainer,
+	X2N_SgNBModificationRefuse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBModificationRefuse_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBModificationRefuse_IEs__value_PR;
+typedef enum X2N_SgNBReleaseRequest_IEs__value_PR {
+	X2N_SgNBReleaseRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReleaseRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReleaseRequest_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReleaseRequest_IEs__value_PR_Cause,
+	X2N_SgNBReleaseRequest_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqList,
+	X2N_SgNBReleaseRequest_IEs__value_PR_UE_ContextKeptIndicator,
+	X2N_SgNBReleaseRequest_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBReleaseRequest_IEs__value_PR_MeNBtoSgNBContainer
+} X2N_SgNBReleaseRequest_IEs__value_PR;
+typedef enum X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR {
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList
+} X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR;
+typedef enum X2N_SgNBReleaseRequestReject_IEs__value_PR {
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_Cause,
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBReleaseRequestReject_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBReleaseRequestReject_IEs__value_PR;
+typedef enum X2N_SgNBReleaseRequired_IEs__value_PR {
+	X2N_SgNBReleaseRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReleaseRequired_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReleaseRequired_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReleaseRequired_IEs__value_PR_Cause,
+	X2N_SgNBReleaseRequired_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_SgNBReleaseRequired_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelReqdList
+} X2N_SgNBReleaseRequired_IEs__value_PR;
+typedef enum X2N_SgNBReleaseConfirm_IEs__value_PR {
+	X2N_SgNBReleaseConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBReleaseConfirm_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBReleaseConfirm_IEs__value_PR_E_RABs_ToBeReleased_SgNBRelConfList,
+	X2N_SgNBReleaseConfirm_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBReleaseConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBReleaseConfirm_IEs__value_PR;
+typedef enum X2N_SgNBCounterCheckRequest_IEs__value_PR {
+	X2N_SgNBCounterCheckRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBCounterCheckRequest_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBCounterCheckRequest_IEs__value_PR_E_RABs_SubjectToSgNBCounterCheck_List,
+	X2N_SgNBCounterCheckRequest_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBCounterCheckRequest_IEs__value_PR;
+typedef enum X2N_SgNBChangeRequired_IEs__value_PR {
+	X2N_SgNBChangeRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBChangeRequired_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBChangeRequired_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBChangeRequired_IEs__value_PR_GlobalGNB_ID,
+	X2N_SgNBChangeRequired_IEs__value_PR_Cause,
+	X2N_SgNBChangeRequired_IEs__value_PR_SgNBtoMeNBContainer,
+	X2N_SgNBChangeRequired_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBChangeRequired_IEs__value_PR;
+typedef enum X2N_SgNBChangeConfirm_IEs__value_PR {
+	X2N_SgNBChangeConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBChangeConfirm_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBChangeConfirm_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBChangeConfirm_IEs__value_PR_E_RABs_ToBeReleased_SgNBChaConfList,
+	X2N_SgNBChangeConfirm_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBChangeConfirm_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBChangeConfirm_IEs__value_PR;
+typedef enum X2N_RRCTransfer_IEs__value_PR {
+	X2N_RRCTransfer_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_RRCTransfer_IEs__value_PR_UE_X2AP_ID,
+	X2N_RRCTransfer_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_RRCTransfer_IEs__value_PR_SplitSRB,
+	X2N_RRCTransfer_IEs__value_PR_UENRMeasurement,
+	X2N_RRCTransfer_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_RRCTransfer_IEs__value_PR;
+typedef enum X2N_SgNBChangeRefuse_IEs__value_PR {
+	X2N_SgNBChangeRefuse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBChangeRefuse_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBChangeRefuse_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBChangeRefuse_IEs__value_PR_Cause,
+	X2N_SgNBChangeRefuse_IEs__value_PR_CriticalityDiagnostics,
+	X2N_SgNBChangeRefuse_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBChangeRefuse_IEs__value_PR;
+typedef enum X2N_ENDCX2SetupRequest_IEs__value_PR {
+	X2N_ENDCX2SetupRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2SetupRequest_IEs__value_PR_InitiatingNodeType_EndcX2Setup
+} X2N_ENDCX2SetupRequest_IEs__value_PR;
+typedef enum X2N_ENB_ENDCX2SetupReqIEs__value_PR {
+	X2N_ENB_ENDCX2SetupReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_ENDCX2SetupReqIEs__value_PR_GlobalENB_ID,
+	X2N_ENB_ENDCX2SetupReqIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList
+} X2N_ENB_ENDCX2SetupReqIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCX2SetupReqIEs__value_PR {
+	X2N_En_gNB_ENDCX2SetupReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCX2SetupReqIEs__value_PR_GlobalGNB_ID,
+	X2N_En_gNB_ENDCX2SetupReqIEs__value_PR_ServedNRcellsENDCX2ManagementList
+} X2N_En_gNB_ENDCX2SetupReqIEs__value_PR;
+typedef enum X2N_ENDCX2SetupResponse_IEs__value_PR {
+	X2N_ENDCX2SetupResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2SetupResponse_IEs__value_PR_RespondingNodeType_EndcX2Setup
+} X2N_ENDCX2SetupResponse_IEs__value_PR;
+typedef enum X2N_ENB_ENDCX2SetupReqAckIEs__value_PR {
+	X2N_ENB_ENDCX2SetupReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_ENDCX2SetupReqAckIEs__value_PR_GlobalENB_ID,
+	X2N_ENB_ENDCX2SetupReqAckIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList
+} X2N_ENB_ENDCX2SetupReqAckIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR {
+	X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR_GlobalGNB_ID,
+	X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR_ServedNRcellsENDCX2ManagementList
+} X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR;
+typedef enum X2N_ENDCX2SetupFailure_IEs__value_PR {
+	X2N_ENDCX2SetupFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2SetupFailure_IEs__value_PR_Cause,
+	X2N_ENDCX2SetupFailure_IEs__value_PR_CriticalityDiagnostics,
+	X2N_ENDCX2SetupFailure_IEs__value_PR_TimeToWait
+} X2N_ENDCX2SetupFailure_IEs__value_PR;
+typedef enum X2N_ENDCConfigurationUpdate_IEs__value_PR {
+	X2N_ENDCConfigurationUpdate_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCConfigurationUpdate_IEs__value_PR_InitiatingNodeType_EndcConfigUpdate
+} X2N_ENDCConfigurationUpdate_IEs__value_PR;
+typedef enum X2N_ENB_ENDCConfigUpdateIEs__value_PR {
+	X2N_ENB_ENDCConfigUpdateIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_ENDCConfigUpdateIEs__value_PR_CellAssistanceInformation,
+	X2N_ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsENDCX2ManagementList,
+	X2N_ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsToModifyListENDCConfUpd,
+	X2N_ENB_ENDCConfigUpdateIEs__value_PR_ServedEUTRAcellsToDeleteListENDCConfUpd
+} X2N_ENB_ENDCConfigUpdateIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCConfigUpdateIEs__value_PR {
+	X2N_En_gNB_ENDCConfigUpdateIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsENDCX2ManagementList,
+	X2N_En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsToModifyENDCConfUpdList,
+	X2N_En_gNB_ENDCConfigUpdateIEs__value_PR_ServedNRcellsToDeleteENDCConfUpdList
+} X2N_En_gNB_ENDCConfigUpdateIEs__value_PR;
+typedef enum X2N_ENDCConfigurationUpdateAcknowledge_IEs__value_PR {
+	X2N_ENDCConfigurationUpdateAcknowledge_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCConfigurationUpdateAcknowledge_IEs__value_PR_RespondingNodeType_EndcConfigUpdate
+} X2N_ENDCConfigurationUpdateAcknowledge_IEs__value_PR;
+typedef enum X2N_ENB_ENDCConfigUpdateAckIEs__value_PR {
+	X2N_ENB_ENDCConfigUpdateAckIEs__value_PR_NOTHING	/* No components present */
+	
+} X2N_ENB_ENDCConfigUpdateAckIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCConfigUpdateAckIEs__value_PR {
+	X2N_En_gNB_ENDCConfigUpdateAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCConfigUpdateAckIEs__value_PR_ServedNRcellsENDCX2ManagementList
+} X2N_En_gNB_ENDCConfigUpdateAckIEs__value_PR;
+typedef enum X2N_ENDCConfigurationUpdateFailure_IEs__value_PR {
+	X2N_ENDCConfigurationUpdateFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCConfigurationUpdateFailure_IEs__value_PR_Cause,
+	X2N_ENDCConfigurationUpdateFailure_IEs__value_PR_CriticalityDiagnostics,
+	X2N_ENDCConfigurationUpdateFailure_IEs__value_PR_TimeToWait
+} X2N_ENDCConfigurationUpdateFailure_IEs__value_PR;
+typedef enum X2N_ENDCCellActivationRequest_IEs__value_PR {
+	X2N_ENDCCellActivationRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCCellActivationRequest_IEs__value_PR_ServedNRCellsToActivate,
+	X2N_ENDCCellActivationRequest_IEs__value_PR_ActivationID
+} X2N_ENDCCellActivationRequest_IEs__value_PR;
+typedef enum X2N_ENDCCellActivationResponse_IEs__value_PR {
+	X2N_ENDCCellActivationResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCCellActivationResponse_IEs__value_PR_ActivatedNRCellList,
+	X2N_ENDCCellActivationResponse_IEs__value_PR_ActivationID,
+	X2N_ENDCCellActivationResponse_IEs__value_PR_CriticalityDiagnostics
+} X2N_ENDCCellActivationResponse_IEs__value_PR;
+typedef enum X2N_ENDCCellActivationFailure_IEs__value_PR {
+	X2N_ENDCCellActivationFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCCellActivationFailure_IEs__value_PR_ActivationID,
+	X2N_ENDCCellActivationFailure_IEs__value_PR_Cause,
+	X2N_ENDCCellActivationFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_ENDCCellActivationFailure_IEs__value_PR;
+typedef enum X2N_SecondaryRATDataUsageReport_IEs__value_PR {
+	X2N_SecondaryRATDataUsageReport_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SecondaryRATDataUsageReport_IEs__value_PR_UE_X2AP_ID,
+	X2N_SecondaryRATDataUsageReport_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SecondaryRATDataUsageReport_IEs__value_PR_SecondaryRATUsageReportList,
+	X2N_SecondaryRATDataUsageReport_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SecondaryRATDataUsageReport_IEs__value_PR;
+typedef enum X2N_SgNBActivityNotification_IEs__value_PR {
+	X2N_SgNBActivityNotification_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_SgNBActivityNotification_IEs__value_PR_UE_X2AP_ID,
+	X2N_SgNBActivityNotification_IEs__value_PR_SgNB_UE_X2AP_ID,
+	X2N_SgNBActivityNotification_IEs__value_PR_UserPlaneTrafficActivityReport,
+	X2N_SgNBActivityNotification_IEs__value_PR_ERABActivityNotifyItemList,
+	X2N_SgNBActivityNotification_IEs__value_PR_UE_X2AP_ID_Extension
+} X2N_SgNBActivityNotification_IEs__value_PR;
+typedef enum X2N_ENDCPartialResetRequired_IEs__value_PR {
+	X2N_ENDCPartialResetRequired_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCPartialResetRequired_IEs__value_PR_UEsToBeResetList,
+	X2N_ENDCPartialResetRequired_IEs__value_PR_Cause
+} X2N_ENDCPartialResetRequired_IEs__value_PR;
+typedef enum X2N_ENDCPartialResetConfirm_IEs__value_PR {
+	X2N_ENDCPartialResetConfirm_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCPartialResetConfirm_IEs__value_PR_UEsToBeResetList
+} X2N_ENDCPartialResetConfirm_IEs__value_PR;
+typedef enum X2N_EUTRANRCellResourceCoordinationRequest_IEs__value_PR {
+	X2N_EUTRANRCellResourceCoordinationRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_EUTRANRCellResourceCoordinationRequest_IEs__value_PR_InitiatingNodeType_EutranrCellResourceCoordination
+} X2N_EUTRANRCellResourceCoordinationRequest_IEs__value_PR;
+typedef enum X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR {
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_DataTrafficResourceIndication,
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_SpectrumSharingGroupID,
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofEUTRACellsinEUTRACoordinationReq
+} X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR;
+typedef enum X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR {
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_DataTrafficResourceIndication,
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofEUTRACellsinNRCoordinationReq,
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_SpectrumSharingGroupID,
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR_ListofNRCellsinNRCoordinationReq
+} X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR;
+typedef enum X2N_EUTRANRCellResourceCoordinationResponse_IEs__value_PR {
+	X2N_EUTRANRCellResourceCoordinationResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_EUTRANRCellResourceCoordinationResponse_IEs__value_PR_RespondingNodeType_EutranrCellResourceCoordination
+} X2N_EUTRANRCellResourceCoordinationResponse_IEs__value_PR;
+typedef enum X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR {
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_DataTrafficResourceIndication,
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_SpectrumSharingGroupID,
+	X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_ListofEUTRACellsinEUTRACoordinationResp
+} X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR;
+typedef enum X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR {
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_DataTrafficResourceIndication,
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_SpectrumSharingGroupID,
+	X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR_ListofNRCellsinNRCoordinationResp
+} X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR;
+typedef enum X2N_ENDCX2RemovalRequest_IEs__value_PR {
+	X2N_ENDCX2RemovalRequest_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2RemovalRequest_IEs__value_PR_InitiatingNodeType_EndcX2Removal
+} X2N_ENDCX2RemovalRequest_IEs__value_PR;
+typedef enum X2N_ENB_ENDCX2RemovalReqIEs__value_PR {
+	X2N_ENB_ENDCX2RemovalReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_ENDCX2RemovalReqIEs__value_PR_GlobalENB_ID
+} X2N_ENB_ENDCX2RemovalReqIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCX2RemovalReqIEs__value_PR {
+	X2N_En_gNB_ENDCX2RemovalReqIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCX2RemovalReqIEs__value_PR_GlobalGNB_ID
+} X2N_En_gNB_ENDCX2RemovalReqIEs__value_PR;
+typedef enum X2N_ENDCX2RemovalResponse_IEs__value_PR {
+	X2N_ENDCX2RemovalResponse_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2RemovalResponse_IEs__value_PR_RespondingNodeType_EndcX2Removal
+} X2N_ENDCX2RemovalResponse_IEs__value_PR;
+typedef enum X2N_ENB_ENDCX2RemovalReqAckIEs__value_PR {
+	X2N_ENB_ENDCX2RemovalReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENB_ENDCX2RemovalReqAckIEs__value_PR_GlobalENB_ID
+} X2N_ENB_ENDCX2RemovalReqAckIEs__value_PR;
+typedef enum X2N_En_gNB_ENDCX2RemovalReqAckIEs__value_PR {
+	X2N_En_gNB_ENDCX2RemovalReqAckIEs__value_PR_NOTHING,	/* No components present */
+	X2N_En_gNB_ENDCX2RemovalReqAckIEs__value_PR_GlobalGNB_ID
+} X2N_En_gNB_ENDCX2RemovalReqAckIEs__value_PR;
+typedef enum X2N_ENDCX2RemovalFailure_IEs__value_PR {
+	X2N_ENDCX2RemovalFailure_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_ENDCX2RemovalFailure_IEs__value_PR_Cause,
+	X2N_ENDCX2RemovalFailure_IEs__value_PR_CriticalityDiagnostics
+} X2N_ENDCX2RemovalFailure_IEs__value_PR;
+typedef enum X2N_DataForwardingAddressIndication_IEs__value_PR {
+	X2N_DataForwardingAddressIndication_IEs__value_PR_NOTHING,	/* No components present */
+	X2N_DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID_Extension,
+	X2N_DataForwardingAddressIndication_IEs__value_PR_UE_X2AP_ID,
+	X2N_DataForwardingAddressIndication_IEs__value_PR_E_RABs_DataForwardingAddress_List
+} X2N_DataForwardingAddressIndication_IEs__value_PR;
+typedef enum X2N_GNBStatusIndicationIEs__value_PR {
+	X2N_GNBStatusIndicationIEs__value_PR_NOTHING,	/* No components present */
+	X2N_GNBStatusIndicationIEs__value_PR_GNBOverloadInformation
+} X2N_GNBStatusIndicationIEs__value_PR;
+
+/* X2N_ProtocolIE-Field */
+typedef struct X2N_E_RABs_ToBeSetup_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeSetup_ItemIEs__value {
+		X2N_E_RABs_ToBeSetup_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeSetup_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeSetup_Item_t	 E_RABs_ToBeSetup_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetup_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ItemIEs__value {
+		X2N_E_RABs_Admitted_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_Item_t	 E_RABs_Admitted_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ItemIEs_t;
+typedef struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value {
+		X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__value_PR present;
+		union X2N_E_RABs_SubjectToStatusTransfer_ItemIEs__X2N_value_u {
+			X2N_E_RABs_SubjectToStatusTransfer_Item_t	 E_RABs_SubjectToStatusTransfer_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_t;
+typedef struct X2N_CellInformation_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellInformation_ItemIEs__value {
+		X2N_CellInformation_ItemIEs__value_PR present;
+		union X2N_CellInformation_ItemIEs__X2N_value_u {
+			X2N_CellInformation_Item_t	 CellInformation_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellInformation_ItemIEs_t;
+typedef struct X2N_CellToReport_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellToReport_ItemIEs__value {
+		X2N_CellToReport_ItemIEs__value_PR present;
+		union X2N_CellToReport_ItemIEs__X2N_value_u {
+			X2N_CellToReport_Item_t	 CellToReport_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellToReport_ItemIEs_t;
+typedef struct X2N_MeasurementInitiationResult_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MeasurementInitiationResult_ItemIEs__value {
+		X2N_MeasurementInitiationResult_ItemIEs__value_PR present;
+		union X2N_MeasurementInitiationResult_ItemIEs__X2N_value_u {
+			X2N_MeasurementInitiationResult_Item_t	 MeasurementInitiationResult_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementInitiationResult_ItemIEs_t;
+typedef struct X2N_MeasurementFailureCause_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MeasurementFailureCause_ItemIEs__value {
+		X2N_MeasurementFailureCause_ItemIEs__value_PR present;
+		union X2N_MeasurementFailureCause_ItemIEs__X2N_value_u {
+			X2N_MeasurementFailureCause_Item_t	 MeasurementFailureCause_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MeasurementFailureCause_ItemIEs_t;
+typedef struct X2N_CompleteFailureCauseInformation_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CompleteFailureCauseInformation_ItemIEs__value {
+		X2N_CompleteFailureCauseInformation_ItemIEs__value_PR present;
+		union X2N_CompleteFailureCauseInformation_ItemIEs__X2N_value_u {
+			X2N_CompleteFailureCauseInformation_Item_t	 CompleteFailureCauseInformation_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CompleteFailureCauseInformation_ItemIEs_t;
+typedef struct X2N_CellMeasurementResult_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellMeasurementResult_ItemIEs__value {
+		X2N_CellMeasurementResult_ItemIEs__value_PR present;
+		union X2N_CellMeasurementResult_ItemIEs__X2N_value_u {
+			X2N_CellMeasurementResult_Item_t	 CellMeasurementResult_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellMeasurementResult_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_ItemIEs__value {
+		X2N_E_RABs_ToBeAdded_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeAdded_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeAdded_Item_t	 E_RABs_ToBeAdded_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeAdded_Item_t	 E_RABs_Admitted_ToBeAdded_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_ModReqItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_ModReqItemIEs__value {
+		X2N_E_RABs_ToBeAdded_ModReqItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeAdded_ModReqItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeAdded_ModReqItem_t	 E_RABs_ToBeAdded_ModReqItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_ModReqItemIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_ModReqItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_ModReqItemIEs__value {
+		X2N_E_RABs_ToBeModified_ModReqItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeModified_ModReqItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeModified_ModReqItem_t	 E_RABs_ToBeModified_ModReqItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_ModReqItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_ModReqItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_ModReqItemIEs__value {
+		X2N_E_RABs_ToBeReleased_ModReqItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_ModReqItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_ModReqItem_t	 E_RABs_ToBeReleased_ModReqItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeAdded_ModAckItem_t	 E_RABs_Admitted_ToBeAdded_ModAckItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeModified_ModAckItem_t	 E_RABs_Admitted_ToBeModified_ModAckItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToReleased_ModAckItem_t	 E_RABs_Admitted_ToReleased_ModAckItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value {
+		X2N_E_RABs_ToBeReleased_ModReqdItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_ModReqdItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_ModReqdItem_t	 E_RABs_ToBeReleased_ModReqdItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_ModReqdItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelReqItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelReqItemIEs__value {
+		X2N_E_RABs_ToBeReleased_RelReqItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_RelReqItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_RelReqItem_t	 E_RABs_ToBeReleased_RelReqItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelReqItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_RelConfItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_RelConfItemIEs__value {
+		X2N_E_RABs_ToBeReleased_RelConfItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_RelConfItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_RelConfItem_t	 E_RABs_ToBeReleased_RelConfItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_RelConfItemIEs_t;
+typedef struct X2N_E_RABs_SubjectToCounterCheckItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToCounterCheckItemIEs__value {
+		X2N_E_RABs_SubjectToCounterCheckItemIEs__value_PR present;
+		union X2N_E_RABs_SubjectToCounterCheckItemIEs__X2N_value_u {
+			X2N_E_RABs_SubjectToCounterCheckItem_t	 E_RABs_SubjectToCounterCheckItem;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToCounterCheckItemIEs_t;
+typedef struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value {
+		X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeSetupRetrieve_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeSetupRetrieve_Item_t	 E_RABs_ToBeSetupRetrieve_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value {
+		X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeAdded_SgNBAddReq_Item_t	 E_RABs_ToBeAdded_SgNBAddReq_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t	 E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value {
+		X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeAdded_SgNBModReq_Item_t	 E_RABs_ToBeAdded_SgNBModReq_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value {
+		X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeModified_SgNBModReq_Item_t	 E_RABs_ToBeModified_SgNBModReq_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBModReq_Item_t	 E_RABs_ToBeReleased_SgNBModReq_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_t	 E_RABs_Admitted_ToBeAdded_SgNBModAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_Item_t	 E_RABs_Admitted_ToBeModified_SgNBModAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToReleased_SgNBModAck_Item_t	 E_RABs_Admitted_ToReleased_SgNBModAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBModReqd_Item_t	 E_RABs_ToBeReleased_SgNBModReqd_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value {
+		X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeModified_SgNBModReqd_Item_t	 E_RABs_ToBeModified_SgNBModReqd_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_t;
+typedef struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value {
+		X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__value_PR present;
+		union X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs__X2N_value_u {
+			X2N_E_RABs_AdmittedToBeModified_SgNBModConf_Item_t	 E_RABs_AdmittedToBeModified_SgNBModConf_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBRelReq_Item_t	 E_RABs_ToBeReleased_SgNBRelReq_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_t;
+typedef struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value {
+		X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__value_PR present;
+		union X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item_t	 E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBRelReqd_Item_t	 E_RABs_ToBeReleased_SgNBRelReqd_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBRelConf_Item_t	 E_RABs_ToBeReleased_SgNBRelConf_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_t;
+typedef struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value {
+		X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__value_PR present;
+		union X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs__X2N_value_u {
+			X2N_E_RABs_SubjectToSgNBCounterCheck_Item_t	 E_RABs_SubjectToSgNBCounterCheck_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_t;
+typedef struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value {
+		X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__value_PR present;
+		union X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs__X2N_value_u {
+			X2N_E_RABs_ToBeReleased_SgNBChaConf_Item_t	 E_RABs_ToBeReleased_SgNBChaConf_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_t;
+typedef struct X2N_E_RABs_DataForwardingAddress_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABs_DataForwardingAddress_ItemIEs__value {
+		X2N_E_RABs_DataForwardingAddress_ItemIEs__value_PR present;
+		union X2N_E_RABs_DataForwardingAddress_ItemIEs__X2N_value_u {
+			X2N_E_RABs_DataForwardingAddress_Item_t	 E_RABs_DataForwardingAddress_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABs_DataForwardingAddress_ItemIEs_t;
+typedef struct X2N_E_RAB_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RAB_ItemIEs__value {
+		X2N_E_RAB_ItemIEs__value_PR present;
+		union X2N_E_RAB_ItemIEs__X2N_value_u {
+			X2N_E_RAB_Item_t	 E_RAB_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RAB_ItemIEs_t;
+typedef struct X2N_E_RABUsageReport_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_E_RABUsageReport_ItemIEs__value {
+		X2N_E_RABUsageReport_ItemIEs__value_PR present;
+		union X2N_E_RABUsageReport_ItemIEs__X2N_value_u {
+			X2N_E_RABUsageReport_Item_t	 E_RABUsageReport_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_E_RABUsageReport_ItemIEs_t;
+typedef struct X2N_SecondaryRATUsageReport_ItemIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SecondaryRATUsageReport_ItemIEs__value {
+		X2N_SecondaryRATUsageReport_ItemIEs__value_PR present;
+		union X2N_SecondaryRATUsageReport_ItemIEs__X2N_value_u {
+			X2N_SecondaryRATUsageReport_Item_t	 SecondaryRATUsageReport_Item;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATUsageReport_ItemIEs_t;
+typedef struct X2N_HandoverRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverRequest_IEs__value {
+		X2N_HandoverRequest_IEs__value_PR present;
+		union X2N_HandoverRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_ECGI_t	 ECGI;
+			X2N_GUMMEI_t	 GUMMEI;
+			X2N_UE_ContextInformation_t	 UE_ContextInformation;
+			X2N_UE_HistoryInformation_t	 UE_HistoryInformation;
+			X2N_TraceActivation_t	 TraceActivation;
+			X2N_SRVCCOperationPossible_t	 SRVCCOperationPossible;
+			X2N_CSGMembershipStatus_t	 CSGMembershipStatus;
+			X2N_MobilityInformation_t	 MobilityInformation;
+			X2N_Masked_IMEISV_t	 Masked_IMEISV;
+			X2N_UE_HistoryInformationFromTheUE_t	 UE_HistoryInformationFromTheUE;
+			X2N_ExpectedUEBehaviour_t	 ExpectedUEBehaviour;
+			X2N_ProSeAuthorized_t	 ProSeAuthorized;
+			X2N_UE_ContextReferenceAtSeNB_t	 UE_ContextReferenceAtSeNB;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_V2XServicesAuthorized_t	 V2XServicesAuthorized;
+			X2N_UE_ContextReferenceAtWT_t	 UE_ContextReferenceAtWT;
+			X2N_NRUESecurityCapabilities_t	 NRUESecurityCapabilities;
+			X2N_UE_ContextReferenceAtSgNB_t	 UE_ContextReferenceAtSgNB;
+			X2N_AerialUEsubscriptionInformation_t	 AerialUEsubscriptionInformation;
+			X2N_Subscription_Based_UE_DifferentiationInfo_t	 Subscription_Based_UE_DifferentiationInfo;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRequest_IEs_t;
+typedef struct X2N_HandoverRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverRequestAcknowledge_IEs__value {
+		X2N_HandoverRequestAcknowledge_IEs__value_PR present;
+		union X2N_HandoverRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_Admitted_List_t	 E_RABs_Admitted_List;
+			X2N_E_RAB_List_t	 E_RAB_List;
+			X2N_TargeteNBtoSource_eNBTransparentContainer_t	 TargeteNBtoSource_eNBTransparentContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_ContextKeptIndicator_t	 UE_ContextKeptIndicator;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverRequestAcknowledge_IEs_t;
+typedef struct X2N_HandoverPreparationFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverPreparationFailure_IEs__value {
+		X2N_HandoverPreparationFailure_IEs__value_PR present;
+		union X2N_HandoverPreparationFailure_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverPreparationFailure_IEs_t;
+typedef struct X2N_HandoverReport_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverReport_IEs__value {
+		X2N_HandoverReport_IEs__value_PR present;
+		union X2N_HandoverReport_IEs__X2N_value_u {
+			X2N_HandoverReportType_t	 HandoverReportType;
+			X2N_Cause_t	 Cause;
+			X2N_ECGI_t	 ECGI;
+			X2N_TargetCellInUTRAN_t	 TargetCellInUTRAN;
+			X2N_CRNTI_t	 CRNTI;
+			X2N_MobilityInformation_t	 MobilityInformation;
+			X2N_UE_RLF_Report_Container_t	 UE_RLF_Report_Container;
+			X2N_UE_RLF_Report_Container_for_extended_bands_t	 UE_RLF_Report_Container_for_extended_bands;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverReport_IEs_t;
+typedef struct X2N_SNStatusTransfer_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SNStatusTransfer_IEs__value {
+		X2N_SNStatusTransfer_IEs__value_PR present;
+		union X2N_SNStatusTransfer_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_SubjectToStatusTransfer_List_t	 E_RABs_SubjectToStatusTransfer_List;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SNStatusTransfer_IEs_t;
+typedef struct X2N_UEContextRelease_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UEContextRelease_IEs__value {
+		X2N_UEContextRelease_IEs__value_PR present;
+		union X2N_UEContextRelease_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SIPTOBearerDeactivationIndication_t	 SIPTOBearerDeactivationIndication;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEContextRelease_IEs_t;
+typedef struct X2N_HandoverCancel_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_HandoverCancel_IEs__value {
+		X2N_HandoverCancel_IEs__value_PR present;
+		union X2N_HandoverCancel_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_HandoverCancel_IEs_t;
+typedef struct X2N_ErrorIndication_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ErrorIndication_IEs__value {
+		X2N_ErrorIndication_IEs__value_PR present;
+		union X2N_ErrorIndication_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ErrorIndication_IEs_t;
+typedef struct X2N_ResetRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResetRequest_IEs__value {
+		X2N_ResetRequest_IEs__value_PR present;
+		union X2N_ResetRequest_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResetRequest_IEs_t;
+typedef struct X2N_ResetResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResetResponse_IEs__value {
+		X2N_ResetResponse_IEs__value_PR present;
+		union X2N_ResetResponse_IEs__X2N_value_u {
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResetResponse_IEs_t;
+typedef struct X2N_X2SetupRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2SetupRequest_IEs__value {
+		X2N_X2SetupRequest_IEs__value_PR present;
+		union X2N_X2SetupRequest_IEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_ServedCells_t	 ServedCells;
+			X2N_GUGroupIDList_t	 GUGroupIDList;
+			X2N_LHN_ID_t	 LHN_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupRequest_IEs_t;
+typedef struct X2N_X2SetupResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2SetupResponse_IEs__value {
+		X2N_X2SetupResponse_IEs__value_PR present;
+		union X2N_X2SetupResponse_IEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_ServedCells_t	 ServedCells;
+			X2N_GUGroupIDList_t	 GUGroupIDList;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_LHN_ID_t	 LHN_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupResponse_IEs_t;
+typedef struct X2N_X2SetupFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2SetupFailure_IEs__value {
+		X2N_X2SetupFailure_IEs__value_PR present;
+		union X2N_X2SetupFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_TimeToWait_t	 TimeToWait;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupFailure_IEs_t;
+typedef struct X2N_LoadInformation_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_LoadInformation_IEs__value {
+		X2N_LoadInformation_IEs__value_PR present;
+		union X2N_LoadInformation_IEs__X2N_value_u {
+			X2N_CellInformation_List_t	 CellInformation_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_LoadInformation_IEs_t;
+typedef struct X2N_ENBConfigurationUpdate_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENBConfigurationUpdate_IEs__value {
+		X2N_ENBConfigurationUpdate_IEs__value_PR present;
+		union X2N_ENBConfigurationUpdate_IEs__X2N_value_u {
+			X2N_ServedCells_t	 ServedCells;
+			X2N_ServedCellsToModify_t	 ServedCellsToModify;
+			X2N_Old_ECGIs_t	 Old_ECGIs;
+			X2N_GUGroupIDList_t	 GUGroupIDList;
+			X2N_CoverageModificationList_t	 CoverageModificationList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdate_IEs_t;
+typedef struct X2N_ENBConfigurationUpdateAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENBConfigurationUpdateAcknowledge_IEs__value {
+		X2N_ENBConfigurationUpdateAcknowledge_IEs__value_PR present;
+		union X2N_ENBConfigurationUpdateAcknowledge_IEs__X2N_value_u {
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdateAcknowledge_IEs_t;
+typedef struct X2N_ENBConfigurationUpdateFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENBConfigurationUpdateFailure_IEs__value {
+		X2N_ENBConfigurationUpdateFailure_IEs__value_PR present;
+		union X2N_ENBConfigurationUpdateFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_TimeToWait_t	 TimeToWait;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENBConfigurationUpdateFailure_IEs_t;
+typedef struct X2N_ResourceStatusRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResourceStatusRequest_IEs__value {
+		X2N_ResourceStatusRequest_IEs__value_PR present;
+		union X2N_ResourceStatusRequest_IEs__X2N_value_u {
+			X2N_Measurement_ID_t	 Measurement_ID;
+			X2N_Registration_Request_t	 Registration_Request;
+			X2N_ReportCharacteristics_t	 ReportCharacteristics;
+			X2N_CellToReport_List_t	 CellToReport_List;
+			X2N_ReportingPeriodicity_t	 ReportingPeriodicity;
+			X2N_PartialSuccessIndicator_t	 PartialSuccessIndicator;
+			X2N_ReportingPeriodicityRSRPMR_t	 ReportingPeriodicityRSRPMR;
+			X2N_ReportingPeriodicityCSIR_t	 ReportingPeriodicityCSIR;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusRequest_IEs_t;
+typedef struct X2N_ResourceStatusResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResourceStatusResponse_IEs__value {
+		X2N_ResourceStatusResponse_IEs__value_PR present;
+		union X2N_ResourceStatusResponse_IEs__X2N_value_u {
+			X2N_Measurement_ID_t	 Measurement_ID;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_MeasurementInitiationResult_List_t	 MeasurementInitiationResult_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusResponse_IEs_t;
+typedef struct X2N_ResourceStatusFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResourceStatusFailure_IEs__value {
+		X2N_ResourceStatusFailure_IEs__value_PR present;
+		union X2N_ResourceStatusFailure_IEs__X2N_value_u {
+			X2N_Measurement_ID_t	 Measurement_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_CompleteFailureCauseInformation_List_t	 CompleteFailureCauseInformation_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusFailure_IEs_t;
+typedef struct X2N_ResourceStatusUpdate_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ResourceStatusUpdate_IEs__value {
+		X2N_ResourceStatusUpdate_IEs__value_PR present;
+		union X2N_ResourceStatusUpdate_IEs__X2N_value_u {
+			X2N_Measurement_ID_t	 Measurement_ID;
+			X2N_CellMeasurementResult_List_t	 CellMeasurementResult_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusUpdate_IEs_t;
+typedef struct X2N_MobilityChangeRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MobilityChangeRequest_IEs__value {
+		X2N_MobilityChangeRequest_IEs__value_PR present;
+		union X2N_MobilityChangeRequest_IEs__X2N_value_u {
+			X2N_ECGI_t	 ECGI;
+			X2N_MobilityParametersInformation_t	 MobilityParametersInformation;
+			X2N_Cause_t	 Cause;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeRequest_IEs_t;
+typedef struct X2N_MobilityChangeAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MobilityChangeAcknowledge_IEs__value {
+		X2N_MobilityChangeAcknowledge_IEs__value_PR present;
+		union X2N_MobilityChangeAcknowledge_IEs__X2N_value_u {
+			X2N_ECGI_t	 ECGI;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeAcknowledge_IEs_t;
+typedef struct X2N_MobilityChangeFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_MobilityChangeFailure_IEs__value {
+		X2N_MobilityChangeFailure_IEs__value_PR present;
+		union X2N_MobilityChangeFailure_IEs__X2N_value_u {
+			X2N_ECGI_t	 ECGI;
+			X2N_Cause_t	 Cause;
+			X2N_MobilityParametersModificationRange_t	 MobilityParametersModificationRange;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_MobilityChangeFailure_IEs_t;
+typedef struct X2N_RLFIndication_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RLFIndication_IEs__value {
+		X2N_RLFIndication_IEs__value_PR present;
+		union X2N_RLFIndication_IEs__X2N_value_u {
+			X2N_PCI_t	 PCI;
+			X2N_ECGI_t	 ECGI;
+			X2N_CRNTI_t	 CRNTI;
+			X2N_ShortMAC_I_t	 ShortMAC_I;
+			X2N_UE_RLF_Report_Container_t	 UE_RLF_Report_Container;
+			X2N_RRCConnSetupIndicator_t	 RRCConnSetupIndicator;
+			X2N_RRCConnReestabIndicator_t	 RRCConnReestabIndicator;
+			X2N_UE_RLF_Report_Container_for_extended_bands_t	 UE_RLF_Report_Container_for_extended_bands;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RLFIndication_IEs_t;
+typedef struct X2N_CellActivationRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellActivationRequest_IEs__value {
+		X2N_CellActivationRequest_IEs__value_PR present;
+		union X2N_CellActivationRequest_IEs__X2N_value_u {
+			X2N_ServedCellsToActivate_t	 ServedCellsToActivate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationRequest_IEs_t;
+typedef struct X2N_CellActivationResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellActivationResponse_IEs__value {
+		X2N_CellActivationResponse_IEs__value_PR present;
+		union X2N_CellActivationResponse_IEs__X2N_value_u {
+			X2N_ActivatedCellList_t	 ActivatedCellList;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationResponse_IEs_t;
+typedef struct X2N_CellActivationFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_CellActivationFailure_IEs__value {
+		X2N_CellActivationFailure_IEs__value_PR present;
+		union X2N_CellActivationFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_CellActivationFailure_IEs_t;
+typedef struct X2N_X2Release_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2Release_IEs__value {
+		X2N_X2Release_IEs__value_PR present;
+		union X2N_X2Release_IEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2Release_IEs_t;
+typedef struct X2N_X2APMessageTransfer_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2APMessageTransfer_IEs__value {
+		X2N_X2APMessageTransfer_IEs__value_PR present;
+		union X2N_X2APMessageTransfer_IEs__X2N_value_u {
+			X2N_RNL_Header_t	 RNL_Header;
+			X2N_X2AP_Message_t	 X2AP_Message;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2APMessageTransfer_IEs_t;
+typedef struct X2N_SeNBAdditionRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBAdditionRequest_IEs__value {
+		X2N_SeNBAdditionRequest_IEs__value_PR present;
+		union X2N_SeNBAdditionRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_UESecurityCapabilities_t	 UESecurityCapabilities;
+			X2N_SeNBSecurityKey_t	 SeNBSecurityKey;
+			X2N_UEAggregateMaximumBitRate_t	 UEAggregateMaximumBitRate;
+			X2N_PLMN_Identity_t	 PLMN_Identity;
+			X2N_E_RABs_ToBeAdded_List_t	 E_RABs_ToBeAdded_List;
+			X2N_MeNBtoSeNBContainer_t	 MeNBtoSeNBContainer;
+			X2N_CSGMembershipStatus_t	 CSGMembershipStatus;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_ExpectedUEBehaviour_t	 ExpectedUEBehaviour;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequest_IEs_t;
+typedef struct X2N_SeNBAdditionRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBAdditionRequestAcknowledge_IEs__value {
+		X2N_SeNBAdditionRequestAcknowledge_IEs__value_PR present;
+		union X2N_SeNBAdditionRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_Admitted_ToBeAdded_List_t	 E_RABs_Admitted_ToBeAdded_List;
+			X2N_E_RAB_List_t	 E_RAB_List;
+			X2N_SeNBtoMeNBContainer_t	 SeNBtoMeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_TransportLayerAddress_t	 TransportLayerAddress;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_TunnelInformation_t	 TunnelInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequestAcknowledge_IEs_t;
+typedef struct X2N_SeNBAdditionRequestReject_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBAdditionRequestReject_IEs__value {
+		X2N_SeNBAdditionRequestReject_IEs__value_PR present;
+		union X2N_SeNBAdditionRequestReject_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequestReject_IEs_t;
+typedef struct X2N_SeNBReconfigurationComplete_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBReconfigurationComplete_IEs__value {
+		X2N_SeNBReconfigurationComplete_IEs__value_PR present;
+		union X2N_SeNBReconfigurationComplete_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_ResponseInformationSeNBReconfComp_t	 ResponseInformationSeNBReconfComp;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReconfigurationComplete_IEs_t;
+typedef struct X2N_SeNBModificationRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationRequest_IEs__value {
+		X2N_SeNBModificationRequest_IEs__value_PR present;
+		union X2N_SeNBModificationRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_SCGChangeIndication_t	 SCGChangeIndication;
+			X2N_PLMN_Identity_t	 PLMN_Identity;
+			X2N_UE_ContextInformationSeNBModReq_t	 UE_ContextInformationSeNBModReq;
+			X2N_MeNBtoSeNBContainer_t	 MeNBtoSeNBContainer;
+			X2N_CSGMembershipStatus_t	 CSGMembershipStatus;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequest_IEs_t;
+typedef struct X2N_SeNBModificationRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationRequestAcknowledge_IEs__value {
+		X2N_SeNBModificationRequestAcknowledge_IEs__value_PR present;
+		union X2N_SeNBModificationRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_Admitted_ToBeAdded_ModAckList_t	 E_RABs_Admitted_ToBeAdded_ModAckList;
+			X2N_E_RABs_Admitted_ToBeModified_ModAckList_t	 E_RABs_Admitted_ToBeModified_ModAckList;
+			X2N_E_RABs_Admitted_ToBeReleased_ModAckList_t	 E_RABs_Admitted_ToBeReleased_ModAckList;
+			X2N_E_RAB_List_t	 E_RAB_List;
+			X2N_SeNBtoMeNBContainer_t	 SeNBtoMeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequestAcknowledge_IEs_t;
+typedef struct X2N_SeNBModificationRequestReject_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationRequestReject_IEs__value {
+		X2N_SeNBModificationRequestReject_IEs__value_PR present;
+		union X2N_SeNBModificationRequestReject_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequestReject_IEs_t;
+typedef struct X2N_SeNBModificationRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationRequired_IEs__value {
+		X2N_SeNBModificationRequired_IEs__value_PR present;
+		union X2N_SeNBModificationRequired_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_SCGChangeIndication_t	 SCGChangeIndication;
+			X2N_E_RABs_ToBeReleased_ModReqd_t	 E_RABs_ToBeReleased_ModReqd;
+			X2N_SeNBtoMeNBContainer_t	 SeNBtoMeNBContainer;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequired_IEs_t;
+typedef struct X2N_SeNBModificationConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationConfirm_IEs__value {
+		X2N_SeNBModificationConfirm_IEs__value_PR present;
+		union X2N_SeNBModificationConfirm_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_MeNBtoSeNBContainer_t	 MeNBtoSeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationConfirm_IEs_t;
+typedef struct X2N_SeNBModificationRefuse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBModificationRefuse_IEs__value {
+		X2N_SeNBModificationRefuse_IEs__value_PR present;
+		union X2N_SeNBModificationRefuse_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_MeNBtoSeNBContainer_t	 MeNBtoSeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRefuse_IEs_t;
+typedef struct X2N_SeNBReleaseRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBReleaseRequest_IEs__value {
+		X2N_SeNBReleaseRequest_IEs__value_PR present;
+		union X2N_SeNBReleaseRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_E_RABs_ToBeReleased_List_RelReq_t	 E_RABs_ToBeReleased_List_RelReq;
+			X2N_UE_ContextKeptIndicator_t	 UE_ContextKeptIndicator;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_MakeBeforeBreakIndicator_t	 MakeBeforeBreakIndicator;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseRequest_IEs_t;
+typedef struct X2N_SeNBReleaseRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBReleaseRequired_IEs__value {
+		X2N_SeNBReleaseRequired_IEs__value_PR present;
+		union X2N_SeNBReleaseRequired_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseRequired_IEs_t;
+typedef struct X2N_SeNBReleaseConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBReleaseConfirm_IEs__value {
+		X2N_SeNBReleaseConfirm_IEs__value_PR present;
+		union X2N_SeNBReleaseConfirm_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_ToBeReleased_List_RelConf_t	 E_RABs_ToBeReleased_List_RelConf;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseConfirm_IEs_t;
+typedef struct X2N_SeNBCounterCheckRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SeNBCounterCheckRequest_IEs__value {
+		X2N_SeNBCounterCheckRequest_IEs__value_PR present;
+		union X2N_SeNBCounterCheckRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_SubjectToCounterCheck_List_t	 E_RABs_SubjectToCounterCheck_List;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBCounterCheckRequest_IEs_t;
+typedef struct X2N_X2RemovalRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2RemovalRequest_IEs__value {
+		X2N_X2RemovalRequest_IEs__value_PR present;
+		union X2N_X2RemovalRequest_IEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_X2BenefitValue_t	 X2BenefitValue;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalRequest_IEs_t;
+typedef struct X2N_X2RemovalResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2RemovalResponse_IEs__value {
+		X2N_X2RemovalResponse_IEs__value_PR present;
+		union X2N_X2RemovalResponse_IEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalResponse_IEs_t;
+typedef struct X2N_X2RemovalFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_X2RemovalFailure_IEs__value {
+		X2N_X2RemovalFailure_IEs__value_PR present;
+		union X2N_X2RemovalFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalFailure_IEs_t;
+typedef struct X2N_RetrieveUEContextRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RetrieveUEContextRequest_IEs__value {
+		X2N_RetrieveUEContextRequest_IEs__value_PR present;
+		union X2N_RetrieveUEContextRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_ResumeID_t	 ResumeID;
+			X2N_ShortMAC_I_t	 ShortMAC_I;
+			X2N_EUTRANCellIdentifier_t	 EUTRANCellIdentifier;
+			X2N_CRNTI_t	 CRNTI;
+			X2N_PCI_t	 PCI;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextRequest_IEs_t;
+typedef struct X2N_RetrieveUEContextResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RetrieveUEContextResponse_IEs__value {
+		X2N_RetrieveUEContextResponse_IEs__value_PR present;
+		union X2N_RetrieveUEContextResponse_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_GUMMEI_t	 GUMMEI;
+			X2N_UE_ContextInformationRetrieve_t	 UE_ContextInformationRetrieve;
+			X2N_TraceActivation_t	 TraceActivation;
+			X2N_SRVCCOperationPossible_t	 SRVCCOperationPossible;
+			X2N_Masked_IMEISV_t	 Masked_IMEISV;
+			X2N_ExpectedUEBehaviour_t	 ExpectedUEBehaviour;
+			X2N_ProSeAuthorized_t	 ProSeAuthorized;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_V2XServicesAuthorized_t	 V2XServicesAuthorized;
+			X2N_AerialUEsubscriptionInformation_t	 AerialUEsubscriptionInformation;
+			X2N_Subscription_Based_UE_DifferentiationInfo_t	 Subscription_Based_UE_DifferentiationInfo;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextResponse_IEs_t;
+typedef struct X2N_RetrieveUEContextFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RetrieveUEContextFailure_IEs__value {
+		X2N_RetrieveUEContextFailure_IEs__value_PR present;
+		union X2N_RetrieveUEContextFailure_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextFailure_IEs_t;
+typedef struct X2N_SgNBAdditionRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBAdditionRequest_IEs__value {
+		X2N_SgNBAdditionRequest_IEs__value_PR present;
+		union X2N_SgNBAdditionRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_NRUESecurityCapabilities_t	 NRUESecurityCapabilities;
+			X2N_SgNBSecurityKey_t	 SgNBSecurityKey;
+			X2N_UEAggregateMaximumBitRate_t	 UEAggregateMaximumBitRate;
+			X2N_PLMN_Identity_t	 PLMN_Identity;
+			X2N_HandoverRestrictionList_t	 HandoverRestrictionList;
+			X2N_E_RABs_ToBeAdded_SgNBAddReqList_t	 E_RABs_ToBeAdded_SgNBAddReqList;
+			X2N_MeNBtoSgNBContainer_t	 MeNBtoSgNBContainer;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_ExpectedUEBehaviour_t	 ExpectedUEBehaviour;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SplitSRBs_t	 SplitSRBs;
+			X2N_MeNBResourceCoordinationInformation_t	 MeNBResourceCoordinationInformation;
+			X2N_SGNB_Addition_Trigger_Ind_t	 SGNB_Addition_Trigger_Ind;
+			X2N_SubscriberProfileIDforRFP_t	 SubscriberProfileIDforRFP;
+			X2N_ECGI_t	 ECGI;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequest_IEs_t;
+typedef struct X2N_SgNBAdditionRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBAdditionRequestAcknowledge_IEs__value {
+		X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR present;
+		union X2N_SgNBAdditionRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t	 E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList;
+			X2N_E_RAB_List_t	 E_RAB_List;
+			X2N_SgNBtoMeNBContainer_t	 SgNBtoMeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SplitSRBs_t	 SplitSRBs;
+			X2N_SgNBResourceCoordinationInformation_t	 SgNBResourceCoordinationInformation;
+			X2N_RRC_Config_Ind_t	 RRC_Config_Ind;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequestAcknowledge_IEs_t;
+typedef struct X2N_SgNBAdditionRequestReject_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBAdditionRequestReject_IEs__value {
+		X2N_SgNBAdditionRequestReject_IEs__value_PR present;
+		union X2N_SgNBAdditionRequestReject_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequestReject_IEs_t;
+typedef struct X2N_SgNBReconfigurationComplete_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReconfigurationComplete_IEs__value {
+		X2N_SgNBReconfigurationComplete_IEs__value_PR present;
+		union X2N_SgNBReconfigurationComplete_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_ResponseInformationSgNBReconfComp_t	 ResponseInformationSgNBReconfComp;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReconfigurationComplete_IEs_t;
+typedef struct X2N_SgNBModificationRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationRequest_IEs__value {
+		X2N_SgNBModificationRequest_IEs__value_PR present;
+		union X2N_SgNBModificationRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_PLMN_Identity_t	 PLMN_Identity;
+			X2N_HandoverRestrictionList_t	 HandoverRestrictionList;
+			X2N_SCGConfigurationQuery_t	 SCGConfigurationQuery;
+			X2N_UE_ContextInformation_SgNBModReq_t	 UE_ContextInformation_SgNBModReq;
+			X2N_MeNBtoSgNBContainer_t	 MeNBtoSgNBContainer;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_MeNBResourceCoordinationInformation_t	 MeNBResourceCoordinationInformation;
+			X2N_SplitSRBs_t	 SplitSRBs;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequest_IEs_t;
+typedef struct X2N_SgNBModificationRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationRequestAcknowledge_IEs__value {
+		X2N_SgNBModificationRequestAcknowledge_IEs__value_PR present;
+		union X2N_SgNBModificationRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_Admitted_ToBeAdded_SgNBModAckList_t	 E_RABs_Admitted_ToBeAdded_SgNBModAckList;
+			X2N_E_RABs_Admitted_ToBeModified_SgNBModAckList_t	 E_RABs_Admitted_ToBeModified_SgNBModAckList;
+			X2N_E_RABs_Admitted_ToBeReleased_SgNBModAckList_t	 E_RABs_Admitted_ToBeReleased_SgNBModAckList;
+			X2N_E_RAB_List_t	 E_RAB_List;
+			X2N_SgNBtoMeNBContainer_t	 SgNBtoMeNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_SgNBResourceCoordinationInformation_t	 SgNBResourceCoordinationInformation;
+			X2N_SplitSRBs_t	 SplitSRBs;
+			X2N_RRC_Config_Ind_t	 RRC_Config_Ind;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequestAcknowledge_IEs_t;
+typedef struct X2N_SgNBModificationRequestReject_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationRequestReject_IEs__value {
+		X2N_SgNBModificationRequestReject_IEs__value_PR present;
+		union X2N_SgNBModificationRequestReject_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequestReject_IEs_t;
+typedef struct X2N_SgNBModificationRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationRequired_IEs__value {
+		X2N_SgNBModificationRequired_IEs__value_PR present;
+		union X2N_SgNBModificationRequired_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_PDCPChangeIndication_t	 PDCPChangeIndication;
+			X2N_E_RABs_ToBeReleased_SgNBModReqdList_t	 E_RABs_ToBeReleased_SgNBModReqdList;
+			X2N_SgNBtoMeNBContainer_t	 SgNBtoMeNBContainer;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_E_RABs_ToBeModified_SgNBModReqdList_t	 E_RABs_ToBeModified_SgNBModReqdList;
+			X2N_SgNBResourceCoordinationInformation_t	 SgNBResourceCoordinationInformation;
+			X2N_RRC_Config_Ind_t	 RRC_Config_Ind;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequired_IEs_t;
+typedef struct X2N_SgNBModificationConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationConfirm_IEs__value {
+		X2N_SgNBModificationConfirm_IEs__value_PR present;
+		union X2N_SgNBModificationConfirm_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_AdmittedToBeModified_SgNBModConfList_t	 E_RABs_AdmittedToBeModified_SgNBModConfList;
+			X2N_MeNBtoSgNBContainer_t	 MeNBtoSgNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_MeNBResourceCoordinationInformation_t	 MeNBResourceCoordinationInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationConfirm_IEs_t;
+typedef struct X2N_SgNBModificationRefuse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBModificationRefuse_IEs__value {
+		X2N_SgNBModificationRefuse_IEs__value_PR present;
+		union X2N_SgNBModificationRefuse_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_MeNBtoSgNBContainer_t	 MeNBtoSgNBContainer;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRefuse_IEs_t;
+typedef struct X2N_SgNBReleaseRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReleaseRequest_IEs__value {
+		X2N_SgNBReleaseRequest_IEs__value_PR present;
+		union X2N_SgNBReleaseRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_E_RABs_ToBeReleased_SgNBRelReqList_t	 E_RABs_ToBeReleased_SgNBRelReqList;
+			X2N_UE_ContextKeptIndicator_t	 UE_ContextKeptIndicator;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_MeNBtoSgNBContainer_t	 MeNBtoSgNBContainer;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequest_IEs_t;
+typedef struct X2N_SgNBReleaseRequestAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReleaseRequestAcknowledge_IEs__value {
+		X2N_SgNBReleaseRequestAcknowledge_IEs__value_PR present;
+		union X2N_SgNBReleaseRequestAcknowledge_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_t	 E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequestAcknowledge_IEs_t;
+typedef struct X2N_SgNBReleaseRequestReject_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReleaseRequestReject_IEs__value {
+		X2N_SgNBReleaseRequestReject_IEs__value_PR present;
+		union X2N_SgNBReleaseRequestReject_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequestReject_IEs_t;
+typedef struct X2N_SgNBReleaseRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReleaseRequired_IEs__value {
+		X2N_SgNBReleaseRequired_IEs__value_PR present;
+		union X2N_SgNBReleaseRequired_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_E_RABs_ToBeReleased_SgNBRelReqdList_t	 E_RABs_ToBeReleased_SgNBRelReqdList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequired_IEs_t;
+typedef struct X2N_SgNBReleaseConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBReleaseConfirm_IEs__value {
+		X2N_SgNBReleaseConfirm_IEs__value_PR present;
+		union X2N_SgNBReleaseConfirm_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_ToBeReleased_SgNBRelConfList_t	 E_RABs_ToBeReleased_SgNBRelConfList;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseConfirm_IEs_t;
+typedef struct X2N_SgNBCounterCheckRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBCounterCheckRequest_IEs__value {
+		X2N_SgNBCounterCheckRequest_IEs__value_PR present;
+		union X2N_SgNBCounterCheckRequest_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_SubjectToSgNBCounterCheck_List_t	 E_RABs_SubjectToSgNBCounterCheck_List;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBCounterCheckRequest_IEs_t;
+typedef struct X2N_SgNBChangeRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBChangeRequired_IEs__value {
+		X2N_SgNBChangeRequired_IEs__value_PR present;
+		union X2N_SgNBChangeRequired_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_GlobalGNB_ID_t	 GlobalGNB_ID;
+			X2N_Cause_t	 Cause;
+			X2N_SgNBtoMeNBContainer_t	 SgNBtoMeNBContainer;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeRequired_IEs_t;
+typedef struct X2N_SgNBChangeConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBChangeConfirm_IEs__value {
+		X2N_SgNBChangeConfirm_IEs__value_PR present;
+		union X2N_SgNBChangeConfirm_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_E_RABs_ToBeReleased_SgNBChaConfList_t	 E_RABs_ToBeReleased_SgNBChaConfList;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeConfirm_IEs_t;
+typedef struct X2N_RRCTransfer_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_RRCTransfer_IEs__value {
+		X2N_RRCTransfer_IEs__value_PR present;
+		union X2N_RRCTransfer_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_SplitSRB_t	 SplitSRB;
+			X2N_UENRMeasurement_t	 UENRMeasurement;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RRCTransfer_IEs_t;
+typedef struct X2N_SgNBChangeRefuse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBChangeRefuse_IEs__value {
+		X2N_SgNBChangeRefuse_IEs__value_PR present;
+		union X2N_SgNBChangeRefuse_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeRefuse_IEs_t;
+typedef struct X2N_ENDCX2SetupRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2SetupRequest_IEs__value {
+		X2N_ENDCX2SetupRequest_IEs__value_PR present;
+		union X2N_ENDCX2SetupRequest_IEs__X2N_value_u {
+			X2N_InitiatingNodeType_EndcX2Setup_t	 InitiatingNodeType_EndcX2Setup;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupRequest_IEs_t;
+typedef struct X2N_ENB_ENDCX2SetupReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCX2SetupReqIEs__value {
+		X2N_ENB_ENDCX2SetupReqIEs__value_PR present;
+		union X2N_ENB_ENDCX2SetupReqIEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_ServedEUTRAcellsENDCX2ManagementList_t	 ServedEUTRAcellsENDCX2ManagementList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCX2SetupReqIEs_t;
+typedef struct X2N_En_gNB_ENDCX2SetupReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCX2SetupReqIEs__value {
+		X2N_En_gNB_ENDCX2SetupReqIEs__value_PR present;
+		union X2N_En_gNB_ENDCX2SetupReqIEs__X2N_value_u {
+			X2N_GlobalGNB_ID_t	 GlobalGNB_ID;
+			X2N_ServedNRcellsENDCX2ManagementList_t	 ServedNRcellsENDCX2ManagementList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCX2SetupReqIEs_t;
+typedef struct X2N_ENDCX2SetupResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2SetupResponse_IEs__value {
+		X2N_ENDCX2SetupResponse_IEs__value_PR present;
+		union X2N_ENDCX2SetupResponse_IEs__X2N_value_u {
+			X2N_RespondingNodeType_EndcX2Setup_t	 RespondingNodeType_EndcX2Setup;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupResponse_IEs_t;
+typedef struct X2N_ENB_ENDCX2SetupReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCX2SetupReqAckIEs__value {
+		X2N_ENB_ENDCX2SetupReqAckIEs__value_PR present;
+		union X2N_ENB_ENDCX2SetupReqAckIEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+			X2N_ServedEUTRAcellsENDCX2ManagementList_t	 ServedEUTRAcellsENDCX2ManagementList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCX2SetupReqAckIEs_t;
+typedef struct X2N_En_gNB_ENDCX2SetupReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCX2SetupReqAckIEs__value {
+		X2N_En_gNB_ENDCX2SetupReqAckIEs__value_PR present;
+		union X2N_En_gNB_ENDCX2SetupReqAckIEs__X2N_value_u {
+			X2N_GlobalGNB_ID_t	 GlobalGNB_ID;
+			X2N_ServedNRcellsENDCX2ManagementList_t	 ServedNRcellsENDCX2ManagementList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCX2SetupReqAckIEs_t;
+typedef struct X2N_ENDCX2SetupFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2SetupFailure_IEs__value {
+		X2N_ENDCX2SetupFailure_IEs__value_PR present;
+		union X2N_ENDCX2SetupFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_TimeToWait_t	 TimeToWait;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2SetupFailure_IEs_t;
+typedef struct X2N_ENDCConfigurationUpdate_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCConfigurationUpdate_IEs__value {
+		X2N_ENDCConfigurationUpdate_IEs__value_PR present;
+		union X2N_ENDCConfigurationUpdate_IEs__X2N_value_u {
+			X2N_InitiatingNodeType_EndcConfigUpdate_t	 InitiatingNodeType_EndcConfigUpdate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdate_IEs_t;
+typedef struct X2N_ENB_ENDCConfigUpdateIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCConfigUpdateIEs__value {
+		X2N_ENB_ENDCConfigUpdateIEs__value_PR present;
+		union X2N_ENB_ENDCConfigUpdateIEs__X2N_value_u {
+			X2N_CellAssistanceInformation_t	 CellAssistanceInformation;
+			X2N_ServedEUTRAcellsENDCX2ManagementList_t	 ServedEUTRAcellsENDCX2ManagementList;
+			X2N_ServedEUTRAcellsToModifyListENDCConfUpd_t	 ServedEUTRAcellsToModifyListENDCConfUpd;
+			X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_t	 ServedEUTRAcellsToDeleteListENDCConfUpd;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCConfigUpdateIEs_t;
+typedef struct X2N_En_gNB_ENDCConfigUpdateIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCConfigUpdateIEs__value {
+		X2N_En_gNB_ENDCConfigUpdateIEs__value_PR present;
+		union X2N_En_gNB_ENDCConfigUpdateIEs__X2N_value_u {
+			X2N_ServedNRcellsENDCX2ManagementList_t	 ServedNRcellsENDCX2ManagementList;
+			X2N_ServedNRcellsToModifyENDCConfUpdList_t	 ServedNRcellsToModifyENDCConfUpdList;
+			X2N_ServedNRcellsToDeleteENDCConfUpdList_t	 ServedNRcellsToDeleteENDCConfUpdList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCConfigUpdateIEs_t;
+typedef struct X2N_ENDCConfigurationUpdateAcknowledge_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCConfigurationUpdateAcknowledge_IEs__value {
+		X2N_ENDCConfigurationUpdateAcknowledge_IEs__value_PR present;
+		union X2N_ENDCConfigurationUpdateAcknowledge_IEs__X2N_value_u {
+			X2N_RespondingNodeType_EndcConfigUpdate_t	 RespondingNodeType_EndcConfigUpdate;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdateAcknowledge_IEs_t;
+typedef struct X2N_ENB_ENDCConfigUpdateAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCConfigUpdateAckIEs__value {
+		X2N_ENB_ENDCConfigUpdateAckIEs__value_PR present;
+		union X2N_ENB_ENDCConfigUpdateAckIEs__X2N_value_u {
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCConfigUpdateAckIEs_t;
+typedef struct X2N_En_gNB_ENDCConfigUpdateAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCConfigUpdateAckIEs__value {
+		X2N_En_gNB_ENDCConfigUpdateAckIEs__value_PR present;
+		union X2N_En_gNB_ENDCConfigUpdateAckIEs__X2N_value_u {
+			X2N_ServedNRcellsENDCX2ManagementList_t	 ServedNRcellsENDCX2ManagementList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCConfigUpdateAckIEs_t;
+typedef struct X2N_ENDCConfigurationUpdateFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCConfigurationUpdateFailure_IEs__value {
+		X2N_ENDCConfigurationUpdateFailure_IEs__value_PR present;
+		union X2N_ENDCConfigurationUpdateFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+			X2N_TimeToWait_t	 TimeToWait;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCConfigurationUpdateFailure_IEs_t;
+typedef struct X2N_ENDCCellActivationRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCCellActivationRequest_IEs__value {
+		X2N_ENDCCellActivationRequest_IEs__value_PR present;
+		union X2N_ENDCCellActivationRequest_IEs__X2N_value_u {
+			X2N_ServedNRCellsToActivate_t	 ServedNRCellsToActivate;
+			X2N_ActivationID_t	 ActivationID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationRequest_IEs_t;
+typedef struct X2N_ENDCCellActivationResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCCellActivationResponse_IEs__value {
+		X2N_ENDCCellActivationResponse_IEs__value_PR present;
+		union X2N_ENDCCellActivationResponse_IEs__X2N_value_u {
+			X2N_ActivatedNRCellList_t	 ActivatedNRCellList;
+			X2N_ActivationID_t	 ActivationID;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationResponse_IEs_t;
+typedef struct X2N_ENDCCellActivationFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCCellActivationFailure_IEs__value {
+		X2N_ENDCCellActivationFailure_IEs__value_PR present;
+		union X2N_ENDCCellActivationFailure_IEs__X2N_value_u {
+			X2N_ActivationID_t	 ActivationID;
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCCellActivationFailure_IEs_t;
+typedef struct X2N_SecondaryRATDataUsageReport_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SecondaryRATDataUsageReport_IEs__value {
+		X2N_SecondaryRATDataUsageReport_IEs__value_PR present;
+		union X2N_SecondaryRATDataUsageReport_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_SecondaryRATUsageReportList_t	 SecondaryRATUsageReportList;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATDataUsageReport_IEs_t;
+typedef struct X2N_SgNBActivityNotification_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SgNBActivityNotification_IEs__value {
+		X2N_SgNBActivityNotification_IEs__value_PR present;
+		union X2N_SgNBActivityNotification_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_SgNB_UE_X2AP_ID_t	 SgNB_UE_X2AP_ID;
+			X2N_UserPlaneTrafficActivityReport_t	 UserPlaneTrafficActivityReport;
+			X2N_ERABActivityNotifyItemList_t	 ERABActivityNotifyItemList;
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBActivityNotification_IEs_t;
+typedef struct X2N_ENDCPartialResetRequired_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCPartialResetRequired_IEs__value {
+		X2N_ENDCPartialResetRequired_IEs__value_PR present;
+		union X2N_ENDCPartialResetRequired_IEs__X2N_value_u {
+			X2N_UEsToBeResetList_t	 UEsToBeResetList;
+			X2N_Cause_t	 Cause;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCPartialResetRequired_IEs_t;
+typedef struct X2N_ENDCPartialResetConfirm_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCPartialResetConfirm_IEs__value {
+		X2N_ENDCPartialResetConfirm_IEs__value_PR present;
+		union X2N_ENDCPartialResetConfirm_IEs__X2N_value_u {
+			X2N_UEsToBeResetList_t	 UEsToBeResetList;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCPartialResetConfirm_IEs_t;
+typedef struct X2N_EUTRANRCellResourceCoordinationRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_EUTRANRCellResourceCoordinationRequest_IEs__value {
+		X2N_EUTRANRCellResourceCoordinationRequest_IEs__value_PR present;
+		union X2N_EUTRANRCellResourceCoordinationRequest_IEs__X2N_value_u {
+			X2N_InitiatingNodeType_EutranrCellResourceCoordination_t	 InitiatingNodeType_EutranrCellResourceCoordination;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EUTRANRCellResourceCoordinationRequest_IEs_t;
+typedef struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value {
+		X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR present;
+		union X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs__X2N_value_u {
+			X2N_DataTrafficResourceIndication_t	 DataTrafficResourceIndication;
+			X2N_SpectrumSharingGroupID_t	 SpectrumSharingGroupID;
+			X2N_ListofEUTRACellsinEUTRACoordinationReq_t	 ListofEUTRACellsinEUTRACoordinationReq;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_t;
+typedef struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value {
+		X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__value_PR present;
+		union X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs__X2N_value_u {
+			X2N_DataTrafficResourceIndication_t	 DataTrafficResourceIndication;
+			X2N_ListofEUTRACellsinNRCoordinationReq_t	 ListofEUTRACellsinNRCoordinationReq;
+			X2N_SpectrumSharingGroupID_t	 SpectrumSharingGroupID;
+			X2N_ListofNRCellsinNRCoordinationReq_t	 ListofNRCellsinNRCoordinationReq;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_t;
+typedef struct X2N_EUTRANRCellResourceCoordinationResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_EUTRANRCellResourceCoordinationResponse_IEs__value {
+		X2N_EUTRANRCellResourceCoordinationResponse_IEs__value_PR present;
+		union X2N_EUTRANRCellResourceCoordinationResponse_IEs__X2N_value_u {
+			X2N_RespondingNodeType_EutranrCellResourceCoordination_t	 RespondingNodeType_EutranrCellResourceCoordination;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_EUTRANRCellResourceCoordinationResponse_IEs_t;
+typedef struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value {
+		X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR present;
+		union X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs__X2N_value_u {
+			X2N_DataTrafficResourceIndication_t	 DataTrafficResourceIndication;
+			X2N_SpectrumSharingGroupID_t	 SpectrumSharingGroupID;
+			X2N_ListofEUTRACellsinEUTRACoordinationResp_t	 ListofEUTRACellsinEUTRACoordinationResp;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_t;
+typedef struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value {
+		X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__value_PR present;
+		union X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs__X2N_value_u {
+			X2N_DataTrafficResourceIndication_t	 DataTrafficResourceIndication;
+			X2N_SpectrumSharingGroupID_t	 SpectrumSharingGroupID;
+			X2N_ListofNRCellsinNRCoordinationResp_t	 ListofNRCellsinNRCoordinationResp;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_t;
+typedef struct X2N_ENDCX2RemovalRequest_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2RemovalRequest_IEs__value {
+		X2N_ENDCX2RemovalRequest_IEs__value_PR present;
+		union X2N_ENDCX2RemovalRequest_IEs__X2N_value_u {
+			X2N_InitiatingNodeType_EndcX2Removal_t	 InitiatingNodeType_EndcX2Removal;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalRequest_IEs_t;
+typedef struct X2N_ENB_ENDCX2RemovalReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCX2RemovalReqIEs__value {
+		X2N_ENB_ENDCX2RemovalReqIEs__value_PR present;
+		union X2N_ENB_ENDCX2RemovalReqIEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCX2RemovalReqIEs_t;
+typedef struct X2N_En_gNB_ENDCX2RemovalReqIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCX2RemovalReqIEs__value {
+		X2N_En_gNB_ENDCX2RemovalReqIEs__value_PR present;
+		union X2N_En_gNB_ENDCX2RemovalReqIEs__X2N_value_u {
+			X2N_GlobalGNB_ID_t	 GlobalGNB_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCX2RemovalReqIEs_t;
+typedef struct X2N_ENDCX2RemovalResponse_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2RemovalResponse_IEs__value {
+		X2N_ENDCX2RemovalResponse_IEs__value_PR present;
+		union X2N_ENDCX2RemovalResponse_IEs__X2N_value_u {
+			X2N_RespondingNodeType_EndcX2Removal_t	 RespondingNodeType_EndcX2Removal;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalResponse_IEs_t;
+typedef struct X2N_ENB_ENDCX2RemovalReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENB_ENDCX2RemovalReqAckIEs__value {
+		X2N_ENB_ENDCX2RemovalReqAckIEs__value_PR present;
+		union X2N_ENB_ENDCX2RemovalReqAckIEs__X2N_value_u {
+			X2N_GlobalENB_ID_t	 GlobalENB_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENB_ENDCX2RemovalReqAckIEs_t;
+typedef struct X2N_En_gNB_ENDCX2RemovalReqAckIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_En_gNB_ENDCX2RemovalReqAckIEs__value {
+		X2N_En_gNB_ENDCX2RemovalReqAckIEs__value_PR present;
+		union X2N_En_gNB_ENDCX2RemovalReqAckIEs__X2N_value_u {
+			X2N_GlobalGNB_ID_t	 GlobalGNB_ID;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_En_gNB_ENDCX2RemovalReqAckIEs_t;
+typedef struct X2N_ENDCX2RemovalFailure_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_ENDCX2RemovalFailure_IEs__value {
+		X2N_ENDCX2RemovalFailure_IEs__value_PR present;
+		union X2N_ENDCX2RemovalFailure_IEs__X2N_value_u {
+			X2N_Cause_t	 Cause;
+			X2N_CriticalityDiagnostics_t	 CriticalityDiagnostics;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ENDCX2RemovalFailure_IEs_t;
+typedef struct X2N_DataForwardingAddressIndication_IEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_DataForwardingAddressIndication_IEs__value {
+		X2N_DataForwardingAddressIndication_IEs__value_PR present;
+		union X2N_DataForwardingAddressIndication_IEs__X2N_value_u {
+			X2N_UE_X2AP_ID_Extension_t	 UE_X2AP_ID_Extension;
+			X2N_UE_X2AP_ID_t	 UE_X2AP_ID;
+			X2N_E_RABs_DataForwardingAddress_List_t	 E_RABs_DataForwardingAddress_List;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_DataForwardingAddressIndication_IEs_t;
+typedef struct X2N_GNBStatusIndicationIEs {
+	X2N_ProtocolIE_ID_t	 id;
+	X2N_Criticality_t	 criticality;
+	struct X2N_GNBStatusIndicationIEs__value {
+		X2N_GNBStatusIndicationIEs__value_PR present;
+		union X2N_GNBStatusIndicationIEs__X2N_value_u {
+			X2N_GNBOverloadInformation_t	 GNBOverloadInformation;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_GNBStatusIndicationIEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetup_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetup_ItemIEs_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetup_ItemIEs_1[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ItemIEs_specs_5;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ItemIEs_5[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_9;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_9[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellInformation_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellInformation_ItemIEs_specs_13;
+extern asn_TYPE_member_t asn_MBR_X2N_CellInformation_ItemIEs_13[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellToReport_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellToReport_ItemIEs_specs_17;
+extern asn_TYPE_member_t asn_MBR_X2N_CellToReport_ItemIEs_17[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementInitiationResult_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementInitiationResult_ItemIEs_specs_21;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementInitiationResult_ItemIEs_21[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MeasurementFailureCause_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MeasurementFailureCause_ItemIEs_specs_25;
+extern asn_TYPE_member_t asn_MBR_X2N_MeasurementFailureCause_ItemIEs_25[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CompleteFailureCauseInformation_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CompleteFailureCauseInformation_ItemIEs_specs_29;
+extern asn_TYPE_member_t asn_MBR_X2N_CompleteFailureCauseInformation_ItemIEs_29[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellMeasurementResult_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellMeasurementResult_ItemIEs_specs_33;
+extern asn_TYPE_member_t asn_MBR_X2N_CellMeasurementResult_ItemIEs_33[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ItemIEs_specs_37;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ItemIEs_37[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_41;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_41[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_ModReqItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItemIEs_specs_45;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItemIEs_45[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_ModReqItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_ModReqItemIEs_specs_49;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_ModReqItemIEs_49[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItemIEs_specs_53;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItemIEs_53[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_57;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_57[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_61;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_61[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_65;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_65[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_ModReqdItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_specs_69;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_69[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelReqItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItemIEs_specs_73;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItemIEs_73[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_RelConfItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItemIEs_specs_77;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItemIEs_77[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToCounterCheckItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemIEs_specs_81;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemIEs_81[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_85;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_85[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_89;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_89[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_93;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_93[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_97;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_97[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_101;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_101[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_105;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_105[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_109;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_109[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_113;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_113[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_117;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_117[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_121;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_121[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_125;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_125[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_129;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_129[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_133;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_133[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_137;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_137[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_141;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_141[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_145;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_145[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_149;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_149[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_153;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_153[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABs_DataForwardingAddress_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemIEs_specs_157;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemIEs_157[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RAB_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RAB_ItemIEs_specs_161;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RAB_ItemIEs_161[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_E_RABUsageReport_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_E_RABUsageReport_ItemIEs_specs_165;
+extern asn_TYPE_member_t asn_MBR_X2N_E_RABUsageReport_ItemIEs_165[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_ItemIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATUsageReport_ItemIEs_specs_169;
+extern asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReport_ItemIEs_169[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequest_IEs_specs_173;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRequest_IEs_173[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverRequestAcknowledge_IEs_specs_177;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverRequestAcknowledge_IEs_177[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverPreparationFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverPreparationFailure_IEs_specs_181;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverPreparationFailure_IEs_181[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverReport_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverReport_IEs_specs_185;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverReport_IEs_185[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SNStatusTransfer_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SNStatusTransfer_IEs_specs_189;
+extern asn_TYPE_member_t asn_MBR_X2N_SNStatusTransfer_IEs_189[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEContextRelease_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEContextRelease_IEs_specs_193;
+extern asn_TYPE_member_t asn_MBR_X2N_UEContextRelease_IEs_193[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_HandoverCancel_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_HandoverCancel_IEs_specs_197;
+extern asn_TYPE_member_t asn_MBR_X2N_HandoverCancel_IEs_197[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ErrorIndication_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ErrorIndication_IEs_specs_201;
+extern asn_TYPE_member_t asn_MBR_X2N_ErrorIndication_IEs_201[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResetRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetRequest_IEs_specs_205;
+extern asn_TYPE_member_t asn_MBR_X2N_ResetRequest_IEs_205[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResetResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetResponse_IEs_specs_209;
+extern asn_TYPE_member_t asn_MBR_X2N_ResetResponse_IEs_209[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupRequest_IEs_specs_213;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupRequest_IEs_213[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupResponse_IEs_specs_217;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupResponse_IEs_217[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupFailure_IEs_specs_221;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupFailure_IEs_221[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_LoadInformation_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_LoadInformation_IEs_specs_225;
+extern asn_TYPE_member_t asn_MBR_X2N_LoadInformation_IEs_225[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdate_IEs_specs_229;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdate_IEs_229[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateAcknowledge_IEs_specs_233;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateAcknowledge_IEs_233[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENBConfigurationUpdateFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENBConfigurationUpdateFailure_IEs_specs_237;
+extern asn_TYPE_member_t asn_MBR_X2N_ENBConfigurationUpdateFailure_IEs_237[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusRequest_IEs_specs_241;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusRequest_IEs_241[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusResponse_IEs_specs_245;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusResponse_IEs_245[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusFailure_IEs_specs_249;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusFailure_IEs_249[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusUpdate_IEs_specs_253;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusUpdate_IEs_253[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeRequest_IEs_specs_257;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeRequest_IEs_257[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeAcknowledge_IEs_specs_261;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeAcknowledge_IEs_261[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_MobilityChangeFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_MobilityChangeFailure_IEs_specs_265;
+extern asn_TYPE_member_t asn_MBR_X2N_MobilityChangeFailure_IEs_265[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RLFIndication_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RLFIndication_IEs_specs_269;
+extern asn_TYPE_member_t asn_MBR_X2N_RLFIndication_IEs_269[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationRequest_IEs_specs_273;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationRequest_IEs_273[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationResponse_IEs_specs_277;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationResponse_IEs_277[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_CellActivationFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_CellActivationFailure_IEs_specs_281;
+extern asn_TYPE_member_t asn_MBR_X2N_CellActivationFailure_IEs_281[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2Release_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2Release_IEs_specs_285;
+extern asn_TYPE_member_t asn_MBR_X2N_X2Release_IEs_285[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2APMessageTransfer_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2APMessageTransfer_IEs_specs_289;
+extern asn_TYPE_member_t asn_MBR_X2N_X2APMessageTransfer_IEs_289[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequest_IEs_specs_293;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequest_IEs_293[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestAcknowledge_IEs_specs_297;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestAcknowledge_IEs_297[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestReject_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestReject_IEs_specs_301;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestReject_IEs_301[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReconfigurationComplete_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReconfigurationComplete_IEs_specs_305;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReconfigurationComplete_IEs_305[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequest_IEs_specs_309;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequest_IEs_309[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestAcknowledge_IEs_specs_313;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestAcknowledge_IEs_313[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestReject_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestReject_IEs_specs_317;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestReject_IEs_317[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequired_IEs_specs_321;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequired_IEs_321[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationConfirm_IEs_specs_325;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationConfirm_IEs_325[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRefuse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRefuse_IEs_specs_329;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRefuse_IEs_329[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequest_IEs_specs_333;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequest_IEs_333[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequired_IEs_specs_337;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequired_IEs_337[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseConfirm_IEs_specs_341;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseConfirm_IEs_341[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBCounterCheckRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBCounterCheckRequest_IEs_specs_345;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBCounterCheckRequest_IEs_345[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalRequest_IEs_specs_349;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalRequest_IEs_349[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalResponse_IEs_specs_353;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalResponse_IEs_353[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalFailure_IEs_specs_357;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalFailure_IEs_357[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextRequest_IEs_specs_361;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextRequest_IEs_361[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextResponse_IEs_specs_365;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextResponse_IEs_365[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextFailure_IEs_specs_369;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextFailure_IEs_369[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequest_IEs_specs_373;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequest_IEs_373[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestAcknowledge_IEs_specs_377;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestAcknowledge_IEs_377[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestReject_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestReject_IEs_specs_381;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestReject_IEs_381[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReconfigurationComplete_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReconfigurationComplete_IEs_specs_385;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReconfigurationComplete_IEs_385[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequest_IEs_specs_389;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequest_IEs_389[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestAcknowledge_IEs_specs_393;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestAcknowledge_IEs_393[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestReject_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestReject_IEs_specs_397;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestReject_IEs_397[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequired_IEs_specs_401;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequired_IEs_401[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationConfirm_IEs_specs_405;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationConfirm_IEs_405[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRefuse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRefuse_IEs_specs_409;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRefuse_IEs_409[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequest_IEs_specs_413;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequest_IEs_413[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestAcknowledge_IEs_specs_417;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestAcknowledge_IEs_417[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestReject_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestReject_IEs_specs_421;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestReject_IEs_421[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequired_IEs_specs_425;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequired_IEs_425[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseConfirm_IEs_specs_429;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseConfirm_IEs_429[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCounterCheckRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBCounterCheckRequest_IEs_specs_433;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBCounterCheckRequest_IEs_433[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRequired_IEs_specs_437;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRequired_IEs_437[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeConfirm_IEs_specs_441;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeConfirm_IEs_441[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRCTransfer_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RRCTransfer_IEs_specs_445;
+extern asn_TYPE_member_t asn_MBR_X2N_RRCTransfer_IEs_445[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRefuse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRefuse_IEs_specs_449;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRefuse_IEs_449[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupRequest_IEs_specs_453;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupRequest_IEs_453[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2SetupReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2SetupReqIEs_specs_457;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2SetupReqIEs_457[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2SetupReqIEs_specs_461;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2SetupReqIEs_461[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupResponse_IEs_specs_465;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupResponse_IEs_465[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2SetupReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2SetupReqAckIEs_specs_469;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2SetupReqAckIEs_469[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2SetupReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2SetupReqAckIEs_specs_473;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2SetupReqAckIEs_473[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2SetupFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2SetupFailure_IEs_specs_477;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2SetupFailure_IEs_477[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdate_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdate_IEs_specs_481;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdate_IEs_481[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCConfigUpdateIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCConfigUpdateIEs_specs_485;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCConfigUpdateIEs_485[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCConfigUpdateIEs_specs_489;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCConfigUpdateIEs_489[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateAcknowledge_IEs_specs_493;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateAcknowledge_IEs_493[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCConfigUpdateAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCConfigUpdateAckIEs_specs_497;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCConfigUpdateAckIEs_497[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCConfigUpdateAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCConfigUpdateAckIEs_specs_501;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCConfigUpdateAckIEs_501[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCConfigurationUpdateFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCConfigurationUpdateFailure_IEs_specs_505;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCConfigurationUpdateFailure_IEs_505[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationRequest_IEs_specs_509;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationRequest_IEs_509[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationResponse_IEs_specs_513;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationResponse_IEs_513[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCCellActivationFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCCellActivationFailure_IEs_specs_517;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCCellActivationFailure_IEs_517[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATDataUsageReport_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATDataUsageReport_IEs_specs_521;
+extern asn_TYPE_member_t asn_MBR_X2N_SecondaryRATDataUsageReport_IEs_521[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBActivityNotification_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBActivityNotification_IEs_specs_525;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBActivityNotification_IEs_525[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetRequired_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetRequired_IEs_specs_529;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetRequired_IEs_529[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCPartialResetConfirm_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCPartialResetConfirm_IEs_specs_533;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCPartialResetConfirm_IEs_533[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationRequest_IEs_specs_537;
+extern asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationRequest_IEs_537[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_specs_541;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqIEs_541[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_specs_545;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqIEs_545[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_EUTRANRCellResourceCoordinationResponse_IEs_specs_549;
+extern asn_TYPE_member_t asn_MBR_X2N_EUTRANRCellResourceCoordinationResponse_IEs_549[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_553;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_EUTRA_NRCellResourceCoordinationReqAckIEs_553[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_specs_557;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs_557[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalRequest_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalRequest_IEs_specs_561;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalRequest_IEs_561[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2RemovalReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2RemovalReqIEs_specs_565;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2RemovalReqIEs_565[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2RemovalReqIEs_specs_569;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2RemovalReqIEs_569[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalResponse_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalResponse_IEs_specs_573;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalResponse_IEs_573[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENB_ENDCX2RemovalReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENB_ENDCX2RemovalReqAckIEs_specs_577;
+extern asn_TYPE_member_t asn_MBR_X2N_ENB_ENDCX2RemovalReqAckIEs_577[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_En_gNB_ENDCX2RemovalReqAckIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_En_gNB_ENDCX2RemovalReqAckIEs_specs_581;
+extern asn_TYPE_member_t asn_MBR_X2N_En_gNB_ENDCX2RemovalReqAckIEs_581[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ENDCX2RemovalFailure_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ENDCX2RemovalFailure_IEs_specs_585;
+extern asn_TYPE_member_t asn_MBR_X2N_ENDCX2RemovalFailure_IEs_585[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_DataForwardingAddressIndication_IEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_DataForwardingAddressIndication_IEs_specs_589;
+extern asn_TYPE_member_t asn_MBR_X2N_DataForwardingAddressIndication_IEs_589[3];
+extern asn_TYPE_descriptor_t asn_DEF_X2N_GNBStatusIndicationIEs;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_GNBStatusIndicationIEs_specs_593;
+extern asn_TYPE_member_t asn_MBR_X2N_GNBStatusIndicationIEs_593[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_Field_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-FieldPair.c b/asn1c_defs/X2N_ProtocolIE-FieldPair.c
new file mode 100644
index 0000000..01db8d5
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-FieldPair.c
@@ -0,0 +1,9 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-FieldPair.h"
+
diff --git a/asn1c_defs/X2N_ProtocolIE-FieldPair.h b/asn1c_defs/X2N_ProtocolIE-FieldPair.h
new file mode 100644
index 0000000..0424834
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-FieldPair.h
@@ -0,0 +1,23 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_FieldPair_H_
+#define	_X2N_ProtocolIE_FieldPair_H_
+
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_FieldPair_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-ID.c b/asn1c_defs/X2N_ProtocolIE-ID.c
new file mode 100644
index 0000000..26464f5
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-ID.h"
+
+int
+X2N_ProtocolIE_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 65535)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_ID = {
+	"ProtocolIE-ID",
+	"ProtocolIE-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_ProtocolIE_ID_tags_1,
+	sizeof(asn_DEF_X2N_ProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_ID_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ProtocolIE_ID_constr_1, X2N_ProtocolIE_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolIE-ID.h b/asn1c_defs/X2N_ProtocolIE-ID.h
new file mode 100644
index 0000000..d1e2a23
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-ID.h
@@ -0,0 +1,360 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_ID_H_
+#define	_X2N_ProtocolIE_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ProtocolIE-ID */
+typedef long	 X2N_ProtocolIE_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ProtocolIE_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_ID;
+asn_struct_free_f X2N_ProtocolIE_ID_free;
+asn_struct_print_f X2N_ProtocolIE_ID_print;
+asn_constr_check_f X2N_ProtocolIE_ID_constraint;
+ber_type_decoder_f X2N_ProtocolIE_ID_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_ID_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_ID_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_ID_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_ID_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_ID_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_ID_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_ID_encode_aper;
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_Item	((X2N_ProtocolIE_ID_t)0)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_List	((X2N_ProtocolIE_ID_t)1)
+#define X2N_ProtocolIE_ID_id_E_RAB_Item	((X2N_ProtocolIE_ID_t)2)
+#define X2N_ProtocolIE_ID_id_E_RABs_NotAdmitted_List	((X2N_ProtocolIE_ID_t)3)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeSetup_Item	((X2N_ProtocolIE_ID_t)4)
+#define X2N_ProtocolIE_ID_id_Cause	((X2N_ProtocolIE_ID_t)5)
+#define X2N_ProtocolIE_ID_id_CellInformation	((X2N_ProtocolIE_ID_t)6)
+#define X2N_ProtocolIE_ID_id_CellInformation_Item	((X2N_ProtocolIE_ID_t)7)
+#define X2N_ProtocolIE_ID_id_New_eNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)9)
+#define X2N_ProtocolIE_ID_id_Old_eNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)10)
+#define X2N_ProtocolIE_ID_id_TargetCell_ID	((X2N_ProtocolIE_ID_t)11)
+#define X2N_ProtocolIE_ID_id_TargeteNBtoSource_eNBTransparentContainer	((X2N_ProtocolIE_ID_t)12)
+#define X2N_ProtocolIE_ID_id_TraceActivation	((X2N_ProtocolIE_ID_t)13)
+#define X2N_ProtocolIE_ID_id_UE_ContextInformation	((X2N_ProtocolIE_ID_t)14)
+#define X2N_ProtocolIE_ID_id_UE_HistoryInformation	((X2N_ProtocolIE_ID_t)15)
+#define X2N_ProtocolIE_ID_id_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)16)
+#define X2N_ProtocolIE_ID_id_CriticalityDiagnostics	((X2N_ProtocolIE_ID_t)17)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToStatusTransfer_List	((X2N_ProtocolIE_ID_t)18)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToStatusTransfer_Item	((X2N_ProtocolIE_ID_t)19)
+#define X2N_ProtocolIE_ID_id_ServedCells	((X2N_ProtocolIE_ID_t)20)
+#define X2N_ProtocolIE_ID_id_GlobalENB_ID	((X2N_ProtocolIE_ID_t)21)
+#define X2N_ProtocolIE_ID_id_TimeToWait	((X2N_ProtocolIE_ID_t)22)
+#define X2N_ProtocolIE_ID_id_GUMMEI_ID	((X2N_ProtocolIE_ID_t)23)
+#define X2N_ProtocolIE_ID_id_GUGroupIDList	((X2N_ProtocolIE_ID_t)24)
+#define X2N_ProtocolIE_ID_id_ServedCellsToAdd	((X2N_ProtocolIE_ID_t)25)
+#define X2N_ProtocolIE_ID_id_ServedCellsToModify	((X2N_ProtocolIE_ID_t)26)
+#define X2N_ProtocolIE_ID_id_ServedCellsToDelete	((X2N_ProtocolIE_ID_t)27)
+#define X2N_ProtocolIE_ID_id_Registration_Request	((X2N_ProtocolIE_ID_t)28)
+#define X2N_ProtocolIE_ID_id_CellToReport	((X2N_ProtocolIE_ID_t)29)
+#define X2N_ProtocolIE_ID_id_ReportingPeriodicity	((X2N_ProtocolIE_ID_t)30)
+#define X2N_ProtocolIE_ID_id_CellToReport_Item	((X2N_ProtocolIE_ID_t)31)
+#define X2N_ProtocolIE_ID_id_CellMeasurementResult	((X2N_ProtocolIE_ID_t)32)
+#define X2N_ProtocolIE_ID_id_CellMeasurementResult_Item	((X2N_ProtocolIE_ID_t)33)
+#define X2N_ProtocolIE_ID_id_GUGroupIDToAddList	((X2N_ProtocolIE_ID_t)34)
+#define X2N_ProtocolIE_ID_id_GUGroupIDToDeleteList	((X2N_ProtocolIE_ID_t)35)
+#define X2N_ProtocolIE_ID_id_SRVCCOperationPossible	((X2N_ProtocolIE_ID_t)36)
+#define X2N_ProtocolIE_ID_id_Measurement_ID	((X2N_ProtocolIE_ID_t)37)
+#define X2N_ProtocolIE_ID_id_ReportCharacteristics	((X2N_ProtocolIE_ID_t)38)
+#define X2N_ProtocolIE_ID_id_ENB1_Measurement_ID	((X2N_ProtocolIE_ID_t)39)
+#define X2N_ProtocolIE_ID_id_ENB2_Measurement_ID	((X2N_ProtocolIE_ID_t)40)
+#define X2N_ProtocolIE_ID_id_Number_of_Antennaports	((X2N_ProtocolIE_ID_t)41)
+#define X2N_ProtocolIE_ID_id_CompositeAvailableCapacityGroup	((X2N_ProtocolIE_ID_t)42)
+#define X2N_ProtocolIE_ID_id_ENB1_Cell_ID	((X2N_ProtocolIE_ID_t)43)
+#define X2N_ProtocolIE_ID_id_ENB2_Cell_ID	((X2N_ProtocolIE_ID_t)44)
+#define X2N_ProtocolIE_ID_id_ENB2_Proposed_Mobility_Parameters	((X2N_ProtocolIE_ID_t)45)
+#define X2N_ProtocolIE_ID_id_ENB1_Mobility_Parameters	((X2N_ProtocolIE_ID_t)46)
+#define X2N_ProtocolIE_ID_id_ENB2_Mobility_Parameters_Modification_Range	((X2N_ProtocolIE_ID_t)47)
+#define X2N_ProtocolIE_ID_id_FailureCellPCI	((X2N_ProtocolIE_ID_t)48)
+#define X2N_ProtocolIE_ID_id_Re_establishmentCellECGI	((X2N_ProtocolIE_ID_t)49)
+#define X2N_ProtocolIE_ID_id_FailureCellCRNTI	((X2N_ProtocolIE_ID_t)50)
+#define X2N_ProtocolIE_ID_id_ShortMAC_I	((X2N_ProtocolIE_ID_t)51)
+#define X2N_ProtocolIE_ID_id_SourceCellECGI	((X2N_ProtocolIE_ID_t)52)
+#define X2N_ProtocolIE_ID_id_FailureCellECGI	((X2N_ProtocolIE_ID_t)53)
+#define X2N_ProtocolIE_ID_id_HandoverReportType	((X2N_ProtocolIE_ID_t)54)
+#define X2N_ProtocolIE_ID_id_PRACH_Configuration	((X2N_ProtocolIE_ID_t)55)
+#define X2N_ProtocolIE_ID_id_MBSFN_Subframe_Info	((X2N_ProtocolIE_ID_t)56)
+#define X2N_ProtocolIE_ID_id_ServedCellsToActivate	((X2N_ProtocolIE_ID_t)57)
+#define X2N_ProtocolIE_ID_id_ActivatedCellList	((X2N_ProtocolIE_ID_t)58)
+#define X2N_ProtocolIE_ID_id_DeactivationIndication	((X2N_ProtocolIE_ID_t)59)
+#define X2N_ProtocolIE_ID_id_UE_RLF_Report_Container	((X2N_ProtocolIE_ID_t)60)
+#define X2N_ProtocolIE_ID_id_ABSInformation	((X2N_ProtocolIE_ID_t)61)
+#define X2N_ProtocolIE_ID_id_InvokeIndication	((X2N_ProtocolIE_ID_t)62)
+#define X2N_ProtocolIE_ID_id_ABS_Status	((X2N_ProtocolIE_ID_t)63)
+#define X2N_ProtocolIE_ID_id_PartialSuccessIndicator	((X2N_ProtocolIE_ID_t)64)
+#define X2N_ProtocolIE_ID_id_MeasurementInitiationResult_List	((X2N_ProtocolIE_ID_t)65)
+#define X2N_ProtocolIE_ID_id_MeasurementInitiationResult_Item	((X2N_ProtocolIE_ID_t)66)
+#define X2N_ProtocolIE_ID_id_MeasurementFailureCause_Item	((X2N_ProtocolIE_ID_t)67)
+#define X2N_ProtocolIE_ID_id_CompleteFailureCauseInformation_List	((X2N_ProtocolIE_ID_t)68)
+#define X2N_ProtocolIE_ID_id_CompleteFailureCauseInformation_Item	((X2N_ProtocolIE_ID_t)69)
+#define X2N_ProtocolIE_ID_id_CSG_Id	((X2N_ProtocolIE_ID_t)70)
+#define X2N_ProtocolIE_ID_id_CSGMembershipStatus	((X2N_ProtocolIE_ID_t)71)
+#define X2N_ProtocolIE_ID_id_MDTConfiguration	((X2N_ProtocolIE_ID_t)72)
+#define X2N_ProtocolIE_ID_id_ManagementBasedMDTallowed	((X2N_ProtocolIE_ID_t)74)
+#define X2N_ProtocolIE_ID_id_RRCConnSetupIndicator	((X2N_ProtocolIE_ID_t)75)
+#define X2N_ProtocolIE_ID_id_NeighbourTAC	((X2N_ProtocolIE_ID_t)76)
+#define X2N_ProtocolIE_ID_id_Time_UE_StayedInCell_EnhancedGranularity	((X2N_ProtocolIE_ID_t)77)
+#define X2N_ProtocolIE_ID_id_RRCConnReestabIndicator	((X2N_ProtocolIE_ID_t)78)
+#define X2N_ProtocolIE_ID_id_MBMS_Service_Area_List	((X2N_ProtocolIE_ID_t)79)
+#define X2N_ProtocolIE_ID_id_HO_cause	((X2N_ProtocolIE_ID_t)80)
+#define X2N_ProtocolIE_ID_id_TargetCellInUTRAN	((X2N_ProtocolIE_ID_t)81)
+#define X2N_ProtocolIE_ID_id_MobilityInformation	((X2N_ProtocolIE_ID_t)82)
+#define X2N_ProtocolIE_ID_id_SourceCellCRNTI	((X2N_ProtocolIE_ID_t)83)
+#define X2N_ProtocolIE_ID_id_MultibandInfoList	((X2N_ProtocolIE_ID_t)84)
+#define X2N_ProtocolIE_ID_id_M3Configuration	((X2N_ProtocolIE_ID_t)85)
+#define X2N_ProtocolIE_ID_id_M4Configuration	((X2N_ProtocolIE_ID_t)86)
+#define X2N_ProtocolIE_ID_id_M5Configuration	((X2N_ProtocolIE_ID_t)87)
+#define X2N_ProtocolIE_ID_id_MDT_Location_Info	((X2N_ProtocolIE_ID_t)88)
+#define X2N_ProtocolIE_ID_id_ManagementBasedMDTPLMNList	((X2N_ProtocolIE_ID_t)89)
+#define X2N_ProtocolIE_ID_id_SignallingBasedMDTPLMNList	((X2N_ProtocolIE_ID_t)90)
+#define X2N_ProtocolIE_ID_id_ReceiveStatusOfULPDCPSDUsExtended	((X2N_ProtocolIE_ID_t)91)
+#define X2N_ProtocolIE_ID_id_ULCOUNTValueExtended	((X2N_ProtocolIE_ID_t)92)
+#define X2N_ProtocolIE_ID_id_DLCOUNTValueExtended	((X2N_ProtocolIE_ID_t)93)
+#define X2N_ProtocolIE_ID_id_eARFCNExtension	((X2N_ProtocolIE_ID_t)94)
+#define X2N_ProtocolIE_ID_id_UL_EARFCNExtension	((X2N_ProtocolIE_ID_t)95)
+#define X2N_ProtocolIE_ID_id_DL_EARFCNExtension	((X2N_ProtocolIE_ID_t)96)
+#define X2N_ProtocolIE_ID_id_AdditionalSpecialSubframe_Info	((X2N_ProtocolIE_ID_t)97)
+#define X2N_ProtocolIE_ID_id_Masked_IMEISV	((X2N_ProtocolIE_ID_t)98)
+#define X2N_ProtocolIE_ID_id_IntendedULDLConfiguration	((X2N_ProtocolIE_ID_t)99)
+#define X2N_ProtocolIE_ID_id_ExtendedULInterferenceOverloadInfo	((X2N_ProtocolIE_ID_t)100)
+#define X2N_ProtocolIE_ID_id_RNL_Header	((X2N_ProtocolIE_ID_t)101)
+#define X2N_ProtocolIE_ID_id_x2APMessage	((X2N_ProtocolIE_ID_t)102)
+#define X2N_ProtocolIE_ID_id_ProSeAuthorized	((X2N_ProtocolIE_ID_t)103)
+#define X2N_ProtocolIE_ID_id_ExpectedUEBehaviour	((X2N_ProtocolIE_ID_t)104)
+#define X2N_ProtocolIE_ID_id_UE_HistoryInformationFromTheUE	((X2N_ProtocolIE_ID_t)105)
+#define X2N_ProtocolIE_ID_id_DynamicDLTransmissionInformation	((X2N_ProtocolIE_ID_t)106)
+#define X2N_ProtocolIE_ID_id_UE_RLF_Report_Container_for_extended_bands	((X2N_ProtocolIE_ID_t)107)
+#define X2N_ProtocolIE_ID_id_CoMPInformation	((X2N_ProtocolIE_ID_t)108)
+#define X2N_ProtocolIE_ID_id_ReportingPeriodicityRSRPMR	((X2N_ProtocolIE_ID_t)109)
+#define X2N_ProtocolIE_ID_id_RSRPMRList	((X2N_ProtocolIE_ID_t)110)
+#define X2N_ProtocolIE_ID_id_MeNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)111)
+#define X2N_ProtocolIE_ID_id_SeNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)112)
+#define X2N_ProtocolIE_ID_id_UE_SecurityCapabilities	((X2N_ProtocolIE_ID_t)113)
+#define X2N_ProtocolIE_ID_id_SeNBSecurityKey	((X2N_ProtocolIE_ID_t)114)
+#define X2N_ProtocolIE_ID_id_SeNBUEAggregateMaximumBitRate	((X2N_ProtocolIE_ID_t)115)
+#define X2N_ProtocolIE_ID_id_ServingPLMN	((X2N_ProtocolIE_ID_t)116)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_List	((X2N_ProtocolIE_ID_t)117)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_Item	((X2N_ProtocolIE_ID_t)118)
+#define X2N_ProtocolIE_ID_id_MeNBtoSeNBContainer	((X2N_ProtocolIE_ID_t)119)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_List	((X2N_ProtocolIE_ID_t)120)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_Item	((X2N_ProtocolIE_ID_t)121)
+#define X2N_ProtocolIE_ID_id_SeNBtoMeNBContainer	((X2N_ProtocolIE_ID_t)122)
+#define X2N_ProtocolIE_ID_id_ResponseInformationSeNBReconfComp	((X2N_ProtocolIE_ID_t)123)
+#define X2N_ProtocolIE_ID_id_UE_ContextInformationSeNBModReq	((X2N_ProtocolIE_ID_t)124)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_ModReqItem	((X2N_ProtocolIE_ID_t)125)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeModified_ModReqItem	((X2N_ProtocolIE_ID_t)126)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqItem	((X2N_ProtocolIE_ID_t)127)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_ModAckList	((X2N_ProtocolIE_ID_t)128)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_ModAckList	((X2N_ProtocolIE_ID_t)129)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_ModAckList	((X2N_ProtocolIE_ID_t)130)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_ModAckItem	((X2N_ProtocolIE_ID_t)131)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_ModAckItem	((X2N_ProtocolIE_ID_t)132)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_ModAckItem	((X2N_ProtocolIE_ID_t)133)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqd	((X2N_ProtocolIE_ID_t)134)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_ModReqdItem	((X2N_ProtocolIE_ID_t)135)
+#define X2N_ProtocolIE_ID_id_SCGChangeIndication	((X2N_ProtocolIE_ID_t)136)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_List_RelReq	((X2N_ProtocolIE_ID_t)137)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_RelReqItem	((X2N_ProtocolIE_ID_t)138)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_List_RelConf	((X2N_ProtocolIE_ID_t)139)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_RelConfItem	((X2N_ProtocolIE_ID_t)140)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToCounterCheck_List	((X2N_ProtocolIE_ID_t)141)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToCounterCheckItem	((X2N_ProtocolIE_ID_t)142)
+#define X2N_ProtocolIE_ID_id_CoverageModificationList	((X2N_ProtocolIE_ID_t)143)
+#define X2N_ProtocolIE_ID_id_ReportingPeriodicityCSIR	((X2N_ProtocolIE_ID_t)145)
+#define X2N_ProtocolIE_ID_id_CSIReportList	((X2N_ProtocolIE_ID_t)146)
+#define X2N_ProtocolIE_ID_id_UEID	((X2N_ProtocolIE_ID_t)147)
+#define X2N_ProtocolIE_ID_id_enhancedRNTP	((X2N_ProtocolIE_ID_t)148)
+#define X2N_ProtocolIE_ID_id_ProSeUEtoNetworkRelaying	((X2N_ProtocolIE_ID_t)149)
+#define X2N_ProtocolIE_ID_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18	((X2N_ProtocolIE_ID_t)150)
+#define X2N_ProtocolIE_ID_id_ULCOUNTValuePDCP_SNlength18	((X2N_ProtocolIE_ID_t)151)
+#define X2N_ProtocolIE_ID_id_DLCOUNTValuePDCP_SNlength18	((X2N_ProtocolIE_ID_t)152)
+#define X2N_ProtocolIE_ID_id_UE_ContextReferenceAtSeNB	((X2N_ProtocolIE_ID_t)153)
+#define X2N_ProtocolIE_ID_id_UE_ContextKeptIndicator	((X2N_ProtocolIE_ID_t)154)
+#define X2N_ProtocolIE_ID_id_New_eNB_UE_X2AP_ID_Extension	((X2N_ProtocolIE_ID_t)155)
+#define X2N_ProtocolIE_ID_id_Old_eNB_UE_X2AP_ID_Extension	((X2N_ProtocolIE_ID_t)156)
+#define X2N_ProtocolIE_ID_id_MeNB_UE_X2AP_ID_Extension	((X2N_ProtocolIE_ID_t)157)
+#define X2N_ProtocolIE_ID_id_SeNB_UE_X2AP_ID_Extension	((X2N_ProtocolIE_ID_t)158)
+#define X2N_ProtocolIE_ID_id_LHN_ID	((X2N_ProtocolIE_ID_t)159)
+#define X2N_ProtocolIE_ID_id_FreqBandIndicatorPriority	((X2N_ProtocolIE_ID_t)160)
+#define X2N_ProtocolIE_ID_id_M6Configuration	((X2N_ProtocolIE_ID_t)161)
+#define X2N_ProtocolIE_ID_id_M7Configuration	((X2N_ProtocolIE_ID_t)162)
+#define X2N_ProtocolIE_ID_id_Tunnel_Information_for_BBF	((X2N_ProtocolIE_ID_t)163)
+#define X2N_ProtocolIE_ID_id_SIPTO_BearerDeactivationIndication	((X2N_ProtocolIE_ID_t)164)
+#define X2N_ProtocolIE_ID_id_GW_TransportLayerAddress	((X2N_ProtocolIE_ID_t)165)
+#define X2N_ProtocolIE_ID_id_Correlation_ID	((X2N_ProtocolIE_ID_t)166)
+#define X2N_ProtocolIE_ID_id_SIPTO_Correlation_ID	((X2N_ProtocolIE_ID_t)167)
+#define X2N_ProtocolIE_ID_id_SIPTO_L_GW_TransportLayerAddress	((X2N_ProtocolIE_ID_t)168)
+#define X2N_ProtocolIE_ID_id_X2RemovalThreshold	((X2N_ProtocolIE_ID_t)169)
+#define X2N_ProtocolIE_ID_id_CellReportingIndicator	((X2N_ProtocolIE_ID_t)170)
+#define X2N_ProtocolIE_ID_id_BearerType	((X2N_ProtocolIE_ID_t)171)
+#define X2N_ProtocolIE_ID_id_resumeID	((X2N_ProtocolIE_ID_t)172)
+#define X2N_ProtocolIE_ID_id_UE_ContextInformationRetrieve	((X2N_ProtocolIE_ID_t)173)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeSetupRetrieve_Item	((X2N_ProtocolIE_ID_t)174)
+#define X2N_ProtocolIE_ID_id_NewEUTRANCellIdentifier	((X2N_ProtocolIE_ID_t)175)
+#define X2N_ProtocolIE_ID_id_V2XServicesAuthorized	((X2N_ProtocolIE_ID_t)176)
+#define X2N_ProtocolIE_ID_id_OffsetOfNbiotChannelNumberToDL_EARFCN	((X2N_ProtocolIE_ID_t)177)
+#define X2N_ProtocolIE_ID_id_OffsetOfNbiotChannelNumberToUL_EARFCN	((X2N_ProtocolIE_ID_t)178)
+#define X2N_ProtocolIE_ID_id_AdditionalSpecialSubframeExtension_Info	((X2N_ProtocolIE_ID_t)179)
+#define X2N_ProtocolIE_ID_id_BandwidthReducedSI	((X2N_ProtocolIE_ID_t)180)
+#define X2N_ProtocolIE_ID_id_MakeBeforeBreakIndicator	((X2N_ProtocolIE_ID_t)181)
+#define X2N_ProtocolIE_ID_id_UE_ContextReferenceAtWT	((X2N_ProtocolIE_ID_t)182)
+#define X2N_ProtocolIE_ID_id_WT_UE_ContextKeptIndicator	((X2N_ProtocolIE_ID_t)183)
+#define X2N_ProtocolIE_ID_id_UESidelinkAggregateMaximumBitRate	((X2N_ProtocolIE_ID_t)184)
+#define X2N_ProtocolIE_ID_id_uL_GTPtunnelEndpoint	((X2N_ProtocolIE_ID_t)185)
+#define X2N_ProtocolIE_ID_id_DL_scheduling_PDCCH_CCE_usage	((X2N_ProtocolIE_ID_t)193)
+#define X2N_ProtocolIE_ID_id_UL_scheduling_PDCCH_CCE_usage	((X2N_ProtocolIE_ID_t)194)
+#define X2N_ProtocolIE_ID_id_UEAppLayerMeasConfig	((X2N_ProtocolIE_ID_t)195)
+#define X2N_ProtocolIE_ID_id_extended_e_RAB_MaximumBitrateDL	((X2N_ProtocolIE_ID_t)196)
+#define X2N_ProtocolIE_ID_id_extended_e_RAB_MaximumBitrateUL	((X2N_ProtocolIE_ID_t)197)
+#define X2N_ProtocolIE_ID_id_extended_e_RAB_GuaranteedBitrateDL	((X2N_ProtocolIE_ID_t)198)
+#define X2N_ProtocolIE_ID_id_extended_e_RAB_GuaranteedBitrateUL	((X2N_ProtocolIE_ID_t)199)
+#define X2N_ProtocolIE_ID_id_extended_uEaggregateMaximumBitRateDownlink	((X2N_ProtocolIE_ID_t)200)
+#define X2N_ProtocolIE_ID_id_extended_uEaggregateMaximumBitRateUplink	((X2N_ProtocolIE_ID_t)201)
+#define X2N_ProtocolIE_ID_id_NRrestrictioninEPSasSecondaryRAT	((X2N_ProtocolIE_ID_t)202)
+#define X2N_ProtocolIE_ID_id_SgNBSecurityKey	((X2N_ProtocolIE_ID_t)203)
+#define X2N_ProtocolIE_ID_id_SgNBUEAggregateMaximumBitRate	((X2N_ProtocolIE_ID_t)204)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBAddReqList	((X2N_ProtocolIE_ID_t)205)
+#define X2N_ProtocolIE_ID_id_MeNBtoSgNBContainer	((X2N_ProtocolIE_ID_t)206)
+#define X2N_ProtocolIE_ID_id_SgNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)207)
+#define X2N_ProtocolIE_ID_id_RequestedSplitSRBs	((X2N_ProtocolIE_ID_t)208)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBAddReq_Item	((X2N_ProtocolIE_ID_t)209)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList	((X2N_ProtocolIE_ID_t)210)
+#define X2N_ProtocolIE_ID_id_SgNBtoMeNBContainer	((X2N_ProtocolIE_ID_t)211)
+#define X2N_ProtocolIE_ID_id_AdmittedSplitSRBs	((X2N_ProtocolIE_ID_t)212)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item	((X2N_ProtocolIE_ID_t)213)
+#define X2N_ProtocolIE_ID_id_ResponseInformationSgNBReconfComp	((X2N_ProtocolIE_ID_t)214)
+#define X2N_ProtocolIE_ID_id_UE_ContextInformation_SgNBModReq	((X2N_ProtocolIE_ID_t)215)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBModReq_Item	((X2N_ProtocolIE_ID_t)216)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReq_Item	((X2N_ProtocolIE_ID_t)217)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReq_Item	((X2N_ProtocolIE_ID_t)218)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList	((X2N_ProtocolIE_ID_t)219)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_SgNBModAckList	((X2N_ProtocolIE_ID_t)220)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList	((X2N_ProtocolIE_ID_t)221)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item	((X2N_ProtocolIE_ID_t)222)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item	((X2N_ProtocolIE_ID_t)223)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item	((X2N_ProtocolIE_ID_t)224)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReqdList	((X2N_ProtocolIE_ID_t)225)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReqdList	((X2N_ProtocolIE_ID_t)226)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBModReqd_Item	((X2N_ProtocolIE_ID_t)227)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeModified_SgNBModReqd_Item	((X2N_ProtocolIE_ID_t)228)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBChaConfList	((X2N_ProtocolIE_ID_t)229)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBChaConf_Item	((X2N_ProtocolIE_ID_t)230)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqList	((X2N_ProtocolIE_ID_t)231)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReq_Item	((X2N_ProtocolIE_ID_t)232)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelConfList	((X2N_ProtocolIE_ID_t)233)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelConf_Item	((X2N_ProtocolIE_ID_t)234)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToSgNBCounterCheck_List	((X2N_ProtocolIE_ID_t)235)
+#define X2N_ProtocolIE_ID_id_E_RABs_SubjectToSgNBCounterCheck_Item	((X2N_ProtocolIE_ID_t)236)
+#define X2N_ProtocolIE_ID_id_RRCContainer	((X2N_ProtocolIE_ID_t)237)
+#define X2N_ProtocolIE_ID_id_SRBType	((X2N_ProtocolIE_ID_t)238)
+#define X2N_ProtocolIE_ID_id_Target_SgNB_ID	((X2N_ProtocolIE_ID_t)239)
+#define X2N_ProtocolIE_ID_id_HandoverRestrictionList	((X2N_ProtocolIE_ID_t)240)
+#define X2N_ProtocolIE_ID_id_SCGConfigurationQuery	((X2N_ProtocolIE_ID_t)241)
+#define X2N_ProtocolIE_ID_id_SplitSRB	((X2N_ProtocolIE_ID_t)242)
+#define X2N_ProtocolIE_ID_id_UENRMeasurement	((X2N_ProtocolIE_ID_t)243)
+#define X2N_ProtocolIE_ID_id_InitiatingNodeType_EndcX2Setup	((X2N_ProtocolIE_ID_t)244)
+#define X2N_ProtocolIE_ID_id_InitiatingNodeType_EndcConfigUpdate	((X2N_ProtocolIE_ID_t)245)
+#define X2N_ProtocolIE_ID_id_RespondingNodeType_EndcX2Setup	((X2N_ProtocolIE_ID_t)246)
+#define X2N_ProtocolIE_ID_id_RespondingNodeType_EndcConfigUpdate	((X2N_ProtocolIE_ID_t)247)
+#define X2N_ProtocolIE_ID_id_NRUESecurityCapabilities	((X2N_ProtocolIE_ID_t)248)
+#define X2N_ProtocolIE_ID_id_PDCPChangeIndication	((X2N_ProtocolIE_ID_t)249)
+#define X2N_ProtocolIE_ID_id_ServedEUTRAcellsENDCX2ManagementList	((X2N_ProtocolIE_ID_t)250)
+#define X2N_ProtocolIE_ID_id_CellAssistanceInformation	((X2N_ProtocolIE_ID_t)251)
+#define X2N_ProtocolIE_ID_id_Globalen_gNB_ID	((X2N_ProtocolIE_ID_t)252)
+#define X2N_ProtocolIE_ID_id_ServedNRcellsENDCX2ManagementList	((X2N_ProtocolIE_ID_t)253)
+#define X2N_ProtocolIE_ID_id_UE_ContextReferenceAtSgNB	((X2N_ProtocolIE_ID_t)254)
+#define X2N_ProtocolIE_ID_id_SecondaryRATUsageReport	((X2N_ProtocolIE_ID_t)255)
+#define X2N_ProtocolIE_ID_id_ActivationID	((X2N_ProtocolIE_ID_t)256)
+#define X2N_ProtocolIE_ID_id_MeNBResourceCoordinationInformation	((X2N_ProtocolIE_ID_t)257)
+#define X2N_ProtocolIE_ID_id_SgNBResourceCoordinationInformation	((X2N_ProtocolIE_ID_t)258)
+#define X2N_ProtocolIE_ID_id_ServedEUTRAcellsToModifyListENDCConfUpd	((X2N_ProtocolIE_ID_t)259)
+#define X2N_ProtocolIE_ID_id_ServedEUTRAcellsToDeleteListENDCConfUpd	((X2N_ProtocolIE_ID_t)260)
+#define X2N_ProtocolIE_ID_id_ServedNRcellsToModifyListENDCConfUpd	((X2N_ProtocolIE_ID_t)261)
+#define X2N_ProtocolIE_ID_id_ServedNRcellsToDeleteListENDCConfUpd	((X2N_ProtocolIE_ID_t)262)
+#define X2N_ProtocolIE_ID_id_E_RABUsageReport_Item	((X2N_ProtocolIE_ID_t)263)
+#define X2N_ProtocolIE_ID_id_Old_SgNB_UE_X2AP_ID	((X2N_ProtocolIE_ID_t)264)
+#define X2N_ProtocolIE_ID_id_SecondaryRATUsageReportList	((X2N_ProtocolIE_ID_t)265)
+#define X2N_ProtocolIE_ID_id_SecondaryRATUsageReport_Item	((X2N_ProtocolIE_ID_t)266)
+#define X2N_ProtocolIE_ID_id_ServedNRCellsToActivate	((X2N_ProtocolIE_ID_t)267)
+#define X2N_ProtocolIE_ID_id_ActivatedNRCellList	((X2N_ProtocolIE_ID_t)268)
+#define X2N_ProtocolIE_ID_id_SelectedPLMN	((X2N_ProtocolIE_ID_t)269)
+#define X2N_ProtocolIE_ID_id_UEs_ToBeReset	((X2N_ProtocolIE_ID_t)270)
+#define X2N_ProtocolIE_ID_id_UEs_Admitted_ToBeReset	((X2N_ProtocolIE_ID_t)271)
+#define X2N_ProtocolIE_ID_id_RRCConfigIndication	((X2N_ProtocolIE_ID_t)272)
+#define X2N_ProtocolIE_ID_id_DownlinkPacketLossRate	((X2N_ProtocolIE_ID_t)273)
+#define X2N_ProtocolIE_ID_id_UplinkPacketLossRate	((X2N_ProtocolIE_ID_t)274)
+#define X2N_ProtocolIE_ID_id_SubscriberProfileIDforRFP	((X2N_ProtocolIE_ID_t)275)
+#define X2N_ProtocolIE_ID_id_serviceType	((X2N_ProtocolIE_ID_t)276)
+#define X2N_ProtocolIE_ID_id_AerialUEsubscriptionInformation	((X2N_ProtocolIE_ID_t)277)
+#define X2N_ProtocolIE_ID_id_SGNB_Addition_Trigger_Ind	((X2N_ProtocolIE_ID_t)278)
+#define X2N_ProtocolIE_ID_id_MeNBCell_ID	((X2N_ProtocolIE_ID_t)279)
+#define X2N_ProtocolIE_ID_id_RequestedSplitSRBsrelease	((X2N_ProtocolIE_ID_t)280)
+#define X2N_ProtocolIE_ID_id_AdmittedSplitSRBsrelease	((X2N_ProtocolIE_ID_t)281)
+#define X2N_ProtocolIE_ID_id_NRS_NSSS_PowerOffset	((X2N_ProtocolIE_ID_t)282)
+#define X2N_ProtocolIE_ID_id_NSSS_NumOccasionDifferentPrecoder	((X2N_ProtocolIE_ID_t)283)
+#define X2N_ProtocolIE_ID_id_ProtectedEUTRAResourceIndication	((X2N_ProtocolIE_ID_t)284)
+#define X2N_ProtocolIE_ID_id_InitiatingNodeType_EutranrCellResourceCoordination	((X2N_ProtocolIE_ID_t)285)
+#define X2N_ProtocolIE_ID_id_RespondingNodeType_EutranrCellResourceCoordination	((X2N_ProtocolIE_ID_t)286)
+#define X2N_ProtocolIE_ID_id_DataTrafficResourceIndication	((X2N_ProtocolIE_ID_t)287)
+#define X2N_ProtocolIE_ID_id_SpectrumSharingGroupID	((X2N_ProtocolIE_ID_t)288)
+#define X2N_ProtocolIE_ID_id_ListofEUTRACellsinEUTRACoordinationReq	((X2N_ProtocolIE_ID_t)289)
+#define X2N_ProtocolIE_ID_id_ListofEUTRACellsinEUTRACoordinationResp	((X2N_ProtocolIE_ID_t)290)
+#define X2N_ProtocolIE_ID_id_ListofEUTRACellsinNRCoordinationReq	((X2N_ProtocolIE_ID_t)291)
+#define X2N_ProtocolIE_ID_id_ListofNRCellsinNRCoordinationReq	((X2N_ProtocolIE_ID_t)292)
+#define X2N_ProtocolIE_ID_id_ListofNRCellsinNRCoordinationResp	((X2N_ProtocolIE_ID_t)293)
+#define X2N_ProtocolIE_ID_id_E_RABs_AdmittedToBeModified_SgNBModConfList	((X2N_ProtocolIE_ID_t)294)
+#define X2N_ProtocolIE_ID_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item	((X2N_ProtocolIE_ID_t)295)
+#define X2N_ProtocolIE_ID_id_UEContextLevelUserPlaneActivity	((X2N_ProtocolIE_ID_t)296)
+#define X2N_ProtocolIE_ID_id_ERABActivityNotifyItemList	((X2N_ProtocolIE_ID_t)297)
+#define X2N_ProtocolIE_ID_id_InitiatingNodeType_EndcX2Removal	((X2N_ProtocolIE_ID_t)298)
+#define X2N_ProtocolIE_ID_id_RespondingNodeType_EndcX2Removal	((X2N_ProtocolIE_ID_t)299)
+#define X2N_ProtocolIE_ID_id_RLC_Status	((X2N_ProtocolIE_ID_t)300)
+#define X2N_ProtocolIE_ID_id_CNTypeRestrictions	((X2N_ProtocolIE_ID_t)301)
+#define X2N_ProtocolIE_ID_id_uLpDCPSnLength	((X2N_ProtocolIE_ID_t)302)
+#define X2N_ProtocolIE_ID_id_BluetoothMeasurementConfiguration	((X2N_ProtocolIE_ID_t)303)
+#define X2N_ProtocolIE_ID_id_WLANMeasurementConfiguration	((X2N_ProtocolIE_ID_t)304)
+#define X2N_ProtocolIE_ID_id_NRrestrictionin5GS	((X2N_ProtocolIE_ID_t)305)
+#define X2N_ProtocolIE_ID_id_dL_Forwarding	((X2N_ProtocolIE_ID_t)306)
+#define X2N_ProtocolIE_ID_id_E_RABs_DataForwardingAddress_List	((X2N_ProtocolIE_ID_t)307)
+#define X2N_ProtocolIE_ID_id_E_RABs_DataForwardingAddress_Item	((X2N_ProtocolIE_ID_t)308)
+#define X2N_ProtocolIE_ID_id_Subscription_Based_UE_DifferentiationInfo	((X2N_ProtocolIE_ID_t)309)
+#define X2N_ProtocolIE_ID_id_GNBOverloadInformation	((X2N_ProtocolIE_ID_t)310)
+#define X2N_ProtocolIE_ID_id_dLPDCPSnLength	((X2N_ProtocolIE_ID_t)311)
+#define X2N_ProtocolIE_ID_id_secondarysgNBDLGTPTEIDatPDCP	((X2N_ProtocolIE_ID_t)312)
+#define X2N_ProtocolIE_ID_id_secondarymeNBULGTPTEIDatPDCP	((X2N_ProtocolIE_ID_t)313)
+#define X2N_ProtocolIE_ID_id_lCID	((X2N_ProtocolIE_ID_t)314)
+#define X2N_ProtocolIE_ID_id_duplicationActivation	((X2N_ProtocolIE_ID_t)315)
+#define X2N_ProtocolIE_ID_id_ECGI	((X2N_ProtocolIE_ID_t)316)
+#define X2N_ProtocolIE_ID_id_RLCMode_transferred	((X2N_ProtocolIE_ID_t)317)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList	((X2N_ProtocolIE_ID_t)318)
+#define X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item	((X2N_ProtocolIE_ID_t)319)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqdList	((X2N_ProtocolIE_ID_t)320)
+#define X2N_ProtocolIE_ID_id_E_RABs_ToBeReleased_SgNBRelReqd_Item	((X2N_ProtocolIE_ID_t)321)
+#define X2N_ProtocolIE_ID_id_NRCGI	((X2N_ProtocolIE_ID_t)322)
+#define X2N_ProtocolIE_ID_id_MeNBCoordinationAssistanceInformation	((X2N_ProtocolIE_ID_t)323)
+#define X2N_ProtocolIE_ID_id_SgNBCoordinationAssistanceInformation	((X2N_ProtocolIE_ID_t)324)
+#define X2N_ProtocolIE_ID_id_new_drb_ID_req	((X2N_ProtocolIE_ID_t)325)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ProtocolIE-Single-Container.c b/asn1c_defs/X2N_ProtocolIE-Single-Container.c
new file mode 100644
index 0000000..99b2f2a
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Single-Container.c
@@ -0,0 +1,998 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ProtocolIE-Single-Container.h"
+
+/*
+ * This type is implemented using X2N_E_RABs_ToBeSetup_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_SubjectToStatusTransfer_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_CellInformation_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_CellToReport_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_MeasurementInitiationResult_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_MeasurementFailureCause_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_CompleteFailureCauseInformation_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_CellMeasurementResult_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeAdded_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeAdded_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeAdded_ModReqItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeModified_ModReqItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_ModReqItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_ModReqdItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_RelReqItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_RelConfItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_SubjectToCounterCheckItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeSetupRetrieve_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABs_DataForwardingAddress_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RAB_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_E_RABUsageReport_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using X2N_SecondaryRATUsageReport_ItemIEs,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P0 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P0_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetup_ItemIEs_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P1 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P1_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ItemIEs_5,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ItemIEs_specs_5	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P2 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P2_tags_3[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_9,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_9	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P3 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P3_tags_4[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellInformation_ItemIEs_13,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellInformation_ItemIEs_specs_13	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P4 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P4_tags_5[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellToReport_ItemIEs_17,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellToReport_ItemIEs_specs_17	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P5 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P5_tags_6[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementInitiationResult_ItemIEs_21,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementInitiationResult_ItemIEs_specs_21	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P6 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P6_tags_7[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_MeasurementFailureCause_ItemIEs_25,
+	3,	/* Elements count */
+	&asn_SPC_X2N_MeasurementFailureCause_ItemIEs_specs_25	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P7 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P7_tags_8[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CompleteFailureCauseInformation_ItemIEs_29,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CompleteFailureCauseInformation_ItemIEs_specs_29	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P8 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P8_tags_9[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_CellMeasurementResult_ItemIEs_33,
+	3,	/* Elements count */
+	&asn_SPC_X2N_CellMeasurementResult_ItemIEs_specs_33	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P9 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P9_tags_10[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ItemIEs_37,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ItemIEs_specs_37	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P10 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P10_tags_11[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_41,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_41	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P11 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P11_tags_12[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_ModReqItemIEs_45,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_ModReqItemIEs_specs_45	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P12 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P12_tags_13[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_ModReqItemIEs_49,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_ModReqItemIEs_specs_49	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P13 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P13_tags_14[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqItemIEs_53,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqItemIEs_specs_53	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P14 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P14_tags_15[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_57,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_57	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P15 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P15_tags_16[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_61,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_61	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P16 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P16_tags_17[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_65,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_65	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P17 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P17_tags_18[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_69,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_ModReqdItemIEs_specs_69	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P18 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P18_tags_19[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelReqItemIEs_73,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelReqItemIEs_specs_73	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P19 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P19_tags_20[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_RelConfItemIEs_77,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_RelConfItemIEs_specs_77	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P20 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P20_tags_21[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToCounterCheckItemIEs_81,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToCounterCheckItemIEs_specs_81	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P21 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P21_tags_22[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_85,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_85	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P22 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P22_tags_23[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_89,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_89	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P23 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P23_tags_24[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_93,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_93	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P24 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P24_tags_25[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_97,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_97	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P25 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P25_tags_26[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_101,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_101	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P26 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P26_tags_27[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_105,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_105	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P27 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P27_tags_28[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_109,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_109	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P28 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P28_tags_29[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_113,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_113	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P29 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P29_tags_30[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_117,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_117	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P30 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P30_tags_31[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_121,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_121	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P31 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P31_tags_32[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_125,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_125	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P32 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P32_tags_33[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_129,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_129	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P33 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P33_tags_34[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_133,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_133	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P34 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P34_tags_35[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_137,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_137	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P35 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P35_tags_36[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_141,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_141	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P36 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P36_tags_37[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_145,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_145	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P37 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P37_tags_38[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_149,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_149	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P38 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P38_tags_39[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_153,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_153	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P39 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P39_tags_40[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABs_DataForwardingAddress_ItemIEs_157,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABs_DataForwardingAddress_ItemIEs_specs_157	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P40 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P40_tags_41[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RAB_ItemIEs_161,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RAB_ItemIEs_specs_161	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P41 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P41_tags_42[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_E_RABUsageReport_ItemIEs_165,
+	3,	/* Elements count */
+	&asn_SPC_X2N_E_RABUsageReport_ItemIEs_specs_165	/* Additional specs */
+};
+
+static const ber_tlv_tag_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P42 = {
+	"ProtocolIE-Single-Container",
+	"ProtocolIE-Single-Container",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43,
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43[0]), /* 1 */
+	asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43,	/* Same as above */
+	sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43)
+		/sizeof(asn_DEF_X2N_ProtocolIE_Single_Container_8183P42_tags_43[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATUsageReport_ItemIEs_169,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATUsageReport_ItemIEs_specs_169	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ProtocolIE-Single-Container.h b/asn1c_defs/X2N_ProtocolIE-Single-Container.h
new file mode 100644
index 0000000..923046b
--- /dev/null
+++ b/asn1c_defs/X2N_ProtocolIE-Single-Container.h
@@ -0,0 +1,589 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-Containers"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ProtocolIE_Single_Container_H_
+#define	_X2N_ProtocolIE_Single_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Field.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ProtocolIE-Single-Container */
+typedef X2N_E_RABs_ToBeSetup_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P0_t;
+typedef X2N_E_RABs_Admitted_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P1_t;
+typedef X2N_E_RABs_SubjectToStatusTransfer_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P2_t;
+typedef X2N_CellInformation_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P3_t;
+typedef X2N_CellToReport_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P4_t;
+typedef X2N_MeasurementInitiationResult_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P5_t;
+typedef X2N_MeasurementFailureCause_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P6_t;
+typedef X2N_CompleteFailureCauseInformation_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P7_t;
+typedef X2N_CellMeasurementResult_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P8_t;
+typedef X2N_E_RABs_ToBeAdded_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P9_t;
+typedef X2N_E_RABs_Admitted_ToBeAdded_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P10_t;
+typedef X2N_E_RABs_ToBeAdded_ModReqItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P11_t;
+typedef X2N_E_RABs_ToBeModified_ModReqItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P12_t;
+typedef X2N_E_RABs_ToBeReleased_ModReqItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P13_t;
+typedef X2N_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P14_t;
+typedef X2N_E_RABs_Admitted_ToBeModified_ModAckItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P15_t;
+typedef X2N_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P16_t;
+typedef X2N_E_RABs_ToBeReleased_ModReqdItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P17_t;
+typedef X2N_E_RABs_ToBeReleased_RelReqItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P18_t;
+typedef X2N_E_RABs_ToBeReleased_RelConfItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P19_t;
+typedef X2N_E_RABs_SubjectToCounterCheckItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P20_t;
+typedef X2N_E_RABs_ToBeSetupRetrieve_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P21_t;
+typedef X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P22_t;
+typedef X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P23_t;
+typedef X2N_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P24_t;
+typedef X2N_E_RABs_ToBeModified_SgNBModReq_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P25_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P26_t;
+typedef X2N_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P27_t;
+typedef X2N_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P28_t;
+typedef X2N_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P29_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P30_t;
+typedef X2N_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P31_t;
+typedef X2N_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P32_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P33_t;
+typedef X2N_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P34_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P35_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P36_t;
+typedef X2N_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P37_t;
+typedef X2N_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P38_t;
+typedef X2N_E_RABs_DataForwardingAddress_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P39_t;
+typedef X2N_E_RAB_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P40_t;
+typedef X2N_E_RABUsageReport_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P41_t;
+typedef X2N_SecondaryRATUsageReport_ItemIEs_t	 X2N_ProtocolIE_Single_Container_8183P42_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P0;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P0_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P0_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P0_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P0_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P0_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P0_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P0_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P0_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P0_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P0_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P0_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P1;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P1_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P1_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P1_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P1_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P1_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P1_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P1_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P1_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P1_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P1_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P1_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P2;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P2_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P2_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P2_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P2_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P2_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P2_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P2_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P2_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P2_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P2_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P2_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P3;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P3_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P3_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P3_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P3_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P3_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P3_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P3_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P3_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P3_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P3_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P3_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P4;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P4_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P4_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P4_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P4_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P4_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P4_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P4_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P4_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P4_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P4_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P4_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P5;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P5_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P5_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P5_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P5_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P5_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P5_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P5_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P5_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P5_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P5_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P5_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P6;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P6_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P6_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P6_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P6_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P6_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P6_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P6_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P6_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P6_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P6_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P6_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P7;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P7_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P7_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P7_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P7_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P7_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P7_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P7_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P7_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P7_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P7_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P7_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P8;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P8_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P8_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P8_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P8_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P8_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P8_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P8_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P8_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P8_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P8_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P8_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P9;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P9_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P9_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P9_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P9_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P9_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P9_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P9_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P9_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P9_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P9_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P9_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P10;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P10_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P10_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P10_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P10_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P10_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P10_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P10_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P10_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P10_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P10_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P10_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P11;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P11_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P11_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P11_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P11_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P11_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P11_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P11_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P11_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P11_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P11_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P11_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P12;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P12_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P12_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P12_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P12_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P12_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P12_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P12_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P12_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P12_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P12_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P12_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P13;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P13_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P13_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P13_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P13_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P13_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P13_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P13_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P13_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P13_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P13_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P13_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P14;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P14_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P14_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P14_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P14_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P14_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P14_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P14_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P14_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P14_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P14_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P14_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P15;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P15_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P15_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P15_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P15_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P15_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P15_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P15_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P15_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P15_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P15_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P15_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P16;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P16_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P16_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P16_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P16_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P16_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P16_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P16_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P16_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P16_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P16_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P16_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P17;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P17_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P17_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P17_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P17_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P17_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P17_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P17_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P17_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P17_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P17_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P17_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P18;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P18_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P18_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P18_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P18_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P18_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P18_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P18_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P18_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P18_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P18_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P18_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P19;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P19_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P19_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P19_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P19_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P19_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P19_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P19_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P19_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P19_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P19_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P19_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P20;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P20_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P20_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P20_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P20_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P20_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P20_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P20_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P20_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P20_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P20_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P20_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P21;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P21_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P21_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P21_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P21_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P21_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P21_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P21_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P21_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P21_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P21_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P21_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P22;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P22_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P22_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P22_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P22_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P22_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P22_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P22_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P22_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P22_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P22_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P22_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P23;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P23_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P23_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P23_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P23_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P23_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P23_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P23_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P23_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P23_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P23_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P23_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P24;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P24_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P24_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P24_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P24_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P24_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P24_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P24_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P24_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P24_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P24_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P24_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P25;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P25_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P25_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P25_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P25_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P25_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P25_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P25_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P25_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P25_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P25_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P25_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P26;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P26_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P26_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P26_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P26_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P26_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P26_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P26_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P26_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P26_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P26_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P26_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P27;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P27_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P27_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P27_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P27_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P27_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P27_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P27_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P27_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P27_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P27_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P27_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P28;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P28_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P28_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P28_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P28_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P28_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P28_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P28_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P28_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P28_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P28_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P28_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P29;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P29_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P29_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P29_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P29_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P29_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P29_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P29_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P29_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P29_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P29_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P29_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P30;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P30_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P30_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P30_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P30_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P30_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P30_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P30_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P30_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P30_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P30_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P30_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P31;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P31_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P31_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P31_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P31_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P31_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P31_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P31_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P31_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P31_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P31_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P31_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P32;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P32_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P32_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P32_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P32_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P32_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P32_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P32_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P32_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P32_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P32_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P32_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P33;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P33_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P33_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P33_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P33_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P33_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P33_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P33_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P33_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P33_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P33_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P33_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P34;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P34_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P34_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P34_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P34_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P34_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P34_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P34_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P34_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P34_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P34_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P34_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P35;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P35_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P35_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P35_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P35_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P35_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P35_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P35_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P35_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P35_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P35_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P35_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P36;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P36_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P36_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P36_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P36_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P36_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P36_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P36_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P36_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P36_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P36_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P36_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P37;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P37_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P37_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P37_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P37_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P37_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P37_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P37_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P37_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P37_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P37_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P37_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P38;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P38_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P38_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P38_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P38_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P38_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P38_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P38_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P38_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P38_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P38_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P38_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P39;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P39_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P39_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P39_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P39_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P39_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P39_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P39_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P39_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P39_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P39_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P39_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P40;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P40_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P40_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P40_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P40_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P40_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P40_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P40_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P40_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P40_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P40_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P40_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P41;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P41_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P41_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P41_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P41_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P41_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P41_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P41_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P41_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P41_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P41_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P41_encode_aper;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ProtocolIE_Single_Container_8183P42;
+asn_struct_free_f X2N_ProtocolIE_Single_Container_8183P42_free;
+asn_struct_print_f X2N_ProtocolIE_Single_Container_8183P42_print;
+asn_constr_check_f X2N_ProtocolIE_Single_Container_8183P42_constraint;
+ber_type_decoder_f X2N_ProtocolIE_Single_Container_8183P42_decode_ber;
+der_type_encoder_f X2N_ProtocolIE_Single_Container_8183P42_encode_der;
+xer_type_decoder_f X2N_ProtocolIE_Single_Container_8183P42_decode_xer;
+xer_type_encoder_f X2N_ProtocolIE_Single_Container_8183P42_encode_xer;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P42_decode_uper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P42_encode_uper;
+per_type_decoder_f X2N_ProtocolIE_Single_Container_8183P42_decode_aper;
+per_type_encoder_f X2N_ProtocolIE_Single_Container_8183P42_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ProtocolIE_Single_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_QCI.c b/asn1c_defs/X2N_QCI.c
new file mode 100644
index 0000000..b89e52e
--- /dev/null
+++ b/asn1c_defs/X2N_QCI.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_QCI.h"
+
+int
+X2N_QCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_QCI_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_QCI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_QCI = {
+	"QCI",
+	"QCI",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_QCI_tags_1,
+	sizeof(asn_DEF_X2N_QCI_tags_1)
+		/sizeof(asn_DEF_X2N_QCI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_QCI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_QCI_tags_1)
+		/sizeof(asn_DEF_X2N_QCI_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_QCI_constr_1, X2N_QCI_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_QCI.h b/asn1c_defs/X2N_QCI.h
new file mode 100644
index 0000000..4b64642
--- /dev/null
+++ b/asn1c_defs/X2N_QCI.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_QCI_H_
+#define	_X2N_QCI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_QCI */
+typedef long	 X2N_QCI_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_QCI_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_QCI;
+asn_struct_free_f X2N_QCI_free;
+asn_struct_print_f X2N_QCI_print;
+asn_constr_check_f X2N_QCI_constraint;
+ber_type_decoder_f X2N_QCI_decode_ber;
+der_type_encoder_f X2N_QCI_encode_der;
+xer_type_decoder_f X2N_QCI_decode_xer;
+xer_type_encoder_f X2N_QCI_encode_xer;
+per_type_decoder_f X2N_QCI_decode_uper;
+per_type_encoder_f X2N_QCI_encode_uper;
+per_type_decoder_f X2N_QCI_decode_aper;
+per_type_encoder_f X2N_QCI_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_QCI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RLC-Status.c b/asn1c_defs/X2N_RLC-Status.c
new file mode 100644
index 0000000..6ef071c
--- /dev/null
+++ b/asn1c_defs/X2N_RLC-Status.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RLC-Status.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_RLC_Status_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLC_Status, reestablishment_Indication),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Reestablishment_Indication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reestablishment-Indication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RLC_Status, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P186,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_RLC_Status_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_RLC_Status_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RLC_Status_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reestablishment-Indication */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_RLC_Status_specs_1 = {
+	sizeof(struct X2N_RLC_Status),
+	offsetof(struct X2N_RLC_Status, _asn_ctx),
+	asn_MAP_X2N_RLC_Status_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_RLC_Status_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RLC_Status = {
+	"RLC-Status",
+	"RLC-Status",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RLC_Status_tags_1,
+	sizeof(asn_DEF_X2N_RLC_Status_tags_1)
+		/sizeof(asn_DEF_X2N_RLC_Status_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RLC_Status_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RLC_Status_tags_1)
+		/sizeof(asn_DEF_X2N_RLC_Status_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RLC_Status_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_RLC_Status_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RLC-Status.h b/asn1c_defs/X2N_RLC-Status.h
new file mode 100644
index 0000000..ff5ad5c
--- /dev/null
+++ b/asn1c_defs/X2N_RLC-Status.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RLC_Status_H_
+#define	_X2N_RLC_Status_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Reestablishment-Indication.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_RLC-Status */
+typedef struct X2N_RLC_Status {
+	X2N_Reestablishment_Indication_t	 reestablishment_Indication;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RLC_Status_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RLC_Status;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RLC_Status_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RLCMode.c b/asn1c_defs/X2N_RLCMode.c
new file mode 100644
index 0000000..1da033f
--- /dev/null
+++ b/asn1c_defs/X2N_RLCMode.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RLCMode.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_RLCMode_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RLCMode_value2enum_1[] = {
+	{ 0,	6,	"rlc-am" },
+	{ 1,	20,	"rlc-um-bidirectional" },
+	{ 2,	24,	"rlc-um-unidirectional-ul" },
+	{ 3,	24,	"rlc-um-unidirectional-dl" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RLCMode_enum2value_1[] = {
+	0,	/* rlc-am(0) */
+	1,	/* rlc-um-bidirectional(1) */
+	3,	/* rlc-um-unidirectional-dl(3) */
+	2	/* rlc-um-unidirectional-ul(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_RLCMode_specs_1 = {
+	asn_MAP_X2N_RLCMode_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RLCMode_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RLCMode_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RLCMode = {
+	"RLCMode",
+	"RLCMode",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RLCMode_tags_1,
+	sizeof(asn_DEF_X2N_RLCMode_tags_1)
+		/sizeof(asn_DEF_X2N_RLCMode_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RLCMode_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RLCMode_tags_1)
+		/sizeof(asn_DEF_X2N_RLCMode_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RLCMode_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RLCMode_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RLCMode.h b/asn1c_defs/X2N_RLCMode.h
new file mode 100644
index 0000000..bcc930e
--- /dev/null
+++ b/asn1c_defs/X2N_RLCMode.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RLCMode_H_
+#define	_X2N_RLCMode_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RLCMode {
+	X2N_RLCMode_rlc_am	= 0,
+	X2N_RLCMode_rlc_um_bidirectional	= 1,
+	X2N_RLCMode_rlc_um_unidirectional_ul	= 2,
+	X2N_RLCMode_rlc_um_unidirectional_dl	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RLCMode;
+
+/* X2N_RLCMode */
+typedef long	 X2N_RLCMode_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_RLCMode_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RLCMode;
+extern const asn_INTEGER_specifics_t asn_SPC_RLCMode_specs_1;
+asn_struct_free_f RLCMode_free;
+asn_struct_print_f RLCMode_print;
+asn_constr_check_f RLCMode_constraint;
+ber_type_decoder_f RLCMode_decode_ber;
+der_type_encoder_f RLCMode_encode_der;
+xer_type_decoder_f RLCMode_decode_xer;
+xer_type_encoder_f RLCMode_encode_xer;
+per_type_decoder_f RLCMode_decode_uper;
+per_type_encoder_f RLCMode_encode_uper;
+per_type_decoder_f RLCMode_decode_aper;
+per_type_encoder_f RLCMode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RLCMode_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RLFIndication.c b/asn1c_defs/X2N_RLFIndication.c
new file mode 100644
index 0000000..5449568
--- /dev/null
+++ b/asn1c_defs/X2N_RLFIndication.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RLFIndication.h"
+
+asn_TYPE_member_t asn_MBR_X2N_RLFIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RLFIndication, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P24,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RLFIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RLFIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RLFIndication_specs_1 = {
+	sizeof(struct X2N_RLFIndication),
+	offsetof(struct X2N_RLFIndication, _asn_ctx),
+	asn_MAP_X2N_RLFIndication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RLFIndication = {
+	"RLFIndication",
+	"RLFIndication",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RLFIndication_tags_1,
+	sizeof(asn_DEF_X2N_RLFIndication_tags_1)
+		/sizeof(asn_DEF_X2N_RLFIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RLFIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RLFIndication_tags_1)
+		/sizeof(asn_DEF_X2N_RLFIndication_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RLFIndication_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_RLFIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RLFIndication.h b/asn1c_defs/X2N_RLFIndication.h
new file mode 100644
index 0000000..efd974b
--- /dev/null
+++ b/asn1c_defs/X2N_RLFIndication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RLFIndication_H_
+#define	_X2N_RLFIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RLFIndication */
+typedef struct X2N_RLFIndication {
+	X2N_ProtocolIE_Container_8180P24_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RLFIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RLFIndication;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RLFIndication_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RLFIndication_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RLFIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RNL-Header.c b/asn1c_defs/X2N_RNL-Header.c
new file mode 100644
index 0000000..80b7bb5
--- /dev/null
+++ b/asn1c_defs/X2N_RNL-Header.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RNL-Header.h"
+
+#include "X2N_GlobalENB-ID.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_RNL_Header_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RNL_Header, source_GlobalENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"source-GlobalENB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_RNL_Header, target_GlobalENB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"target-GlobalENB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RNL_Header, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P16,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_RNL_Header_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_RNL_Header_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RNL_Header_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* target-GlobalENB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_RNL_Header_specs_1 = {
+	sizeof(struct X2N_RNL_Header),
+	offsetof(struct X2N_RNL_Header, _asn_ctx),
+	asn_MAP_X2N_RNL_Header_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_RNL_Header_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RNL_Header = {
+	"RNL-Header",
+	"RNL-Header",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RNL_Header_tags_1,
+	sizeof(asn_DEF_X2N_RNL_Header_tags_1)
+		/sizeof(asn_DEF_X2N_RNL_Header_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RNL_Header_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RNL_Header_tags_1)
+		/sizeof(asn_DEF_X2N_RNL_Header_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RNL_Header_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_RNL_Header_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RNL-Header.h b/asn1c_defs/X2N_RNL-Header.h
new file mode 100644
index 0000000..8115388
--- /dev/null
+++ b/asn1c_defs/X2N_RNL-Header.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RNL_Header_H_
+#define	_X2N_RNL_Header_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GlobalENB-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_GlobalENB_ID;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_RNL-Header */
+typedef struct X2N_RNL_Header {
+	X2N_GlobalENB_ID_t	 source_GlobalENB_ID;
+	struct X2N_GlobalENB_ID	*target_GlobalENB_ID;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RNL_Header_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RNL_Header;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RNL_Header_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RNTP-Threshold.c b/asn1c_defs/X2N_RNTP-Threshold.c
new file mode 100644
index 0000000..8a62004
--- /dev/null
+++ b/asn1c_defs/X2N_RNTP-Threshold.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RNTP-Threshold.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_RNTP_Threshold_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RNTP_Threshold_value2enum_1[] = {
+	{ 0,	13,	"minusInfinity" },
+	{ 1,	11,	"minusEleven" },
+	{ 2,	8,	"minusTen" },
+	{ 3,	9,	"minusNine" },
+	{ 4,	10,	"minusEight" },
+	{ 5,	10,	"minusSeven" },
+	{ 6,	8,	"minusSix" },
+	{ 7,	9,	"minusFive" },
+	{ 8,	9,	"minusFour" },
+	{ 9,	10,	"minusThree" },
+	{ 10,	8,	"minusTwo" },
+	{ 11,	8,	"minusOne" },
+	{ 12,	4,	"zero" },
+	{ 13,	3,	"one" },
+	{ 14,	3,	"two" },
+	{ 15,	5,	"three" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RNTP_Threshold_enum2value_1[] = {
+	4,	/* minusEight(4) */
+	1,	/* minusEleven(1) */
+	7,	/* minusFive(7) */
+	8,	/* minusFour(8) */
+	0,	/* minusInfinity(0) */
+	3,	/* minusNine(3) */
+	11,	/* minusOne(11) */
+	5,	/* minusSeven(5) */
+	6,	/* minusSix(6) */
+	2,	/* minusTen(2) */
+	9,	/* minusThree(9) */
+	10,	/* minusTwo(10) */
+	13,	/* one(13) */
+	15,	/* three(15) */
+	14,	/* two(14) */
+	12	/* zero(12) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_RNTP_Threshold_specs_1 = {
+	asn_MAP_X2N_RNTP_Threshold_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RNTP_Threshold_enum2value_1,	/* N => "tag"; sorted by N */
+	16,	/* Number of elements in the maps */
+	17,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RNTP_Threshold_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RNTP_Threshold = {
+	"RNTP-Threshold",
+	"RNTP-Threshold",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RNTP_Threshold_tags_1,
+	sizeof(asn_DEF_X2N_RNTP_Threshold_tags_1)
+		/sizeof(asn_DEF_X2N_RNTP_Threshold_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RNTP_Threshold_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RNTP_Threshold_tags_1)
+		/sizeof(asn_DEF_X2N_RNTP_Threshold_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RNTP_Threshold_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RNTP_Threshold_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RNTP-Threshold.h b/asn1c_defs/X2N_RNTP-Threshold.h
new file mode 100644
index 0000000..0a01bf2
--- /dev/null
+++ b/asn1c_defs/X2N_RNTP-Threshold.h
@@ -0,0 +1,68 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RNTP_Threshold_H_
+#define	_X2N_RNTP_Threshold_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RNTP_Threshold {
+	X2N_RNTP_Threshold_minusInfinity	= 0,
+	X2N_RNTP_Threshold_minusEleven	= 1,
+	X2N_RNTP_Threshold_minusTen	= 2,
+	X2N_RNTP_Threshold_minusNine	= 3,
+	X2N_RNTP_Threshold_minusEight	= 4,
+	X2N_RNTP_Threshold_minusSeven	= 5,
+	X2N_RNTP_Threshold_minusSix	= 6,
+	X2N_RNTP_Threshold_minusFive	= 7,
+	X2N_RNTP_Threshold_minusFour	= 8,
+	X2N_RNTP_Threshold_minusThree	= 9,
+	X2N_RNTP_Threshold_minusTwo	= 10,
+	X2N_RNTP_Threshold_minusOne	= 11,
+	X2N_RNTP_Threshold_zero	= 12,
+	X2N_RNTP_Threshold_one	= 13,
+	X2N_RNTP_Threshold_two	= 14,
+	X2N_RNTP_Threshold_three	= 15
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RNTP_Threshold;
+
+/* X2N_RNTP-Threshold */
+typedef long	 X2N_RNTP_Threshold_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_RNTP_Threshold_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RNTP_Threshold;
+extern const asn_INTEGER_specifics_t asn_SPC_RNTP_Threshold_specs_1;
+asn_struct_free_f RNTP_Threshold_free;
+asn_struct_print_f RNTP_Threshold_print;
+asn_constr_check_f RNTP_Threshold_constraint;
+ber_type_decoder_f RNTP_Threshold_decode_ber;
+der_type_encoder_f RNTP_Threshold_encode_der;
+xer_type_decoder_f RNTP_Threshold_decode_xer;
+xer_type_encoder_f RNTP_Threshold_encode_xer;
+per_type_decoder_f RNTP_Threshold_decode_uper;
+per_type_encoder_f RNTP_Threshold_encode_uper;
+per_type_decoder_f RNTP_Threshold_decode_aper;
+per_type_encoder_f RNTP_Threshold_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RNTP_Threshold_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRC-Config-Ind.c b/asn1c_defs/X2N_RRC-Config-Ind.c
new file mode 100644
index 0000000..8d7a700
--- /dev/null
+++ b/asn1c_defs/X2N_RRC-Config-Ind.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRC-Config-Ind.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_RRC_Config_Ind_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RRC_Config_Ind_value2enum_1[] = {
+	{ 0,	11,	"full-config" },
+	{ 1,	12,	"delta-config" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RRC_Config_Ind_enum2value_1[] = {
+	1,	/* delta-config(1) */
+	0	/* full-config(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_RRC_Config_Ind_specs_1 = {
+	asn_MAP_X2N_RRC_Config_Ind_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RRC_Config_Ind_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RRC_Config_Ind_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRC_Config_Ind = {
+	"RRC-Config-Ind",
+	"RRC-Config-Ind",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RRC_Config_Ind_tags_1,
+	sizeof(asn_DEF_X2N_RRC_Config_Ind_tags_1)
+		/sizeof(asn_DEF_X2N_RRC_Config_Ind_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRC_Config_Ind_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRC_Config_Ind_tags_1)
+		/sizeof(asn_DEF_X2N_RRC_Config_Ind_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RRC_Config_Ind_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RRC_Config_Ind_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRC-Config-Ind.h b/asn1c_defs/X2N_RRC-Config-Ind.h
new file mode 100644
index 0000000..3279687
--- /dev/null
+++ b/asn1c_defs/X2N_RRC-Config-Ind.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRC_Config_Ind_H_
+#define	_X2N_RRC_Config_Ind_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RRC_Config_Ind {
+	X2N_RRC_Config_Ind_full_config	= 0,
+	X2N_RRC_Config_Ind_delta_config	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RRC_Config_Ind;
+
+/* X2N_RRC-Config-Ind */
+typedef long	 X2N_RRC_Config_Ind_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRC_Config_Ind;
+asn_struct_free_f X2N_RRC_Config_Ind_free;
+asn_struct_print_f X2N_RRC_Config_Ind_print;
+asn_constr_check_f X2N_RRC_Config_Ind_constraint;
+ber_type_decoder_f X2N_RRC_Config_Ind_decode_ber;
+der_type_encoder_f X2N_RRC_Config_Ind_encode_der;
+xer_type_decoder_f X2N_RRC_Config_Ind_decode_xer;
+xer_type_encoder_f X2N_RRC_Config_Ind_encode_xer;
+per_type_decoder_f X2N_RRC_Config_Ind_decode_uper;
+per_type_encoder_f X2N_RRC_Config_Ind_encode_uper;
+per_type_decoder_f X2N_RRC_Config_Ind_decode_aper;
+per_type_encoder_f X2N_RRC_Config_Ind_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRC_Config_Ind_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRC-Context.c b/asn1c_defs/X2N_RRC-Context.c
new file mode 100644
index 0000000..e7c9ffa
--- /dev/null
+++ b/asn1c_defs/X2N_RRC-Context.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRC-Context.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_RRC_Context_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRC_Context = {
+	"RRC-Context",
+	"RRC-Context",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_RRC_Context_tags_1,
+	sizeof(asn_DEF_X2N_RRC_Context_tags_1)
+		/sizeof(asn_DEF_X2N_RRC_Context_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRC_Context_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRC_Context_tags_1)
+		/sizeof(asn_DEF_X2N_RRC_Context_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRC-Context.h b/asn1c_defs/X2N_RRC-Context.h
new file mode 100644
index 0000000..e1fb515
--- /dev/null
+++ b/asn1c_defs/X2N_RRC-Context.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRC_Context_H_
+#define	_X2N_RRC_Context_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RRC-Context */
+typedef OCTET_STRING_t	 X2N_RRC_Context_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRC_Context;
+asn_struct_free_f X2N_RRC_Context_free;
+asn_struct_print_f X2N_RRC_Context_print;
+asn_constr_check_f X2N_RRC_Context_constraint;
+ber_type_decoder_f X2N_RRC_Context_decode_ber;
+der_type_encoder_f X2N_RRC_Context_encode_der;
+xer_type_decoder_f X2N_RRC_Context_decode_xer;
+xer_type_encoder_f X2N_RRC_Context_encode_xer;
+per_type_decoder_f X2N_RRC_Context_decode_uper;
+per_type_encoder_f X2N_RRC_Context_encode_uper;
+per_type_decoder_f X2N_RRC_Context_decode_aper;
+per_type_encoder_f X2N_RRC_Context_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRC_Context_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRCConnReestabIndicator.c b/asn1c_defs/X2N_RRCConnReestabIndicator.c
new file mode 100644
index 0000000..a3de061
--- /dev/null
+++ b/asn1c_defs/X2N_RRCConnReestabIndicator.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRCConnReestabIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_RRCConnReestabIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RRCConnReestabIndicator_value2enum_1[] = {
+	{ 0,	22,	"reconfigurationFailure" },
+	{ 1,	15,	"handoverFailure" },
+	{ 2,	12,	"otherFailure" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RRCConnReestabIndicator_enum2value_1[] = {
+	1,	/* handoverFailure(1) */
+	2,	/* otherFailure(2) */
+	0	/* reconfigurationFailure(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_RRCConnReestabIndicator_specs_1 = {
+	asn_MAP_X2N_RRCConnReestabIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RRCConnReestabIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RRCConnReestabIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRCConnReestabIndicator = {
+	"RRCConnReestabIndicator",
+	"RRCConnReestabIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RRCConnReestabIndicator_tags_1,
+	sizeof(asn_DEF_X2N_RRCConnReestabIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_RRCConnReestabIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRCConnReestabIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRCConnReestabIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_RRCConnReestabIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RRCConnReestabIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RRCConnReestabIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRCConnReestabIndicator.h b/asn1c_defs/X2N_RRCConnReestabIndicator.h
new file mode 100644
index 0000000..f7937be
--- /dev/null
+++ b/asn1c_defs/X2N_RRCConnReestabIndicator.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRCConnReestabIndicator_H_
+#define	_X2N_RRCConnReestabIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RRCConnReestabIndicator {
+	X2N_RRCConnReestabIndicator_reconfigurationFailure	= 0,
+	X2N_RRCConnReestabIndicator_handoverFailure	= 1,
+	X2N_RRCConnReestabIndicator_otherFailure	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RRCConnReestabIndicator;
+
+/* X2N_RRCConnReestabIndicator */
+typedef long	 X2N_RRCConnReestabIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRCConnReestabIndicator;
+asn_struct_free_f X2N_RRCConnReestabIndicator_free;
+asn_struct_print_f X2N_RRCConnReestabIndicator_print;
+asn_constr_check_f X2N_RRCConnReestabIndicator_constraint;
+ber_type_decoder_f X2N_RRCConnReestabIndicator_decode_ber;
+der_type_encoder_f X2N_RRCConnReestabIndicator_encode_der;
+xer_type_decoder_f X2N_RRCConnReestabIndicator_decode_xer;
+xer_type_encoder_f X2N_RRCConnReestabIndicator_encode_xer;
+per_type_decoder_f X2N_RRCConnReestabIndicator_decode_uper;
+per_type_encoder_f X2N_RRCConnReestabIndicator_encode_uper;
+per_type_decoder_f X2N_RRCConnReestabIndicator_decode_aper;
+per_type_encoder_f X2N_RRCConnReestabIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRCConnReestabIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRCConnSetupIndicator.c b/asn1c_defs/X2N_RRCConnSetupIndicator.c
new file mode 100644
index 0000000..adbc3f1
--- /dev/null
+++ b/asn1c_defs/X2N_RRCConnSetupIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRCConnSetupIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_RRCConnSetupIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RRCConnSetupIndicator_value2enum_1[] = {
+	{ 0,	12,	"rrcConnSetup" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RRCConnSetupIndicator_enum2value_1[] = {
+	0	/* rrcConnSetup(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_RRCConnSetupIndicator_specs_1 = {
+	asn_MAP_X2N_RRCConnSetupIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RRCConnSetupIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RRCConnSetupIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRCConnSetupIndicator = {
+	"RRCConnSetupIndicator",
+	"RRCConnSetupIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RRCConnSetupIndicator_tags_1,
+	sizeof(asn_DEF_X2N_RRCConnSetupIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_RRCConnSetupIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRCConnSetupIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRCConnSetupIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_RRCConnSetupIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RRCConnSetupIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RRCConnSetupIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRCConnSetupIndicator.h b/asn1c_defs/X2N_RRCConnSetupIndicator.h
new file mode 100644
index 0000000..e31c427
--- /dev/null
+++ b/asn1c_defs/X2N_RRCConnSetupIndicator.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRCConnSetupIndicator_H_
+#define	_X2N_RRCConnSetupIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RRCConnSetupIndicator {
+	X2N_RRCConnSetupIndicator_rrcConnSetup	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RRCConnSetupIndicator;
+
+/* X2N_RRCConnSetupIndicator */
+typedef long	 X2N_RRCConnSetupIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRCConnSetupIndicator;
+asn_struct_free_f X2N_RRCConnSetupIndicator_free;
+asn_struct_print_f X2N_RRCConnSetupIndicator_print;
+asn_constr_check_f X2N_RRCConnSetupIndicator_constraint;
+ber_type_decoder_f X2N_RRCConnSetupIndicator_decode_ber;
+der_type_encoder_f X2N_RRCConnSetupIndicator_encode_der;
+xer_type_decoder_f X2N_RRCConnSetupIndicator_decode_xer;
+xer_type_encoder_f X2N_RRCConnSetupIndicator_encode_xer;
+per_type_decoder_f X2N_RRCConnSetupIndicator_decode_uper;
+per_type_encoder_f X2N_RRCConnSetupIndicator_encode_uper;
+per_type_decoder_f X2N_RRCConnSetupIndicator_decode_aper;
+per_type_encoder_f X2N_RRCConnSetupIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRCConnSetupIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRCContainer.c b/asn1c_defs/X2N_RRCContainer.c
new file mode 100644
index 0000000..40af804
--- /dev/null
+++ b/asn1c_defs/X2N_RRCContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRCContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_RRCContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRCContainer = {
+	"RRCContainer",
+	"RRCContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_RRCContainer_tags_1,
+	sizeof(asn_DEF_X2N_RRCContainer_tags_1)
+		/sizeof(asn_DEF_X2N_RRCContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRCContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRCContainer_tags_1)
+		/sizeof(asn_DEF_X2N_RRCContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRCContainer.h b/asn1c_defs/X2N_RRCContainer.h
new file mode 100644
index 0000000..8ddb098
--- /dev/null
+++ b/asn1c_defs/X2N_RRCContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRCContainer_H_
+#define	_X2N_RRCContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RRCContainer */
+typedef OCTET_STRING_t	 X2N_RRCContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRCContainer;
+asn_struct_free_f X2N_RRCContainer_free;
+asn_struct_print_f X2N_RRCContainer_print;
+asn_constr_check_f X2N_RRCContainer_constraint;
+ber_type_decoder_f X2N_RRCContainer_decode_ber;
+der_type_encoder_f X2N_RRCContainer_encode_der;
+xer_type_decoder_f X2N_RRCContainer_decode_xer;
+xer_type_encoder_f X2N_RRCContainer_encode_xer;
+per_type_decoder_f X2N_RRCContainer_decode_uper;
+per_type_encoder_f X2N_RRCContainer_encode_uper;
+per_type_decoder_f X2N_RRCContainer_decode_aper;
+per_type_encoder_f X2N_RRCContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRCContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RRCTransfer.c b/asn1c_defs/X2N_RRCTransfer.c
new file mode 100644
index 0000000..b7957f8
--- /dev/null
+++ b/asn1c_defs/X2N_RRCTransfer.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RRCTransfer.h"
+
+asn_TYPE_member_t asn_MBR_X2N_RRCTransfer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RRCTransfer, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P68,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RRCTransfer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RRCTransfer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RRCTransfer_specs_1 = {
+	sizeof(struct X2N_RRCTransfer),
+	offsetof(struct X2N_RRCTransfer, _asn_ctx),
+	asn_MAP_X2N_RRCTransfer_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RRCTransfer = {
+	"RRCTransfer",
+	"RRCTransfer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RRCTransfer_tags_1,
+	sizeof(asn_DEF_X2N_RRCTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_RRCTransfer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RRCTransfer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RRCTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_RRCTransfer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RRCTransfer_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_RRCTransfer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RRCTransfer.h b/asn1c_defs/X2N_RRCTransfer.h
new file mode 100644
index 0000000..824bc09
--- /dev/null
+++ b/asn1c_defs/X2N_RRCTransfer.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RRCTransfer_H_
+#define	_X2N_RRCTransfer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RRCTransfer */
+typedef struct X2N_RRCTransfer {
+	X2N_ProtocolIE_Container_8180P68_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RRCTransfer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RRCTransfer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RRCTransfer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RRCTransfer_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RRCTransfer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RSRPMRList.c b/asn1c_defs/X2N_RSRPMRList.c
new file mode 100644
index 0000000..7748c65
--- /dev/null
+++ b/asn1c_defs/X2N_RSRPMRList.c
@@ -0,0 +1,104 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RSRPMRList.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_RSRPMRList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1,  128 }	/* (SIZE(1..128)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMRList__Member, rSRPMeasurementResult),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RSRPMeasurementResult,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rSRPMeasurementResult"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RSRPMRList__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P188,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rSRPMeasurementResult */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_RSRPMRList__Member),
+	offsetof(struct X2N_RSRPMRList__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	2,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_RSRPMRList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RSRPMRList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_RSRPMRList_specs_1 = {
+	sizeof(struct X2N_RSRPMRList),
+	offsetof(struct X2N_RSRPMRList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMRList = {
+	"RSRPMRList",
+	"RSRPMRList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_RSRPMRList_tags_1,
+	sizeof(asn_DEF_X2N_RSRPMRList_tags_1)
+		/sizeof(asn_DEF_X2N_RSRPMRList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RSRPMRList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RSRPMRList_tags_1)
+		/sizeof(asn_DEF_X2N_RSRPMRList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RSRPMRList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_RSRPMRList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_RSRPMRList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RSRPMRList.h b/asn1c_defs/X2N_RSRPMRList.h
new file mode 100644
index 0000000..ddaa948
--- /dev/null
+++ b/asn1c_defs/X2N_RSRPMRList.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RSRPMRList_H_
+#define	_X2N_RSRPMRList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_RSRPMeasurementResult.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_RSRPMRList__Member {
+	X2N_RSRPMeasurementResult_t	 rSRPMeasurementResult;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RSRPMRList__Member;
+
+/* X2N_RSRPMRList */
+typedef struct X2N_RSRPMRList {
+	A_SEQUENCE_OF(RSRPMRList__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RSRPMRList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMRList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RSRPMRList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RSRPMeasurementResult.c b/asn1c_defs/X2N_RSRPMeasurementResult.c
new file mode 100644
index 0000000..967f8b0
--- /dev/null
+++ b/asn1c_defs/X2N_RSRPMeasurementResult.c
@@ -0,0 +1,144 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RSRPMeasurementResult.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_rSRPMeasured_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 97)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_rSRPMeasured_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  0,  97 }	/* (0..97,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_RSRPMeasurementResult_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  9 }	/* (SIZE(1..9)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMeasurementResult__Member, rSRPCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rSRPCellID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RSRPMeasurementResult__Member, rSRPMeasured),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_rSRPMeasured_constr_4,  memb_X2N_rSRPMeasured_constraint_2 },
+		0, 0, /* No default value */
+		"rSRPMeasured"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RSRPMeasurementResult__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P187,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rSRPCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rSRPMeasured */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_RSRPMeasurementResult__Member),
+	offsetof(struct X2N_RSRPMeasurementResult__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RSRPMeasurementResult_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RSRPMeasurementResult_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_RSRPMeasurementResult_specs_1 = {
+	sizeof(struct X2N_RSRPMeasurementResult),
+	offsetof(struct X2N_RSRPMeasurementResult, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMeasurementResult = {
+	"RSRPMeasurementResult",
+	"RSRPMeasurementResult",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_RSRPMeasurementResult_tags_1,
+	sizeof(asn_DEF_X2N_RSRPMeasurementResult_tags_1)
+		/sizeof(asn_DEF_X2N_RSRPMeasurementResult_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RSRPMeasurementResult_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RSRPMeasurementResult_tags_1)
+		/sizeof(asn_DEF_X2N_RSRPMeasurementResult_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RSRPMeasurementResult_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_RSRPMeasurementResult_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_RSRPMeasurementResult_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RSRPMeasurementResult.h b/asn1c_defs/X2N_RSRPMeasurementResult.h
new file mode 100644
index 0000000..4181ff6
--- /dev/null
+++ b/asn1c_defs/X2N_RSRPMeasurementResult.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RSRPMeasurementResult_H_
+#define	_X2N_RSRPMeasurementResult_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ECGI.h"
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_RSRPMeasurementResult__Member {
+	X2N_ECGI_t	 rSRPCellID;
+	long	 rSRPMeasured;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RSRPMeasurementResult__Member;
+
+/* X2N_RSRPMeasurementResult */
+typedef struct X2N_RSRPMeasurementResult {
+	A_SEQUENCE_OF(RSRPMeasurementResult__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RSRPMeasurementResult_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RSRPMeasurementResult;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_RSRPMeasurementResult_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RSRPMeasurementResult_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_RSRPMeasurementResult_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RSRPMeasurementResult_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RadioResourceStatus.c b/asn1c_defs/X2N_RadioResourceStatus.c
new file mode 100644
index 0000000..da16c36
--- /dev/null
+++ b/asn1c_defs/X2N_RadioResourceStatus.c
@@ -0,0 +1,113 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RadioResourceStatus.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_RadioResourceStatus_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, dL_GBR_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_GBR_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-GBR-PRB-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, uL_GBR_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_GBR_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-GBR-PRB-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, dL_non_GBR_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_non_GBR_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-non-GBR-PRB-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, uL_non_GBR_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_non_GBR_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-non-GBR-PRB-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, dL_Total_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DL_Total_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dL-Total-PRB-usage"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RadioResourceStatus, uL_Total_PRB_usage),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_Total_PRB_usage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-Total-PRB-usage"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RadioResourceStatus, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P183,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_RadioResourceStatus_oms_1[] = { 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_RadioResourceStatus_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RadioResourceStatus_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dL-GBR-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uL-GBR-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-non-GBR-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-non-GBR-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* dL-Total-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* uL-Total-PRB-usage */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RadioResourceStatus_specs_1 = {
+	sizeof(struct X2N_RadioResourceStatus),
+	offsetof(struct X2N_RadioResourceStatus, _asn_ctx),
+	asn_MAP_X2N_RadioResourceStatus_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_RadioResourceStatus_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RadioResourceStatus = {
+	"RadioResourceStatus",
+	"RadioResourceStatus",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RadioResourceStatus_tags_1,
+	sizeof(asn_DEF_X2N_RadioResourceStatus_tags_1)
+		/sizeof(asn_DEF_X2N_RadioResourceStatus_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RadioResourceStatus_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RadioResourceStatus_tags_1)
+		/sizeof(asn_DEF_X2N_RadioResourceStatus_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RadioResourceStatus_1,
+	7,	/* Elements count */
+	&asn_SPC_X2N_RadioResourceStatus_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RadioResourceStatus.h b/asn1c_defs/X2N_RadioResourceStatus.h
new file mode 100644
index 0000000..5c37c0e
--- /dev/null
+++ b/asn1c_defs/X2N_RadioResourceStatus.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RadioResourceStatus_H_
+#define	_X2N_RadioResourceStatus_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_DL-GBR-PRB-usage.h"
+#include "X2N_UL-GBR-PRB-usage.h"
+#include "X2N_DL-non-GBR-PRB-usage.h"
+#include "X2N_UL-non-GBR-PRB-usage.h"
+#include "X2N_DL-Total-PRB-usage.h"
+#include "X2N_UL-Total-PRB-usage.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_RadioResourceStatus */
+typedef struct X2N_RadioResourceStatus {
+	X2N_DL_GBR_PRB_usage_t	 dL_GBR_PRB_usage;
+	X2N_UL_GBR_PRB_usage_t	 uL_GBR_PRB_usage;
+	X2N_DL_non_GBR_PRB_usage_t	 dL_non_GBR_PRB_usage;
+	X2N_UL_non_GBR_PRB_usage_t	 uL_non_GBR_PRB_usage;
+	X2N_DL_Total_PRB_usage_t	 dL_Total_PRB_usage;
+	X2N_UL_Total_PRB_usage_t	 uL_Total_PRB_usage;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RadioResourceStatus_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RadioResourceStatus;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RadioResourceStatus_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RadioResourceStatus_1[7];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RadioResourceStatus_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RadioframeAllocationOffset.c b/asn1c_defs/X2N_RadioframeAllocationOffset.c
new file mode 100644
index 0000000..ca7705f
--- /dev/null
+++ b/asn1c_defs/X2N_RadioframeAllocationOffset.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RadioframeAllocationOffset.h"
+
+int
+X2N_RadioframeAllocationOffset_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_RadioframeAllocationOffset_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  7 }	/* (0..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RadioframeAllocationOffset_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RadioframeAllocationOffset = {
+	"RadioframeAllocationOffset",
+	"RadioframeAllocationOffset",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_RadioframeAllocationOffset_tags_1,
+	sizeof(asn_DEF_X2N_RadioframeAllocationOffset_tags_1)
+		/sizeof(asn_DEF_X2N_RadioframeAllocationOffset_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RadioframeAllocationOffset_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RadioframeAllocationOffset_tags_1)
+		/sizeof(asn_DEF_X2N_RadioframeAllocationOffset_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RadioframeAllocationOffset_constr_1, X2N_RadioframeAllocationOffset_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_RadioframeAllocationOffset.h b/asn1c_defs/X2N_RadioframeAllocationOffset.h
new file mode 100644
index 0000000..9904721
--- /dev/null
+++ b/asn1c_defs/X2N_RadioframeAllocationOffset.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RadioframeAllocationOffset_H_
+#define	_X2N_RadioframeAllocationOffset_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RadioframeAllocationOffset */
+typedef long	 X2N_RadioframeAllocationOffset_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_RadioframeAllocationOffset_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RadioframeAllocationOffset;
+asn_struct_free_f X2N_RadioframeAllocationOffset_free;
+asn_struct_print_f X2N_RadioframeAllocationOffset_print;
+asn_constr_check_f X2N_RadioframeAllocationOffset_constraint;
+ber_type_decoder_f X2N_RadioframeAllocationOffset_decode_ber;
+der_type_encoder_f X2N_RadioframeAllocationOffset_encode_der;
+xer_type_decoder_f X2N_RadioframeAllocationOffset_decode_xer;
+xer_type_encoder_f X2N_RadioframeAllocationOffset_encode_xer;
+per_type_decoder_f X2N_RadioframeAllocationOffset_decode_uper;
+per_type_encoder_f X2N_RadioframeAllocationOffset_encode_uper;
+per_type_decoder_f X2N_RadioframeAllocationOffset_decode_aper;
+per_type_encoder_f X2N_RadioframeAllocationOffset_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RadioframeAllocationOffset_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RadioframeAllocationPeriod.c b/asn1c_defs/X2N_RadioframeAllocationPeriod.c
new file mode 100644
index 0000000..6f8862f
--- /dev/null
+++ b/asn1c_defs/X2N_RadioframeAllocationPeriod.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RadioframeAllocationPeriod.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_RadioframeAllocationPeriod_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_RadioframeAllocationPeriod_value2enum_1[] = {
+	{ 0,	2,	"n1" },
+	{ 1,	2,	"n2" },
+	{ 2,	2,	"n4" },
+	{ 3,	2,	"n8" },
+	{ 4,	3,	"n16" },
+	{ 5,	3,	"n32" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_RadioframeAllocationPeriod_enum2value_1[] = {
+	0,	/* n1(0) */
+	4,	/* n16(4) */
+	1,	/* n2(1) */
+	5,	/* n32(5) */
+	2,	/* n4(2) */
+	3	/* n8(3) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_RadioframeAllocationPeriod_specs_1 = {
+	asn_MAP_X2N_RadioframeAllocationPeriod_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_RadioframeAllocationPeriod_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RadioframeAllocationPeriod_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RadioframeAllocationPeriod = {
+	"RadioframeAllocationPeriod",
+	"RadioframeAllocationPeriod",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_RadioframeAllocationPeriod_tags_1,
+	sizeof(asn_DEF_X2N_RadioframeAllocationPeriod_tags_1)
+		/sizeof(asn_DEF_X2N_RadioframeAllocationPeriod_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RadioframeAllocationPeriod_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RadioframeAllocationPeriod_tags_1)
+		/sizeof(asn_DEF_X2N_RadioframeAllocationPeriod_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_RadioframeAllocationPeriod_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_RadioframeAllocationPeriod_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RadioframeAllocationPeriod.h b/asn1c_defs/X2N_RadioframeAllocationPeriod.h
new file mode 100644
index 0000000..df0ac86
--- /dev/null
+++ b/asn1c_defs/X2N_RadioframeAllocationPeriod.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RadioframeAllocationPeriod_H_
+#define	_X2N_RadioframeAllocationPeriod_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RadioframeAllocationPeriod {
+	X2N_RadioframeAllocationPeriod_n1	= 0,
+	X2N_RadioframeAllocationPeriod_n2	= 1,
+	X2N_RadioframeAllocationPeriod_n4	= 2,
+	X2N_RadioframeAllocationPeriod_n8	= 3,
+	X2N_RadioframeAllocationPeriod_n16	= 4,
+	X2N_RadioframeAllocationPeriod_n32	= 5
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RadioframeAllocationPeriod;
+
+/* X2N_RadioframeAllocationPeriod */
+typedef long	 X2N_RadioframeAllocationPeriod_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_RadioframeAllocationPeriod_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RadioframeAllocationPeriod;
+extern const asn_INTEGER_specifics_t asn_SPC_RadioframeAllocationPeriod_specs_1;
+asn_struct_free_f RadioframeAllocationPeriod_free;
+asn_struct_print_f RadioframeAllocationPeriod_print;
+asn_constr_check_f RadioframeAllocationPeriod_constraint;
+ber_type_decoder_f RadioframeAllocationPeriod_decode_ber;
+der_type_encoder_f RadioframeAllocationPeriod_encode_der;
+xer_type_decoder_f RadioframeAllocationPeriod_decode_xer;
+xer_type_encoder_f RadioframeAllocationPeriod_encode_xer;
+per_type_decoder_f RadioframeAllocationPeriod_decode_uper;
+per_type_encoder_f RadioframeAllocationPeriod_encode_uper;
+per_type_decoder_f RadioframeAllocationPeriod_decode_aper;
+per_type_encoder_f RadioframeAllocationPeriod_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RadioframeAllocationPeriod_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.c b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.c
new file mode 100644
index 0000000..f503b78
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReceiveStatusOfULPDCPSDUsExtended.h"
+
+int
+X2N_ReceiveStatusOfULPDCPSDUsExtended_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 16384)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ReceiveStatusOfULPDCPSDUsExtended_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended = {
+	"ReceiveStatusOfULPDCPSDUsExtended",
+	"ReceiveStatusOfULPDCPSDUsExtended",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1,
+	sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReceiveStatusOfULPDCPSDUsExtended_constr_1, X2N_ReceiveStatusOfULPDCPSDUsExtended_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.h b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.h
new file mode 100644
index 0000000..8f86fcf
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsExtended.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReceiveStatusOfULPDCPSDUsExtended_H_
+#define	_X2N_ReceiveStatusOfULPDCPSDUsExtended_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ReceiveStatusOfULPDCPSDUsExtended */
+typedef BIT_STRING_t	 X2N_ReceiveStatusOfULPDCPSDUsExtended_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsExtended;
+asn_struct_free_f X2N_ReceiveStatusOfULPDCPSDUsExtended_free;
+asn_struct_print_f X2N_ReceiveStatusOfULPDCPSDUsExtended_print;
+asn_constr_check_f X2N_ReceiveStatusOfULPDCPSDUsExtended_constraint;
+ber_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_decode_ber;
+der_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_encode_der;
+xer_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_decode_xer;
+xer_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_encode_xer;
+per_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_decode_uper;
+per_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_encode_uper;
+per_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_decode_aper;
+per_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsExtended_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReceiveStatusOfULPDCPSDUsExtended_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c
new file mode 100644
index 0000000..fcfc64f
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h"
+
+int
+X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 131072)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 17, -1,  1,  131072 }	/* (SIZE(1..131072)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 = {
+	"ReceiveStatusOfULPDCPSDUsPDCP-SNlength18",
+	"ReceiveStatusOfULPDCPSDUsPDCP-SNlength18",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1,
+	sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constr_1, X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h
new file mode 100644
index 0000000..58394c3
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_
+#define	_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 */
+typedef BIT_STRING_t	 X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18;
+asn_struct_free_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_free;
+asn_struct_print_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_print;
+asn_constr_check_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_constraint;
+ber_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_ber;
+der_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_der;
+xer_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_xer;
+xer_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_xer;
+per_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_uper;
+per_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_uper;
+per_type_decoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_decode_aper;
+per_type_encoder_f X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.c b/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.c
new file mode 100644
index 0000000..1c8e18f
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReceiveStatusofULPDCPSDUs.h"
+
+int
+X2N_ReceiveStatusofULPDCPSDUs_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 4096)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ReceiveStatusofULPDCPSDUs_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  4096,  4096 }	/* (SIZE(4096..4096)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusofULPDCPSDUs = {
+	"ReceiveStatusofULPDCPSDUs",
+	"ReceiveStatusofULPDCPSDUs",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1,
+	sizeof(asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1)
+		/sizeof(asn_DEF_X2N_ReceiveStatusofULPDCPSDUs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReceiveStatusofULPDCPSDUs_constr_1, X2N_ReceiveStatusofULPDCPSDUs_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.h b/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.h
new file mode 100644
index 0000000..e63f845
--- /dev/null
+++ b/asn1c_defs/X2N_ReceiveStatusofULPDCPSDUs.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReceiveStatusofULPDCPSDUs_H_
+#define	_X2N_ReceiveStatusofULPDCPSDUs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ReceiveStatusofULPDCPSDUs */
+typedef BIT_STRING_t	 X2N_ReceiveStatusofULPDCPSDUs_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ReceiveStatusofULPDCPSDUs_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReceiveStatusofULPDCPSDUs;
+asn_struct_free_f X2N_ReceiveStatusofULPDCPSDUs_free;
+asn_struct_print_f X2N_ReceiveStatusofULPDCPSDUs_print;
+asn_constr_check_f X2N_ReceiveStatusofULPDCPSDUs_constraint;
+ber_type_decoder_f X2N_ReceiveStatusofULPDCPSDUs_decode_ber;
+der_type_encoder_f X2N_ReceiveStatusofULPDCPSDUs_encode_der;
+xer_type_decoder_f X2N_ReceiveStatusofULPDCPSDUs_decode_xer;
+xer_type_encoder_f X2N_ReceiveStatusofULPDCPSDUs_encode_xer;
+per_type_decoder_f X2N_ReceiveStatusofULPDCPSDUs_decode_uper;
+per_type_encoder_f X2N_ReceiveStatusofULPDCPSDUs_encode_uper;
+per_type_decoder_f X2N_ReceiveStatusofULPDCPSDUs_decode_aper;
+per_type_encoder_f X2N_ReceiveStatusofULPDCPSDUs_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReceiveStatusofULPDCPSDUs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Reestablishment-Indication.c b/asn1c_defs/X2N_Reestablishment-Indication.c
new file mode 100644
index 0000000..192b2e0
--- /dev/null
+++ b/asn1c_defs/X2N_Reestablishment-Indication.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Reestablishment-Indication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Reestablishment_Indication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Reestablishment_Indication_value2enum_1[] = {
+	{ 0,	13,	"reestablished" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Reestablishment_Indication_enum2value_1[] = {
+	0	/* reestablished(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Reestablishment_Indication_specs_1 = {
+	asn_MAP_X2N_Reestablishment_Indication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Reestablishment_Indication_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Reestablishment_Indication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Reestablishment_Indication = {
+	"Reestablishment-Indication",
+	"Reestablishment-Indication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Reestablishment_Indication_tags_1,
+	sizeof(asn_DEF_X2N_Reestablishment_Indication_tags_1)
+		/sizeof(asn_DEF_X2N_Reestablishment_Indication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Reestablishment_Indication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Reestablishment_Indication_tags_1)
+		/sizeof(asn_DEF_X2N_Reestablishment_Indication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Reestablishment_Indication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Reestablishment_Indication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Reestablishment-Indication.h b/asn1c_defs/X2N_Reestablishment-Indication.h
new file mode 100644
index 0000000..c70a561
--- /dev/null
+++ b/asn1c_defs/X2N_Reestablishment-Indication.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Reestablishment_Indication_H_
+#define	_X2N_Reestablishment_Indication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Reestablishment_Indication {
+	X2N_Reestablishment_Indication_reestablished	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Reestablishment_Indication;
+
+/* X2N_Reestablishment-Indication */
+typedef long	 X2N_Reestablishment_Indication_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Reestablishment_Indication_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Reestablishment_Indication;
+extern const asn_INTEGER_specifics_t asn_SPC_Reestablishment_Indication_specs_1;
+asn_struct_free_f Reestablishment_Indication_free;
+asn_struct_print_f Reestablishment_Indication_print;
+asn_constr_check_f Reestablishment_Indication_constraint;
+ber_type_decoder_f Reestablishment_Indication_decode_ber;
+der_type_encoder_f Reestablishment_Indication_encode_der;
+xer_type_decoder_f Reestablishment_Indication_decode_xer;
+xer_type_encoder_f Reestablishment_Indication_encode_xer;
+per_type_decoder_f Reestablishment_Indication_decode_uper;
+per_type_encoder_f Reestablishment_Indication_encode_uper;
+per_type_decoder_f Reestablishment_Indication_decode_aper;
+per_type_encoder_f Reestablishment_Indication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Reestablishment_Indication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Registration-Request.c b/asn1c_defs/X2N_Registration-Request.c
new file mode 100644
index 0000000..1e35e71
--- /dev/null
+++ b/asn1c_defs/X2N_Registration-Request.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Registration-Request.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Registration_Request_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Registration_Request_value2enum_1[] = {
+	{ 0,	5,	"start" },
+	{ 1,	4,	"stop" },
+	{ 2,	12,	"partial-stop" },
+	{ 3,	3,	"add" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Registration_Request_enum2value_1[] = {
+	3,	/* add(3) */
+	2,	/* partial-stop(2) */
+	0,	/* start(0) */
+	1	/* stop(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_Registration_Request_specs_1 = {
+	asn_MAP_X2N_Registration_Request_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Registration_Request_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Registration_Request_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Registration_Request = {
+	"Registration-Request",
+	"Registration-Request",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Registration_Request_tags_1,
+	sizeof(asn_DEF_X2N_Registration_Request_tags_1)
+		/sizeof(asn_DEF_X2N_Registration_Request_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Registration_Request_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Registration_Request_tags_1)
+		/sizeof(asn_DEF_X2N_Registration_Request_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Registration_Request_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Registration_Request_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Registration-Request.h b/asn1c_defs/X2N_Registration-Request.h
new file mode 100644
index 0000000..ca5c63b
--- /dev/null
+++ b/asn1c_defs/X2N_Registration-Request.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Registration_Request_H_
+#define	_X2N_Registration_Request_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Registration_Request {
+	X2N_Registration_Request_start	= 0,
+	X2N_Registration_Request_stop	= 1,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_Registration_Request_partial_stop	= 2,
+	X2N_Registration_Request_add	= 3
+} e_X2N_Registration_Request;
+
+/* X2N_Registration-Request */
+typedef long	 X2N_Registration_Request_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Registration_Request;
+asn_struct_free_f X2N_Registration_Request_free;
+asn_struct_print_f X2N_Registration_Request_print;
+asn_constr_check_f X2N_Registration_Request_constraint;
+ber_type_decoder_f X2N_Registration_Request_decode_ber;
+der_type_encoder_f X2N_Registration_Request_encode_der;
+xer_type_decoder_f X2N_Registration_Request_decode_xer;
+xer_type_encoder_f X2N_Registration_Request_encode_xer;
+per_type_decoder_f X2N_Registration_Request_decode_uper;
+per_type_encoder_f X2N_Registration_Request_encode_uper;
+per_type_decoder_f X2N_Registration_Request_decode_aper;
+per_type_encoder_f X2N_Registration_Request_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Registration_Request_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RelativeNarrowbandTxPower.c b/asn1c_defs/X2N_RelativeNarrowbandTxPower.c
new file mode 100644
index 0000000..52c45a5
--- /dev/null
+++ b/asn1c_defs/X2N_RelativeNarrowbandTxPower.c
@@ -0,0 +1,249 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RelativeNarrowbandTxPower.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_rNTP_PerPRB_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 110)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_p_B_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_pDCCH_InterferenceImpact_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_rNTP_PerPRB_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  6,  110 }	/* (SIZE(6..110,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_p_B_constr_9 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_pDCCH_InterferenceImpact_constr_10 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_4[] = {
+	{ 0,	3,	"one" },
+	{ 1,	3,	"two" },
+	{ 2,	4,	"four" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_4[] = {
+	2,	/* four(2) */
+	0,	/* one(0) */
+	1	/* two(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_4 = {
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_value2enum_4,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_numberOfCellSpecificAntennaPorts_enum2value_4,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_4 = {
+	"numberOfCellSpecificAntennaPorts",
+	"numberOfCellSpecificAntennaPorts",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4,
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4)
+		/sizeof(asn_DEF_X2N_numberOfCellSpecificAntennaPorts_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_numberOfCellSpecificAntennaPorts_constr_4, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_numberOfCellSpecificAntennaPorts_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_RelativeNarrowbandTxPower_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower, rNTP_PerPRB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_rNTP_PerPRB_constr_2,  memb_X2N_rNTP_PerPRB_constraint_1 },
+		0, 0, /* No default value */
+		"rNTP-PerPRB"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower, rNTP_Threshold),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RNTP_Threshold,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rNTP-Threshold"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower, numberOfCellSpecificAntennaPorts),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_numberOfCellSpecificAntennaPorts_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"numberOfCellSpecificAntennaPorts"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower, p_B),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_p_B_constr_9,  memb_X2N_p_B_constraint_1 },
+		0, 0, /* No default value */
+		"p-B"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RelativeNarrowbandTxPower, pDCCH_InterferenceImpact),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_pDCCH_InterferenceImpact_constr_10,  memb_X2N_pDCCH_InterferenceImpact_constraint_1 },
+		0, 0, /* No default value */
+		"pDCCH-InterferenceImpact"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_RelativeNarrowbandTxPower, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P184,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_RelativeNarrowbandTxPower_oms_1[] = { 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RelativeNarrowbandTxPower_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rNTP-PerPRB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rNTP-Threshold */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* numberOfCellSpecificAntennaPorts */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* p-B */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pDCCH-InterferenceImpact */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RelativeNarrowbandTxPower_specs_1 = {
+	sizeof(struct X2N_RelativeNarrowbandTxPower),
+	offsetof(struct X2N_RelativeNarrowbandTxPower, _asn_ctx),
+	asn_MAP_X2N_RelativeNarrowbandTxPower_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_RelativeNarrowbandTxPower_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RelativeNarrowbandTxPower = {
+	"RelativeNarrowbandTxPower",
+	"RelativeNarrowbandTxPower",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1,
+	sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1)
+		/sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1)
+		/sizeof(asn_DEF_X2N_RelativeNarrowbandTxPower_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RelativeNarrowbandTxPower_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_RelativeNarrowbandTxPower_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RelativeNarrowbandTxPower.h b/asn1c_defs/X2N_RelativeNarrowbandTxPower.h
new file mode 100644
index 0000000..cfab720
--- /dev/null
+++ b/asn1c_defs/X2N_RelativeNarrowbandTxPower.h
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RelativeNarrowbandTxPower_H_
+#define	_X2N_RelativeNarrowbandTxPower_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include "X2N_RNTP-Threshold.h"
+#include <NativeEnumerated.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts {
+	X2N_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_one	= 0,
+	X2N_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_two	= 1,
+	X2N_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts_four	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_RelativeNarrowbandTxPower__numberOfCellSpecificAntennaPorts;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_RelativeNarrowbandTxPower */
+typedef struct X2N_RelativeNarrowbandTxPower {
+	BIT_STRING_t	 rNTP_PerPRB;
+	X2N_RNTP_Threshold_t	 rNTP_Threshold;
+	long	 numberOfCellSpecificAntennaPorts;
+	long	 p_B;
+	long	 pDCCH_InterferenceImpact;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RelativeNarrowbandTxPower_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_numberOfCellSpecificAntennaPorts_4;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RelativeNarrowbandTxPower;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RelativeNarrowbandTxPower_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RelativeNarrowbandTxPower_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RelativeNarrowbandTxPower_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReplacingCellsList-Item.c b/asn1c_defs/X2N_ReplacingCellsList-Item.c
new file mode 100644
index 0000000..7f20cbd
--- /dev/null
+++ b/asn1c_defs/X2N_ReplacingCellsList-Item.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReplacingCellsList-Item.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ReplacingCellsList_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReplacingCellsList_Item, eCGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eCGI"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReplacingCellsList_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ReplacingCellsList_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eCGI */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ReplacingCellsList_Item_specs_1 = {
+	sizeof(struct X2N_ReplacingCellsList_Item),
+	offsetof(struct X2N_ReplacingCellsList_Item, _asn_ctx),
+	asn_MAP_X2N_ReplacingCellsList_Item_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReplacingCellsList_Item = {
+	"ReplacingCellsList-Item",
+	"ReplacingCellsList-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ReplacingCellsList_Item_tags_1,
+	sizeof(asn_DEF_X2N_ReplacingCellsList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ReplacingCellsList_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReplacingCellsList_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReplacingCellsList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ReplacingCellsList_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ReplacingCellsList_Item_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ReplacingCellsList_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReplacingCellsList-Item.h b/asn1c_defs/X2N_ReplacingCellsList-Item.h
new file mode 100644
index 0000000..eef230a
--- /dev/null
+++ b/asn1c_defs/X2N_ReplacingCellsList-Item.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReplacingCellsList_Item_H_
+#define	_X2N_ReplacingCellsList_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ReplacingCellsList-Item */
+typedef struct X2N_ReplacingCellsList_Item {
+	X2N_ECGI_t	 eCGI;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ReplacingCellsList_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReplacingCellsList_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ReplacingCellsList_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ReplacingCellsList_Item_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReplacingCellsList_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReplacingCellsList.c b/asn1c_defs/X2N_ReplacingCellsList.c
new file mode 100644
index 0000000..2b41921
--- /dev/null
+++ b/asn1c_defs/X2N_ReplacingCellsList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReplacingCellsList.h"
+
+#include "X2N_ReplacingCellsList-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_ReplacingCellsList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 9,  9,  0,  256 }	/* (SIZE(0..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ReplacingCellsList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ReplacingCellsList_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReplacingCellsList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_ReplacingCellsList_specs_1 = {
+	sizeof(struct X2N_ReplacingCellsList),
+	offsetof(struct X2N_ReplacingCellsList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReplacingCellsList = {
+	"ReplacingCellsList",
+	"ReplacingCellsList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ReplacingCellsList_tags_1,
+	sizeof(asn_DEF_X2N_ReplacingCellsList_tags_1)
+		/sizeof(asn_DEF_X2N_ReplacingCellsList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReplacingCellsList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReplacingCellsList_tags_1)
+		/sizeof(asn_DEF_X2N_ReplacingCellsList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReplacingCellsList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ReplacingCellsList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ReplacingCellsList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReplacingCellsList.h b/asn1c_defs/X2N_ReplacingCellsList.h
new file mode 100644
index 0000000..46c69ef
--- /dev/null
+++ b/asn1c_defs/X2N_ReplacingCellsList.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReplacingCellsList_H_
+#define	_X2N_ReplacingCellsList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ReplacingCellsList_Item;
+
+/* X2N_ReplacingCellsList */
+typedef struct X2N_ReplacingCellsList {
+	A_SEQUENCE_OF(struct X2N_ReplacingCellsList_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ReplacingCellsList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReplacingCellsList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_ReplacingCellsList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ReplacingCellsList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_ReplacingCellsList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReplacingCellsList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportAmountMDT.c b/asn1c_defs/X2N_ReportAmountMDT.c
new file mode 100644
index 0000000..baa8400
--- /dev/null
+++ b/asn1c_defs/X2N_ReportAmountMDT.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportAmountMDT.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ReportAmountMDT_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 3,  3,  0,  7 }	/* (0..7) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportAmountMDT_value2enum_1[] = {
+	{ 0,	2,	"r1" },
+	{ 1,	2,	"r2" },
+	{ 2,	2,	"r4" },
+	{ 3,	2,	"r8" },
+	{ 4,	3,	"r16" },
+	{ 5,	3,	"r32" },
+	{ 6,	3,	"r64" },
+	{ 7,	9,	"rinfinity" }
+};
+static const unsigned int asn_MAP_X2N_ReportAmountMDT_enum2value_1[] = {
+	0,	/* r1(0) */
+	4,	/* r16(4) */
+	1,	/* r2(1) */
+	5,	/* r32(5) */
+	2,	/* r4(2) */
+	6,	/* r64(6) */
+	3,	/* r8(3) */
+	7	/* rinfinity(7) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ReportAmountMDT_specs_1 = {
+	asn_MAP_X2N_ReportAmountMDT_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportAmountMDT_enum2value_1,	/* N => "tag"; sorted by N */
+	8,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportAmountMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportAmountMDT = {
+	"ReportAmountMDT",
+	"ReportAmountMDT",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportAmountMDT_tags_1,
+	sizeof(asn_DEF_X2N_ReportAmountMDT_tags_1)
+		/sizeof(asn_DEF_X2N_ReportAmountMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportAmountMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportAmountMDT_tags_1)
+		/sizeof(asn_DEF_X2N_ReportAmountMDT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportAmountMDT_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportAmountMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportAmountMDT.h b/asn1c_defs/X2N_ReportAmountMDT.h
new file mode 100644
index 0000000..82fd7f4
--- /dev/null
+++ b/asn1c_defs/X2N_ReportAmountMDT.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportAmountMDT_H_
+#define	_X2N_ReportAmountMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportAmountMDT {
+	X2N_ReportAmountMDT_r1	= 0,
+	X2N_ReportAmountMDT_r2	= 1,
+	X2N_ReportAmountMDT_r4	= 2,
+	X2N_ReportAmountMDT_r8	= 3,
+	X2N_ReportAmountMDT_r16	= 4,
+	X2N_ReportAmountMDT_r32	= 5,
+	X2N_ReportAmountMDT_r64	= 6,
+	X2N_ReportAmountMDT_rinfinity	= 7
+} e_X2N_ReportAmountMDT;
+
+/* X2N_ReportAmountMDT */
+typedef long	 X2N_ReportAmountMDT_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ReportAmountMDT_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportAmountMDT;
+extern const asn_INTEGER_specifics_t asn_SPC_ReportAmountMDT_specs_1;
+asn_struct_free_f ReportAmountMDT_free;
+asn_struct_print_f ReportAmountMDT_print;
+asn_constr_check_f ReportAmountMDT_constraint;
+ber_type_decoder_f ReportAmountMDT_decode_ber;
+der_type_encoder_f ReportAmountMDT_encode_der;
+xer_type_decoder_f ReportAmountMDT_decode_xer;
+xer_type_encoder_f ReportAmountMDT_encode_xer;
+per_type_decoder_f ReportAmountMDT_decode_uper;
+per_type_encoder_f ReportAmountMDT_encode_uper;
+per_type_decoder_f ReportAmountMDT_decode_aper;
+per_type_encoder_f ReportAmountMDT_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportAmountMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportArea.c b/asn1c_defs/X2N_ReportArea.c
new file mode 100644
index 0000000..7572f38
--- /dev/null
+++ b/asn1c_defs/X2N_ReportArea.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportArea.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ReportArea_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportArea_value2enum_1[] = {
+	{ 0,	4,	"ecgi" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ReportArea_enum2value_1[] = {
+	0	/* ecgi(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ReportArea_specs_1 = {
+	asn_MAP_X2N_ReportArea_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportArea_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportArea_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportArea = {
+	"ReportArea",
+	"ReportArea",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportArea_tags_1,
+	sizeof(asn_DEF_X2N_ReportArea_tags_1)
+		/sizeof(asn_DEF_X2N_ReportArea_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportArea_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportArea_tags_1)
+		/sizeof(asn_DEF_X2N_ReportArea_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportArea_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportArea_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportArea.h b/asn1c_defs/X2N_ReportArea.h
new file mode 100644
index 0000000..779e198
--- /dev/null
+++ b/asn1c_defs/X2N_ReportArea.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportArea_H_
+#define	_X2N_ReportArea_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportArea {
+	X2N_ReportArea_ecgi	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ReportArea;
+
+/* X2N_ReportArea */
+typedef long	 X2N_ReportArea_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ReportArea_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportArea;
+extern const asn_INTEGER_specifics_t asn_SPC_ReportArea_specs_1;
+asn_struct_free_f ReportArea_free;
+asn_struct_print_f ReportArea_print;
+asn_constr_check_f ReportArea_constraint;
+ber_type_decoder_f ReportArea_decode_ber;
+der_type_encoder_f ReportArea_encode_der;
+xer_type_decoder_f ReportArea_decode_xer;
+xer_type_encoder_f ReportArea_encode_xer;
+per_type_decoder_f ReportArea_decode_uper;
+per_type_encoder_f ReportArea_encode_uper;
+per_type_decoder_f ReportArea_decode_aper;
+per_type_encoder_f ReportArea_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportArea_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportCharacteristics.c b/asn1c_defs/X2N_ReportCharacteristics.c
new file mode 100644
index 0000000..9a34a09
--- /dev/null
+++ b/asn1c_defs/X2N_ReportCharacteristics.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportCharacteristics.h"
+
+int
+X2N_ReportCharacteristics_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ReportCharacteristics_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  32,  32 }	/* (SIZE(32..32)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportCharacteristics_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportCharacteristics = {
+	"ReportCharacteristics",
+	"ReportCharacteristics",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ReportCharacteristics_tags_1,
+	sizeof(asn_DEF_X2N_ReportCharacteristics_tags_1)
+		/sizeof(asn_DEF_X2N_ReportCharacteristics_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportCharacteristics_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportCharacteristics_tags_1)
+		/sizeof(asn_DEF_X2N_ReportCharacteristics_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportCharacteristics_constr_1, X2N_ReportCharacteristics_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportCharacteristics.h b/asn1c_defs/X2N_ReportCharacteristics.h
new file mode 100644
index 0000000..e676e36
--- /dev/null
+++ b/asn1c_defs/X2N_ReportCharacteristics.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportCharacteristics_H_
+#define	_X2N_ReportCharacteristics_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ReportCharacteristics */
+typedef BIT_STRING_t	 X2N_ReportCharacteristics_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ReportCharacteristics_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportCharacteristics;
+asn_struct_free_f X2N_ReportCharacteristics_free;
+asn_struct_print_f X2N_ReportCharacteristics_print;
+asn_constr_check_f X2N_ReportCharacteristics_constraint;
+ber_type_decoder_f X2N_ReportCharacteristics_decode_ber;
+der_type_encoder_f X2N_ReportCharacteristics_encode_der;
+xer_type_decoder_f X2N_ReportCharacteristics_decode_xer;
+xer_type_encoder_f X2N_ReportCharacteristics_encode_xer;
+per_type_decoder_f X2N_ReportCharacteristics_decode_uper;
+per_type_encoder_f X2N_ReportCharacteristics_encode_uper;
+per_type_decoder_f X2N_ReportCharacteristics_decode_aper;
+per_type_encoder_f X2N_ReportCharacteristics_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportCharacteristics_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportIntervalMDT.c b/asn1c_defs/X2N_ReportIntervalMDT.c
new file mode 100644
index 0000000..50f30df
--- /dev/null
+++ b/asn1c_defs/X2N_ReportIntervalMDT.c
@@ -0,0 +1,75 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportIntervalMDT.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ReportIntervalMDT_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 4,  4,  0,  12 }	/* (0..12) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportIntervalMDT_value2enum_1[] = {
+	{ 0,	5,	"ms120" },
+	{ 1,	5,	"ms240" },
+	{ 2,	5,	"ms480" },
+	{ 3,	5,	"ms640" },
+	{ 4,	6,	"ms1024" },
+	{ 5,	6,	"ms2048" },
+	{ 6,	6,	"ms5120" },
+	{ 7,	7,	"ms10240" },
+	{ 8,	4,	"min1" },
+	{ 9,	4,	"min6" },
+	{ 10,	5,	"min12" },
+	{ 11,	5,	"min30" },
+	{ 12,	5,	"min60" }
+};
+static const unsigned int asn_MAP_X2N_ReportIntervalMDT_enum2value_1[] = {
+	8,	/* min1(8) */
+	10,	/* min12(10) */
+	11,	/* min30(11) */
+	9,	/* min6(9) */
+	12,	/* min60(12) */
+	4,	/* ms1024(4) */
+	7,	/* ms10240(7) */
+	0,	/* ms120(0) */
+	5,	/* ms2048(5) */
+	1,	/* ms240(1) */
+	2,	/* ms480(2) */
+	6,	/* ms5120(6) */
+	3	/* ms640(3) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ReportIntervalMDT_specs_1 = {
+	asn_MAP_X2N_ReportIntervalMDT_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportIntervalMDT_enum2value_1,	/* N => "tag"; sorted by N */
+	13,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportIntervalMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportIntervalMDT = {
+	"ReportIntervalMDT",
+	"ReportIntervalMDT",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportIntervalMDT_tags_1,
+	sizeof(asn_DEF_X2N_ReportIntervalMDT_tags_1)
+		/sizeof(asn_DEF_X2N_ReportIntervalMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportIntervalMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportIntervalMDT_tags_1)
+		/sizeof(asn_DEF_X2N_ReportIntervalMDT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportIntervalMDT_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportIntervalMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportIntervalMDT.h b/asn1c_defs/X2N_ReportIntervalMDT.h
new file mode 100644
index 0000000..171a9d6
--- /dev/null
+++ b/asn1c_defs/X2N_ReportIntervalMDT.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportIntervalMDT_H_
+#define	_X2N_ReportIntervalMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportIntervalMDT {
+	X2N_ReportIntervalMDT_ms120	= 0,
+	X2N_ReportIntervalMDT_ms240	= 1,
+	X2N_ReportIntervalMDT_ms480	= 2,
+	X2N_ReportIntervalMDT_ms640	= 3,
+	X2N_ReportIntervalMDT_ms1024	= 4,
+	X2N_ReportIntervalMDT_ms2048	= 5,
+	X2N_ReportIntervalMDT_ms5120	= 6,
+	X2N_ReportIntervalMDT_ms10240	= 7,
+	X2N_ReportIntervalMDT_min1	= 8,
+	X2N_ReportIntervalMDT_min6	= 9,
+	X2N_ReportIntervalMDT_min12	= 10,
+	X2N_ReportIntervalMDT_min30	= 11,
+	X2N_ReportIntervalMDT_min60	= 12
+} e_X2N_ReportIntervalMDT;
+
+/* X2N_ReportIntervalMDT */
+typedef long	 X2N_ReportIntervalMDT_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ReportIntervalMDT_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportIntervalMDT;
+extern const asn_INTEGER_specifics_t asn_SPC_ReportIntervalMDT_specs_1;
+asn_struct_free_f ReportIntervalMDT_free;
+asn_struct_print_f ReportIntervalMDT_print;
+asn_constr_check_f ReportIntervalMDT_constraint;
+ber_type_decoder_f ReportIntervalMDT_decode_ber;
+der_type_encoder_f ReportIntervalMDT_encode_der;
+xer_type_decoder_f ReportIntervalMDT_decode_xer;
+xer_type_encoder_f ReportIntervalMDT_encode_xer;
+per_type_decoder_f ReportIntervalMDT_decode_uper;
+per_type_encoder_f ReportIntervalMDT_encode_uper;
+per_type_decoder_f ReportIntervalMDT_decode_aper;
+per_type_encoder_f ReportIntervalMDT_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportIntervalMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportingPeriodicity.c b/asn1c_defs/X2N_ReportingPeriodicity.c
new file mode 100644
index 0000000..fa83c27
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicity.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportingPeriodicity.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ReportingPeriodicity_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportingPeriodicity_value2enum_1[] = {
+	{ 0,	15,	"one-thousand-ms" },
+	{ 1,	15,	"two-thousand-ms" },
+	{ 2,	16,	"five-thousand-ms" },
+	{ 3,	15,	"ten-thousand-ms" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ReportingPeriodicity_enum2value_1[] = {
+	2,	/* five-thousand-ms(2) */
+	0,	/* one-thousand-ms(0) */
+	3,	/* ten-thousand-ms(3) */
+	1	/* two-thousand-ms(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_ReportingPeriodicity_specs_1 = {
+	asn_MAP_X2N_ReportingPeriodicity_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportingPeriodicity_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportingPeriodicity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicity = {
+	"ReportingPeriodicity",
+	"ReportingPeriodicity",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportingPeriodicity_tags_1,
+	sizeof(asn_DEF_X2N_ReportingPeriodicity_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicity_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportingPeriodicity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportingPeriodicity_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicity_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportingPeriodicity_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportingPeriodicity_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportingPeriodicity.h b/asn1c_defs/X2N_ReportingPeriodicity.h
new file mode 100644
index 0000000..2094ee8
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicity.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportingPeriodicity_H_
+#define	_X2N_ReportingPeriodicity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportingPeriodicity {
+	X2N_ReportingPeriodicity_one_thousand_ms	= 0,
+	X2N_ReportingPeriodicity_two_thousand_ms	= 1,
+	X2N_ReportingPeriodicity_five_thousand_ms	= 2,
+	X2N_ReportingPeriodicity_ten_thousand_ms	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ReportingPeriodicity;
+
+/* X2N_ReportingPeriodicity */
+typedef long	 X2N_ReportingPeriodicity_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicity;
+asn_struct_free_f X2N_ReportingPeriodicity_free;
+asn_struct_print_f X2N_ReportingPeriodicity_print;
+asn_constr_check_f X2N_ReportingPeriodicity_constraint;
+ber_type_decoder_f X2N_ReportingPeriodicity_decode_ber;
+der_type_encoder_f X2N_ReportingPeriodicity_encode_der;
+xer_type_decoder_f X2N_ReportingPeriodicity_decode_xer;
+xer_type_encoder_f X2N_ReportingPeriodicity_encode_xer;
+per_type_decoder_f X2N_ReportingPeriodicity_decode_uper;
+per_type_encoder_f X2N_ReportingPeriodicity_encode_uper;
+per_type_decoder_f X2N_ReportingPeriodicity_decode_aper;
+per_type_encoder_f X2N_ReportingPeriodicity_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportingPeriodicity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportingPeriodicityCSIR.c b/asn1c_defs/X2N_ReportingPeriodicityCSIR.c
new file mode 100644
index 0000000..6562e99
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicityCSIR.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportingPeriodicityCSIR.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ReportingPeriodicityCSIR_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportingPeriodicityCSIR_value2enum_1[] = {
+	{ 0,	3,	"ms5" },
+	{ 1,	4,	"ms10" },
+	{ 2,	4,	"ms20" },
+	{ 3,	4,	"ms40" },
+	{ 4,	4,	"ms80" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ReportingPeriodicityCSIR_enum2value_1[] = {
+	1,	/* ms10(1) */
+	2,	/* ms20(2) */
+	3,	/* ms40(3) */
+	0,	/* ms5(0) */
+	4	/* ms80(4) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_ReportingPeriodicityCSIR_specs_1 = {
+	asn_MAP_X2N_ReportingPeriodicityCSIR_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportingPeriodicityCSIR_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicityCSIR = {
+	"ReportingPeriodicityCSIR",
+	"ReportingPeriodicityCSIR",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1,
+	sizeof(asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicityCSIR_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportingPeriodicityCSIR_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportingPeriodicityCSIR_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportingPeriodicityCSIR.h b/asn1c_defs/X2N_ReportingPeriodicityCSIR.h
new file mode 100644
index 0000000..1e84dca
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicityCSIR.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportingPeriodicityCSIR_H_
+#define	_X2N_ReportingPeriodicityCSIR_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportingPeriodicityCSIR {
+	X2N_ReportingPeriodicityCSIR_ms5	= 0,
+	X2N_ReportingPeriodicityCSIR_ms10	= 1,
+	X2N_ReportingPeriodicityCSIR_ms20	= 2,
+	X2N_ReportingPeriodicityCSIR_ms40	= 3,
+	X2N_ReportingPeriodicityCSIR_ms80	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ReportingPeriodicityCSIR;
+
+/* X2N_ReportingPeriodicityCSIR */
+typedef long	 X2N_ReportingPeriodicityCSIR_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicityCSIR;
+asn_struct_free_f X2N_ReportingPeriodicityCSIR_free;
+asn_struct_print_f X2N_ReportingPeriodicityCSIR_print;
+asn_constr_check_f X2N_ReportingPeriodicityCSIR_constraint;
+ber_type_decoder_f X2N_ReportingPeriodicityCSIR_decode_ber;
+der_type_encoder_f X2N_ReportingPeriodicityCSIR_encode_der;
+xer_type_decoder_f X2N_ReportingPeriodicityCSIR_decode_xer;
+xer_type_encoder_f X2N_ReportingPeriodicityCSIR_encode_xer;
+per_type_decoder_f X2N_ReportingPeriodicityCSIR_decode_uper;
+per_type_encoder_f X2N_ReportingPeriodicityCSIR_encode_uper;
+per_type_decoder_f X2N_ReportingPeriodicityCSIR_decode_aper;
+per_type_encoder_f X2N_ReportingPeriodicityCSIR_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportingPeriodicityCSIR_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.c b/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.c
new file mode 100644
index 0000000..6378f0d
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReportingPeriodicityRSRPMR.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ReportingPeriodicityRSRPMR_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ReportingPeriodicityRSRPMR_value2enum_1[] = {
+	{ 0,	17,	"one-hundred-20-ms" },
+	{ 1,	17,	"two-hundred-40-ms" },
+	{ 2,	18,	"four-hundred-80-ms" },
+	{ 3,	17,	"six-hundred-40-ms" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ReportingPeriodicityRSRPMR_enum2value_1[] = {
+	2,	/* four-hundred-80-ms(2) */
+	0,	/* one-hundred-20-ms(0) */
+	3,	/* six-hundred-40-ms(3) */
+	1	/* two-hundred-40-ms(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_ReportingPeriodicityRSRPMR_specs_1 = {
+	asn_MAP_X2N_ReportingPeriodicityRSRPMR_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ReportingPeriodicityRSRPMR_enum2value_1,	/* N => "tag"; sorted by N */
+	4,	/* Number of elements in the maps */
+	5,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicityRSRPMR = {
+	"ReportingPeriodicityRSRPMR",
+	"ReportingPeriodicityRSRPMR",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1,
+	sizeof(asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1)
+		/sizeof(asn_DEF_X2N_ReportingPeriodicityRSRPMR_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ReportingPeriodicityRSRPMR_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ReportingPeriodicityRSRPMR_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.h b/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.h
new file mode 100644
index 0000000..ce79780
--- /dev/null
+++ b/asn1c_defs/X2N_ReportingPeriodicityRSRPMR.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReportingPeriodicityRSRPMR_H_
+#define	_X2N_ReportingPeriodicityRSRPMR_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ReportingPeriodicityRSRPMR {
+	X2N_ReportingPeriodicityRSRPMR_one_hundred_20_ms	= 0,
+	X2N_ReportingPeriodicityRSRPMR_two_hundred_40_ms	= 1,
+	X2N_ReportingPeriodicityRSRPMR_four_hundred_80_ms	= 2,
+	X2N_ReportingPeriodicityRSRPMR_six_hundred_40_ms	= 3
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ReportingPeriodicityRSRPMR;
+
+/* X2N_ReportingPeriodicityRSRPMR */
+typedef long	 X2N_ReportingPeriodicityRSRPMR_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReportingPeriodicityRSRPMR;
+asn_struct_free_f X2N_ReportingPeriodicityRSRPMR_free;
+asn_struct_print_f X2N_ReportingPeriodicityRSRPMR_print;
+asn_constr_check_f X2N_ReportingPeriodicityRSRPMR_constraint;
+ber_type_decoder_f X2N_ReportingPeriodicityRSRPMR_decode_ber;
+der_type_encoder_f X2N_ReportingPeriodicityRSRPMR_encode_der;
+xer_type_decoder_f X2N_ReportingPeriodicityRSRPMR_decode_xer;
+xer_type_encoder_f X2N_ReportingPeriodicityRSRPMR_encode_xer;
+per_type_decoder_f X2N_ReportingPeriodicityRSRPMR_decode_uper;
+per_type_encoder_f X2N_ReportingPeriodicityRSRPMR_encode_uper;
+per_type_decoder_f X2N_ReportingPeriodicityRSRPMR_decode_aper;
+per_type_encoder_f X2N_ReportingPeriodicityRSRPMR_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReportingPeriodicityRSRPMR_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ReservedSubframePattern.c b/asn1c_defs/X2N_ReservedSubframePattern.c
new file mode 100644
index 0000000..2fbf8f1
--- /dev/null
+++ b/asn1c_defs/X2N_ReservedSubframePattern.c
@@ -0,0 +1,149 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ReservedSubframePattern.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_reservedSubframePattern_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 10 && size <= 160)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_mBSFNControlRegionLength_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_reservedSubframePattern_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  10,  160 }	/* (SIZE(10..160)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_mBSFNControlRegionLength_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  3 }	/* (0..3) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ReservedSubframePattern_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern, subframeType),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubframeType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subframeType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern, reservedSubframePattern),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_reservedSubframePattern_constr_3,  memb_X2N_reservedSubframePattern_constraint_1 },
+		0, 0, /* No default value */
+		"reservedSubframePattern"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ReservedSubframePattern, mBSFNControlRegionLength),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_mBSFNControlRegionLength_constr_4,  memb_X2N_mBSFNControlRegionLength_constraint_1 },
+		0, 0, /* No default value */
+		"mBSFNControlRegionLength"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ReservedSubframePattern, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P185,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ReservedSubframePattern_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ReservedSubframePattern_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ReservedSubframePattern_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeType */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reservedSubframePattern */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mBSFNControlRegionLength */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ReservedSubframePattern_specs_1 = {
+	sizeof(struct X2N_ReservedSubframePattern),
+	offsetof(struct X2N_ReservedSubframePattern, _asn_ctx),
+	asn_MAP_X2N_ReservedSubframePattern_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ReservedSubframePattern_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ReservedSubframePattern = {
+	"ReservedSubframePattern",
+	"ReservedSubframePattern",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ReservedSubframePattern_tags_1,
+	sizeof(asn_DEF_X2N_ReservedSubframePattern_tags_1)
+		/sizeof(asn_DEF_X2N_ReservedSubframePattern_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ReservedSubframePattern_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ReservedSubframePattern_tags_1)
+		/sizeof(asn_DEF_X2N_ReservedSubframePattern_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ReservedSubframePattern_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ReservedSubframePattern_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ReservedSubframePattern.h b/asn1c_defs/X2N_ReservedSubframePattern.h
new file mode 100644
index 0000000..8b03f50
--- /dev/null
+++ b/asn1c_defs/X2N_ReservedSubframePattern.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ReservedSubframePattern_H_
+#define	_X2N_ReservedSubframePattern_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SubframeType.h"
+#include <BIT_STRING.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ReservedSubframePattern */
+typedef struct X2N_ReservedSubframePattern {
+	X2N_SubframeType_t	 subframeType;
+	BIT_STRING_t	 reservedSubframePattern;
+	long	 mBSFNControlRegionLength;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ReservedSubframePattern_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ReservedSubframePattern;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ReservedSubframePattern_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ReservedSubframePattern_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ReservedSubframePattern_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResetRequest.c b/asn1c_defs/X2N_ResetRequest.c
new file mode 100644
index 0000000..f91330d
--- /dev/null
+++ b/asn1c_defs/X2N_ResetRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResetRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResetRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResetRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResetRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetRequest_specs_1 = {
+	sizeof(struct X2N_ResetRequest),
+	offsetof(struct X2N_ResetRequest, _asn_ctx),
+	asn_MAP_X2N_ResetRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResetRequest = {
+	"ResetRequest",
+	"ResetRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResetRequest_tags_1,
+	sizeof(asn_DEF_X2N_ResetRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ResetRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResetRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResetRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ResetRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResetRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResetRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResetRequest.h b/asn1c_defs/X2N_ResetRequest.h
new file mode 100644
index 0000000..b5c0104
--- /dev/null
+++ b/asn1c_defs/X2N_ResetRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResetRequest_H_
+#define	_X2N_ResetRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResetRequest */
+typedef struct X2N_ResetRequest {
+	X2N_ProtocolIE_Container_8180P8_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResetRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResetRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResetRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResetRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResetResponse.c b/asn1c_defs/X2N_ResetResponse.c
new file mode 100644
index 0000000..28f3c9b
--- /dev/null
+++ b/asn1c_defs/X2N_ResetResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResetResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResetResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResetResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P9,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResetResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResetResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetResponse_specs_1 = {
+	sizeof(struct X2N_ResetResponse),
+	offsetof(struct X2N_ResetResponse, _asn_ctx),
+	asn_MAP_X2N_ResetResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResetResponse = {
+	"ResetResponse",
+	"ResetResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResetResponse_tags_1,
+	sizeof(asn_DEF_X2N_ResetResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ResetResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResetResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResetResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ResetResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResetResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResetResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResetResponse.h b/asn1c_defs/X2N_ResetResponse.h
new file mode 100644
index 0000000..b660599
--- /dev/null
+++ b/asn1c_defs/X2N_ResetResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResetResponse_H_
+#define	_X2N_ResetResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResetResponse */
+typedef struct X2N_ResetResponse {
+	X2N_ProtocolIE_Container_8180P9_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResetResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResetResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResetResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResetResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResetResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResourceStatusFailure.c b/asn1c_defs/X2N_ResourceStatusFailure.c
new file mode 100644
index 0000000..2659785
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResourceStatusFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P19,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusFailure_specs_1 = {
+	sizeof(struct X2N_ResourceStatusFailure),
+	offsetof(struct X2N_ResourceStatusFailure, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusFailure = {
+	"ResourceStatusFailure",
+	"ResourceStatusFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusFailure_tags_1,
+	sizeof(asn_DEF_X2N_ResourceStatusFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusFailure_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResourceStatusFailure.h b/asn1c_defs/X2N_ResourceStatusFailure.h
new file mode 100644
index 0000000..9600b84
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResourceStatusFailure_H_
+#define	_X2N_ResourceStatusFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResourceStatusFailure */
+typedef struct X2N_ResourceStatusFailure {
+	X2N_ProtocolIE_Container_8180P19_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResourceStatusFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResourceStatusRequest.c b/asn1c_defs/X2N_ResourceStatusRequest.c
new file mode 100644
index 0000000..70df6e0
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResourceStatusRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P17,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusRequest_specs_1 = {
+	sizeof(struct X2N_ResourceStatusRequest),
+	offsetof(struct X2N_ResourceStatusRequest, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusRequest = {
+	"ResourceStatusRequest",
+	"ResourceStatusRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusRequest_tags_1,
+	sizeof(asn_DEF_X2N_ResourceStatusRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusRequest_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResourceStatusRequest.h b/asn1c_defs/X2N_ResourceStatusRequest.h
new file mode 100644
index 0000000..22ea6c6
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResourceStatusRequest_H_
+#define	_X2N_ResourceStatusRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResourceStatusRequest */
+typedef struct X2N_ResourceStatusRequest {
+	X2N_ProtocolIE_Container_8180P17_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResourceStatusRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResourceStatusResponse.c b/asn1c_defs/X2N_ResourceStatusResponse.c
new file mode 100644
index 0000000..d585032
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResourceStatusResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P18,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusResponse_specs_1 = {
+	sizeof(struct X2N_ResourceStatusResponse),
+	offsetof(struct X2N_ResourceStatusResponse, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusResponse = {
+	"ResourceStatusResponse",
+	"ResourceStatusResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusResponse_tags_1,
+	sizeof(asn_DEF_X2N_ResourceStatusResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusResponse_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResourceStatusResponse.h b/asn1c_defs/X2N_ResourceStatusResponse.h
new file mode 100644
index 0000000..d904bb6
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResourceStatusResponse_H_
+#define	_X2N_ResourceStatusResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResourceStatusResponse */
+typedef struct X2N_ResourceStatusResponse {
+	X2N_ProtocolIE_Container_8180P18_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResourceStatusResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResourceStatusUpdate.c b/asn1c_defs/X2N_ResourceStatusUpdate.c
new file mode 100644
index 0000000..6803031
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusUpdate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResourceStatusUpdate.h"
+
+asn_TYPE_member_t asn_MBR_X2N_ResourceStatusUpdate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResourceStatusUpdate, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P20,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceStatusUpdate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResourceStatusUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusUpdate_specs_1 = {
+	sizeof(struct X2N_ResourceStatusUpdate),
+	offsetof(struct X2N_ResourceStatusUpdate, _asn_ctx),
+	asn_MAP_X2N_ResourceStatusUpdate_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusUpdate = {
+	"ResourceStatusUpdate",
+	"ResourceStatusUpdate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResourceStatusUpdate_tags_1,
+	sizeof(asn_DEF_X2N_ResourceStatusUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusUpdate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResourceStatusUpdate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceStatusUpdate_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceStatusUpdate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResourceStatusUpdate_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_ResourceStatusUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResourceStatusUpdate.h b/asn1c_defs/X2N_ResourceStatusUpdate.h
new file mode 100644
index 0000000..83251f2
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceStatusUpdate.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResourceStatusUpdate_H_
+#define	_X2N_ResourceStatusUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ResourceStatusUpdate */
+typedef struct X2N_ResourceStatusUpdate {
+	X2N_ProtocolIE_Container_8180P20_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResourceStatusUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceStatusUpdate;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResourceStatusUpdate_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResourceStatusUpdate_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResourceStatusUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResourceType.c b/asn1c_defs/X2N_ResourceType.c
new file mode 100644
index 0000000..b1439f0
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceType.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResourceType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ResourceType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ResourceType_value2enum_1[] = {
+	{ 0,	14,	"downlinknonCRS" },
+	{ 1,	3,	"cRS" },
+	{ 2,	6,	"uplink" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ResourceType_enum2value_1[] = {
+	1,	/* cRS(1) */
+	0,	/* downlinknonCRS(0) */
+	2	/* uplink(2) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_ResourceType_specs_1 = {
+	asn_MAP_X2N_ResourceType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ResourceType_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ResourceType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResourceType = {
+	"ResourceType",
+	"ResourceType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ResourceType_tags_1,
+	sizeof(asn_DEF_X2N_ResourceType_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResourceType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResourceType_tags_1)
+		/sizeof(asn_DEF_X2N_ResourceType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ResourceType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ResourceType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResourceType.h b/asn1c_defs/X2N_ResourceType.h
new file mode 100644
index 0000000..b7344cc
--- /dev/null
+++ b/asn1c_defs/X2N_ResourceType.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResourceType_H_
+#define	_X2N_ResourceType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ResourceType {
+	X2N_ResourceType_downlinknonCRS	= 0,
+	X2N_ResourceType_cRS	= 1,
+	X2N_ResourceType_uplink	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ResourceType;
+
+/* X2N_ResourceType */
+typedef long	 X2N_ResourceType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ResourceType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResourceType;
+extern const asn_INTEGER_specifics_t asn_SPC_ResourceType_specs_1;
+asn_struct_free_f ResourceType_free;
+asn_struct_print_f ResourceType_print;
+asn_constr_check_f ResourceType_constraint;
+ber_type_decoder_f ResourceType_decode_ber;
+der_type_encoder_f ResourceType_encode_der;
+xer_type_decoder_f ResourceType_decode_xer;
+xer_type_encoder_f ResourceType_encode_xer;
+per_type_decoder_f ResourceType_decode_uper;
+per_type_encoder_f ResourceType_encode_uper;
+per_type_decoder_f ResourceType_decode_aper;
+per_type_encoder_f ResourceType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResourceType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.c b/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.c
new file mode 100644
index 0000000..1e914e3
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RespondingNodeType-EndcConfigUpdate.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_RespondingNodeType_EndcConfigUpdate_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_RespondingNodeType_EndcConfigUpdate_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcConfigUpdate, choice.respond_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P81,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcConfigUpdate, choice.respond_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P82,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RespondingNodeType_EndcConfigUpdate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_RespondingNodeType_EndcConfigUpdate_specs_1 = {
+	sizeof(struct X2N_RespondingNodeType_EndcConfigUpdate),
+	offsetof(struct X2N_RespondingNodeType_EndcConfigUpdate, _asn_ctx),
+	offsetof(struct X2N_RespondingNodeType_EndcConfigUpdate, present),
+	sizeof(((struct X2N_RespondingNodeType_EndcConfigUpdate *)0)->present),
+	asn_MAP_X2N_RespondingNodeType_EndcConfigUpdate_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcConfigUpdate = {
+	"RespondingNodeType-EndcConfigUpdate",
+	"RespondingNodeType-EndcConfigUpdate",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_RespondingNodeType_EndcConfigUpdate_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_RespondingNodeType_EndcConfigUpdate_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_RespondingNodeType_EndcConfigUpdate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.h b/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.h
new file mode 100644
index 0000000..96649c2
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcConfigUpdate.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RespondingNodeType_EndcConfigUpdate_H_
+#define	_X2N_RespondingNodeType_EndcConfigUpdate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RespondingNodeType_EndcConfigUpdate_PR {
+	X2N_RespondingNodeType_EndcConfigUpdate_PR_NOTHING,	/* No components present */
+	X2N_RespondingNodeType_EndcConfigUpdate_PR_respond_eNB,
+	X2N_RespondingNodeType_EndcConfigUpdate_PR_respond_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_RespondingNodeType_EndcConfigUpdate_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_RespondingNodeType-EndcConfigUpdate */
+typedef struct X2N_RespondingNodeType_EndcConfigUpdate {
+	X2N_RespondingNodeType_EndcConfigUpdate_PR present;
+	union X2N_RespondingNodeType_EndcConfigUpdate_u {
+		struct X2N_ProtocolIE_Container	*respond_eNB;
+		struct X2N_ProtocolIE_Container	*respond_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RespondingNodeType_EndcConfigUpdate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcConfigUpdate;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RespondingNodeType_EndcConfigUpdate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.c b/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.c
new file mode 100644
index 0000000..8ba02cd
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RespondingNodeType-EndcX2Removal.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_RespondingNodeType_EndcX2Removal_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_RespondingNodeType_EndcX2Removal_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcX2Removal, choice.respond_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P101,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcX2Removal, choice.respond_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P102,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RespondingNodeType_EndcX2Removal_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_RespondingNodeType_EndcX2Removal_specs_1 = {
+	sizeof(struct X2N_RespondingNodeType_EndcX2Removal),
+	offsetof(struct X2N_RespondingNodeType_EndcX2Removal, _asn_ctx),
+	offsetof(struct X2N_RespondingNodeType_EndcX2Removal, present),
+	sizeof(((struct X2N_RespondingNodeType_EndcX2Removal *)0)->present),
+	asn_MAP_X2N_RespondingNodeType_EndcX2Removal_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcX2Removal = {
+	"RespondingNodeType-EndcX2Removal",
+	"RespondingNodeType-EndcX2Removal",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_RespondingNodeType_EndcX2Removal_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_RespondingNodeType_EndcX2Removal_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_RespondingNodeType_EndcX2Removal_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.h b/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.h
new file mode 100644
index 0000000..2679be6
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcX2Removal.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RespondingNodeType_EndcX2Removal_H_
+#define	_X2N_RespondingNodeType_EndcX2Removal_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RespondingNodeType_EndcX2Removal_PR {
+	X2N_RespondingNodeType_EndcX2Removal_PR_NOTHING,	/* No components present */
+	X2N_RespondingNodeType_EndcX2Removal_PR_respond_eNB,
+	X2N_RespondingNodeType_EndcX2Removal_PR_respond_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_RespondingNodeType_EndcX2Removal_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_RespondingNodeType-EndcX2Removal */
+typedef struct X2N_RespondingNodeType_EndcX2Removal {
+	X2N_RespondingNodeType_EndcX2Removal_PR present;
+	union X2N_RespondingNodeType_EndcX2Removal_u {
+		struct X2N_ProtocolIE_Container	*respond_eNB;
+		struct X2N_ProtocolIE_Container	*respond_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RespondingNodeType_EndcX2Removal_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcX2Removal;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RespondingNodeType_EndcX2Removal_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.c b/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.c
new file mode 100644
index 0000000..c652055
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RespondingNodeType-EndcX2Setup.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_RespondingNodeType_EndcX2Setup_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_RespondingNodeType_EndcX2Setup_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcX2Setup, choice.respond_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P74,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EndcX2Setup, choice.respond_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P75,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RespondingNodeType_EndcX2Setup_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_RespondingNodeType_EndcX2Setup_specs_1 = {
+	sizeof(struct X2N_RespondingNodeType_EndcX2Setup),
+	offsetof(struct X2N_RespondingNodeType_EndcX2Setup, _asn_ctx),
+	offsetof(struct X2N_RespondingNodeType_EndcX2Setup, present),
+	sizeof(((struct X2N_RespondingNodeType_EndcX2Setup *)0)->present),
+	asn_MAP_X2N_RespondingNodeType_EndcX2Setup_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcX2Setup = {
+	"RespondingNodeType-EndcX2Setup",
+	"RespondingNodeType-EndcX2Setup",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_RespondingNodeType_EndcX2Setup_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_RespondingNodeType_EndcX2Setup_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_RespondingNodeType_EndcX2Setup_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.h b/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.h
new file mode 100644
index 0000000..159b906
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EndcX2Setup.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RespondingNodeType_EndcX2Setup_H_
+#define	_X2N_RespondingNodeType_EndcX2Setup_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RespondingNodeType_EndcX2Setup_PR {
+	X2N_RespondingNodeType_EndcX2Setup_PR_NOTHING,	/* No components present */
+	X2N_RespondingNodeType_EndcX2Setup_PR_respond_eNB,
+	X2N_RespondingNodeType_EndcX2Setup_PR_respond_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_RespondingNodeType_EndcX2Setup_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_RespondingNodeType-EndcX2Setup */
+typedef struct X2N_RespondingNodeType_EndcX2Setup {
+	X2N_RespondingNodeType_EndcX2Setup_PR present;
+	union X2N_RespondingNodeType_EndcX2Setup_u {
+		struct X2N_ProtocolIE_Container	*respond_eNB;
+		struct X2N_ProtocolIE_Container	*respond_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RespondingNodeType_EndcX2Setup_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EndcX2Setup;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RespondingNodeType_EndcX2Setup_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.c b/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.c
new file mode 100644
index 0000000..71f3063
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RespondingNodeType-EutranrCellResourceCoordination.h"
+
+#include "X2N_ProtocolIE-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_RespondingNodeType_EutranrCellResourceCoordination_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_RespondingNodeType_EutranrCellResourceCoordination_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EutranrCellResourceCoordination, choice.respond_eNB),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P95,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-eNB"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_RespondingNodeType_EutranrCellResourceCoordination, choice.respond_en_gNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P96,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"respond-en-gNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RespondingNodeType_EutranrCellResourceCoordination_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* respond-eNB */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* respond-en-gNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_RespondingNodeType_EutranrCellResourceCoordination_specs_1 = {
+	sizeof(struct X2N_RespondingNodeType_EutranrCellResourceCoordination),
+	offsetof(struct X2N_RespondingNodeType_EutranrCellResourceCoordination, _asn_ctx),
+	offsetof(struct X2N_RespondingNodeType_EutranrCellResourceCoordination, present),
+	sizeof(((struct X2N_RespondingNodeType_EutranrCellResourceCoordination *)0)->present),
+	asn_MAP_X2N_RespondingNodeType_EutranrCellResourceCoordination_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EutranrCellResourceCoordination = {
+	"RespondingNodeType-EutranrCellResourceCoordination",
+	"RespondingNodeType-EutranrCellResourceCoordination",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_RespondingNodeType_EutranrCellResourceCoordination_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_RespondingNodeType_EutranrCellResourceCoordination_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_RespondingNodeType_EutranrCellResourceCoordination_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.h b/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.h
new file mode 100644
index 0000000..c20e919
--- /dev/null
+++ b/asn1c_defs/X2N_RespondingNodeType-EutranrCellResourceCoordination.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RespondingNodeType_EutranrCellResourceCoordination_H_
+#define	_X2N_RespondingNodeType_EutranrCellResourceCoordination_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_RespondingNodeType_EutranrCellResourceCoordination_PR {
+	X2N_RespondingNodeType_EutranrCellResourceCoordination_PR_NOTHING,	/* No components present */
+	X2N_RespondingNodeType_EutranrCellResourceCoordination_PR_respond_eNB,
+	X2N_RespondingNodeType_EutranrCellResourceCoordination_PR_respond_en_gNB
+	/* Extensions may appear below */
+	
+} X2N_RespondingNodeType_EutranrCellResourceCoordination_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Container;
+
+/* X2N_RespondingNodeType-EutranrCellResourceCoordination */
+typedef struct X2N_RespondingNodeType_EutranrCellResourceCoordination {
+	X2N_RespondingNodeType_EutranrCellResourceCoordination_PR present;
+	union X2N_RespondingNodeType_EutranrCellResourceCoordination_u {
+		struct X2N_ProtocolIE_Container	*respond_eNB;
+		struct X2N_ProtocolIE_Container	*respond_en_gNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RespondingNodeType_EutranrCellResourceCoordination_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RespondingNodeType_EutranrCellResourceCoordination;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RespondingNodeType_EutranrCellResourceCoordination_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.c b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.c
new file mode 100644
index 0000000..6bf5aa0
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem, meNBtoSeNBContainer),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNBtoSeNBContainer"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P22,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem = {
+	"ResponseInformationSeNBReconfComp-RejectByMeNBItem",
+	"ResponseInformationSeNBReconfComp-RejectByMeNBItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1,
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.h b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.h
new file mode 100644
index 0000000..4f9544b
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_
+#define	_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Cause.h"
+#include "X2N_MeNBtoSeNBContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem */
+typedef struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem {
+	X2N_Cause_t	 cause;
+	X2N_MeNBtoSeNBContainer_t	*meNBtoSeNBContainer;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.c b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.c
new file mode 100644
index 0000000..67982c0
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSeNBReconfComp-SuccessItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItem_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItem, meNBtoSeNBContainer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeNBtoSeNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNBtoSeNBContainer"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P21,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItem_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNBtoSeNBContainer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItem_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItem),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp_SuccessItem, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_SuccessItem_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem = {
+	"ResponseInformationSeNBReconfComp-SuccessItem",
+	"ResponseInformationSeNBReconfComp-SuccessItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1,
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.h b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.h
new file mode 100644
index 0000000..5d7f3e7
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp-SuccessItem.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSeNBReconfComp_SuccessItem_H_
+#define	_X2N_ResponseInformationSeNBReconfComp_SuccessItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_MeNBtoSeNBContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ResponseInformationSeNBReconfComp-SuccessItem */
+typedef struct X2N_ResponseInformationSeNBReconfComp_SuccessItem {
+	X2N_MeNBtoSeNBContainer_t	*meNBtoSeNBContainer;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSeNBReconfComp_SuccessItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_SuccessItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_SuccessItem_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSeNBReconfComp_SuccessItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.c b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.c
new file mode 100644
index 0000000..30d7ef1
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSeNBReconfComp.h"
+
+#include "X2N_ResponseInformationSeNBReconfComp-SuccessItem.h"
+#include "X2N_ResponseInformationSeNBReconfComp-RejectByMeNBItem.h"
+static asn_per_constraints_t asn_PER_type_X2N_ResponseInformationSeNBReconfComp_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSeNBReconfComp_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp, choice.success),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ResponseInformationSeNBReconfComp_SuccessItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"success"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_ResponseInformationSeNBReconfComp, choice.reject_by_MeNB),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reject-by-MeNB"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSeNBReconfComp_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* success */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_ResponseInformationSeNBReconfComp_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSeNBReconfComp),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSeNBReconfComp, present),
+	sizeof(((struct X2N_ResponseInformationSeNBReconfComp *)0)->present),
+	asn_MAP_X2N_ResponseInformationSeNBReconfComp_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp = {
+	"ResponseInformationSeNBReconfComp",
+	"ResponseInformationSeNBReconfComp",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ResponseInformationSeNBReconfComp_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ResponseInformationSeNBReconfComp_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSeNBReconfComp_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.h b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.h
new file mode 100644
index 0000000..00f64a8
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSeNBReconfComp.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSeNBReconfComp_H_
+#define	_X2N_ResponseInformationSeNBReconfComp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ResponseInformationSeNBReconfComp_PR {
+	X2N_ResponseInformationSeNBReconfComp_PR_NOTHING,	/* No components present */
+	X2N_ResponseInformationSeNBReconfComp_PR_success,
+	X2N_ResponseInformationSeNBReconfComp_PR_reject_by_MeNB
+	/* Extensions may appear below */
+	
+} X2N_ResponseInformationSeNBReconfComp_PR;
+
+/* Forward declarations */
+struct X2N_ResponseInformationSeNBReconfComp_SuccessItem;
+struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem;
+
+/* X2N_ResponseInformationSeNBReconfComp */
+typedef struct X2N_ResponseInformationSeNBReconfComp {
+	X2N_ResponseInformationSeNBReconfComp_PR present;
+	union X2N_ResponseInformationSeNBReconfComp_u {
+		struct X2N_ResponseInformationSeNBReconfComp_SuccessItem	*success;
+		struct X2N_ResponseInformationSeNBReconfComp_RejectByMeNBItem	*reject_by_MeNB;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSeNBReconfComp_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSeNBReconfComp;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSeNBReconfComp_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.c b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.c
new file mode 100644
index 0000000..de20034
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_Cause,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P51,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem = {
+	"ResponseInformationSgNBReconfComp-RejectByMeNBItem",
+	"ResponseInformationSgNBReconfComp-RejectByMeNBItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1,
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.h b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.h
new file mode 100644
index 0000000..6163e5d
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_
+#define	_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Cause.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem */
+typedef struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem {
+	X2N_Cause_t	 cause;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.c b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.c
new file mode 100644
index 0000000..00e3736
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSgNBReconfComp-SuccessItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItem_1[] = {
+	{ ATF_POINTER, 2, offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItem, meNBtoSgNBContainer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MeNBtoSgNBContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNBtoSgNBContainer"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P50,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItem_oms_1[] = { 0, 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNBtoSgNBContainer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItem_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItem),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp_SuccessItem, _asn_ctx),
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_SuccessItem_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem = {
+	"ResponseInformationSgNBReconfComp-SuccessItem",
+	"ResponseInformationSgNBReconfComp-SuccessItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1,
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1)
+		/sizeof(asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.h b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.h
new file mode 100644
index 0000000..c336c0d
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp-SuccessItem.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSgNBReconfComp_SuccessItem_H_
+#define	_X2N_ResponseInformationSgNBReconfComp_SuccessItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_MeNBtoSgNBContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ResponseInformationSgNBReconfComp-SuccessItem */
+typedef struct X2N_ResponseInformationSgNBReconfComp_SuccessItem {
+	X2N_MeNBtoSgNBContainer_t	*meNBtoSgNBContainer;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSgNBReconfComp_SuccessItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_SuccessItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_SuccessItem_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSgNBReconfComp_SuccessItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.c b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.c
new file mode 100644
index 0000000..0c079b0
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResponseInformationSgNBReconfComp.h"
+
+#include "X2N_ResponseInformationSgNBReconfComp-SuccessItem.h"
+#include "X2N_ResponseInformationSgNBReconfComp-RejectByMeNBItem.h"
+static asn_per_constraints_t asn_PER_type_X2N_ResponseInformationSgNBReconfComp_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ResponseInformationSgNBReconfComp_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp, choice.success_SgNBReconfComp),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ResponseInformationSgNBReconfComp_SuccessItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"success-SgNBReconfComp"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_ResponseInformationSgNBReconfComp, choice.reject_by_MeNB_SgNBReconfComp),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"reject-by-MeNB-SgNBReconfComp"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResponseInformationSgNBReconfComp_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* success-SgNBReconfComp */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reject-by-MeNB-SgNBReconfComp */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_ResponseInformationSgNBReconfComp_specs_1 = {
+	sizeof(struct X2N_ResponseInformationSgNBReconfComp),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp, _asn_ctx),
+	offsetof(struct X2N_ResponseInformationSgNBReconfComp, present),
+	sizeof(((struct X2N_ResponseInformationSgNBReconfComp *)0)->present),
+	asn_MAP_X2N_ResponseInformationSgNBReconfComp_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp = {
+	"ResponseInformationSgNBReconfComp",
+	"ResponseInformationSgNBReconfComp",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ResponseInformationSgNBReconfComp_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ResponseInformationSgNBReconfComp_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResponseInformationSgNBReconfComp_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.h b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.h
new file mode 100644
index 0000000..852ea9f
--- /dev/null
+++ b/asn1c_defs/X2N_ResponseInformationSgNBReconfComp.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResponseInformationSgNBReconfComp_H_
+#define	_X2N_ResponseInformationSgNBReconfComp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ResponseInformationSgNBReconfComp_PR {
+	X2N_ResponseInformationSgNBReconfComp_PR_NOTHING,	/* No components present */
+	X2N_ResponseInformationSgNBReconfComp_PR_success_SgNBReconfComp,
+	X2N_ResponseInformationSgNBReconfComp_PR_reject_by_MeNB_SgNBReconfComp
+	/* Extensions may appear below */
+	
+} X2N_ResponseInformationSgNBReconfComp_PR;
+
+/* Forward declarations */
+struct X2N_ResponseInformationSgNBReconfComp_SuccessItem;
+struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem;
+
+/* X2N_ResponseInformationSgNBReconfComp */
+typedef struct X2N_ResponseInformationSgNBReconfComp {
+	X2N_ResponseInformationSgNBReconfComp_PR present;
+	union X2N_ResponseInformationSgNBReconfComp_u {
+		struct X2N_ResponseInformationSgNBReconfComp_SuccessItem	*success_SgNBReconfComp;
+		struct X2N_ResponseInformationSgNBReconfComp_RejectByMeNBItem	*reject_by_MeNB_SgNBReconfComp;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResponseInformationSgNBReconfComp_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResponseInformationSgNBReconfComp;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResponseInformationSgNBReconfComp_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ResumeID.c b/asn1c_defs/X2N_ResumeID.c
new file mode 100644
index 0000000..73cb694
--- /dev/null
+++ b/asn1c_defs/X2N_ResumeID.c
@@ -0,0 +1,134 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ResumeID.h"
+
+static int
+memb_X2N_non_truncated_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 40)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_truncated_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 24)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_non_truncated_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  40,  40 }	/* (SIZE(40..40)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_truncated_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  24,  24 }	/* (SIZE(24..24)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_ResumeID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ResumeID_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResumeID, choice.non_truncated),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_non_truncated_constr_2,  memb_X2N_non_truncated_constraint_1 },
+		0, 0, /* No default value */
+		"non-truncated"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ResumeID, choice.truncated),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_truncated_constr_3,  memb_X2N_truncated_constraint_1 },
+		0, 0, /* No default value */
+		"truncated"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ResumeID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* non-truncated */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* truncated */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_ResumeID_specs_1 = {
+	sizeof(struct X2N_ResumeID),
+	offsetof(struct X2N_ResumeID, _asn_ctx),
+	offsetof(struct X2N_ResumeID, present),
+	sizeof(((struct X2N_ResumeID *)0)->present),
+	asn_MAP_X2N_ResumeID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ResumeID = {
+	"ResumeID",
+	"ResumeID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ResumeID_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ResumeID_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ResumeID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ResumeID.h b/asn1c_defs/X2N_ResumeID.h
new file mode 100644
index 0000000..366181f
--- /dev/null
+++ b/asn1c_defs/X2N_ResumeID.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ResumeID_H_
+#define	_X2N_ResumeID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ResumeID_PR {
+	X2N_ResumeID_PR_NOTHING,	/* No components present */
+	X2N_ResumeID_PR_non_truncated,
+	X2N_ResumeID_PR_truncated
+	/* Extensions may appear below */
+	
+} X2N_ResumeID_PR;
+
+/* X2N_ResumeID */
+typedef struct X2N_ResumeID {
+	X2N_ResumeID_PR present;
+	union X2N_ResumeID_u {
+		BIT_STRING_t	 non_truncated;
+		BIT_STRING_t	 truncated;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ResumeID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ResumeID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ResumeID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RetrieveUEContextFailure.c b/asn1c_defs/X2N_RetrieveUEContextFailure.c
new file mode 100644
index 0000000..d38dc76
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RetrieveUEContextFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P49,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextFailure_specs_1 = {
+	sizeof(struct X2N_RetrieveUEContextFailure),
+	offsetof(struct X2N_RetrieveUEContextFailure, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextFailure = {
+	"RetrieveUEContextFailure",
+	"RetrieveUEContextFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextFailure_tags_1,
+	sizeof(asn_DEF_X2N_RetrieveUEContextFailure_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextFailure_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RetrieveUEContextFailure.h b/asn1c_defs/X2N_RetrieveUEContextFailure.h
new file mode 100644
index 0000000..78ead2c
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RetrieveUEContextFailure_H_
+#define	_X2N_RetrieveUEContextFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RetrieveUEContextFailure */
+typedef struct X2N_RetrieveUEContextFailure {
+	X2N_ProtocolIE_Container_8180P49_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RetrieveUEContextFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RetrieveUEContextRequest.c b/asn1c_defs/X2N_RetrieveUEContextRequest.c
new file mode 100644
index 0000000..a5cfb80
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RetrieveUEContextRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P47,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextRequest_specs_1 = {
+	sizeof(struct X2N_RetrieveUEContextRequest),
+	offsetof(struct X2N_RetrieveUEContextRequest, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextRequest = {
+	"RetrieveUEContextRequest",
+	"RetrieveUEContextRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextRequest_tags_1,
+	sizeof(asn_DEF_X2N_RetrieveUEContextRequest_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextRequest_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RetrieveUEContextRequest.h b/asn1c_defs/X2N_RetrieveUEContextRequest.h
new file mode 100644
index 0000000..8c0b135
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RetrieveUEContextRequest_H_
+#define	_X2N_RetrieveUEContextRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RetrieveUEContextRequest */
+typedef struct X2N_RetrieveUEContextRequest {
+	X2N_ProtocolIE_Container_8180P47_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RetrieveUEContextRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_RetrieveUEContextResponse.c b/asn1c_defs/X2N_RetrieveUEContextResponse.c
new file mode 100644
index 0000000..0519afb
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_RetrieveUEContextResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_RetrieveUEContextResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P48,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_RetrieveUEContextResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_RetrieveUEContextResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextResponse_specs_1 = {
+	sizeof(struct X2N_RetrieveUEContextResponse),
+	offsetof(struct X2N_RetrieveUEContextResponse, _asn_ctx),
+	asn_MAP_X2N_RetrieveUEContextResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextResponse = {
+	"RetrieveUEContextResponse",
+	"RetrieveUEContextResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_RetrieveUEContextResponse_tags_1,
+	sizeof(asn_DEF_X2N_RetrieveUEContextResponse_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_RetrieveUEContextResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_RetrieveUEContextResponse_tags_1)
+		/sizeof(asn_DEF_X2N_RetrieveUEContextResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_RetrieveUEContextResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_RetrieveUEContextResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_RetrieveUEContextResponse.h b/asn1c_defs/X2N_RetrieveUEContextResponse.h
new file mode 100644
index 0000000..e383ebd
--- /dev/null
+++ b/asn1c_defs/X2N_RetrieveUEContextResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_RetrieveUEContextResponse_H_
+#define	_X2N_RetrieveUEContextResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_RetrieveUEContextResponse */
+typedef struct X2N_RetrieveUEContextResponse {
+	X2N_ProtocolIE_Container_8180P48_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_RetrieveUEContextResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_RetrieveUEContextResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_RetrieveUEContextResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_RetrieveUEContextResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_RetrieveUEContextResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_S1TNLLoadIndicator.c b/asn1c_defs/X2N_S1TNLLoadIndicator.c
new file mode 100644
index 0000000..0c6d379
--- /dev/null
+++ b/asn1c_defs/X2N_S1TNLLoadIndicator.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_S1TNLLoadIndicator.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_S1TNLLoadIndicator_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_S1TNLLoadIndicator, dLS1TNLLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dLS1TNLLoadIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_S1TNLLoadIndicator, uLS1TNLLoadIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LoadIndicator,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLS1TNLLoadIndicator"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_S1TNLLoadIndicator, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P189,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_S1TNLLoadIndicator_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_S1TNLLoadIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_S1TNLLoadIndicator_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dLS1TNLLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLS1TNLLoadIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_S1TNLLoadIndicator_specs_1 = {
+	sizeof(struct X2N_S1TNLLoadIndicator),
+	offsetof(struct X2N_S1TNLLoadIndicator, _asn_ctx),
+	asn_MAP_X2N_S1TNLLoadIndicator_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_S1TNLLoadIndicator_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_S1TNLLoadIndicator = {
+	"S1TNLLoadIndicator",
+	"S1TNLLoadIndicator",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_S1TNLLoadIndicator_tags_1,
+	sizeof(asn_DEF_X2N_S1TNLLoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_S1TNLLoadIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_S1TNLLoadIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_S1TNLLoadIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_S1TNLLoadIndicator_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_S1TNLLoadIndicator_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_S1TNLLoadIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_S1TNLLoadIndicator.h b/asn1c_defs/X2N_S1TNLLoadIndicator.h
new file mode 100644
index 0000000..a629856
--- /dev/null
+++ b/asn1c_defs/X2N_S1TNLLoadIndicator.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_S1TNLLoadIndicator_H_
+#define	_X2N_S1TNLLoadIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_LoadIndicator.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_S1TNLLoadIndicator */
+typedef struct X2N_S1TNLLoadIndicator {
+	X2N_LoadIndicator_t	 dLS1TNLLoadIndicator;
+	X2N_LoadIndicator_t	 uLS1TNLLoadIndicator;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_S1TNLLoadIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_S1TNLLoadIndicator;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_S1TNLLoadIndicator_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_S1TNLLoadIndicator_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_S1TNLLoadIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SCGChangeIndication.c b/asn1c_defs/X2N_SCGChangeIndication.c
new file mode 100644
index 0000000..dea62a4
--- /dev/null
+++ b/asn1c_defs/X2N_SCGChangeIndication.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SCGChangeIndication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SCGChangeIndication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SCGChangeIndication_value2enum_1[] = {
+	{ 0,	19,	"pDCPCountWrapAround" },
+	{ 1,	12,	"pSCellChange" },
+	{ 2,	5,	"other" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SCGChangeIndication_enum2value_1[] = {
+	2,	/* other(2) */
+	0,	/* pDCPCountWrapAround(0) */
+	1	/* pSCellChange(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SCGChangeIndication_specs_1 = {
+	asn_MAP_X2N_SCGChangeIndication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SCGChangeIndication_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SCGChangeIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SCGChangeIndication = {
+	"SCGChangeIndication",
+	"SCGChangeIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SCGChangeIndication_tags_1,
+	sizeof(asn_DEF_X2N_SCGChangeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_SCGChangeIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SCGChangeIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SCGChangeIndication_tags_1)
+		/sizeof(asn_DEF_X2N_SCGChangeIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SCGChangeIndication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SCGChangeIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SCGChangeIndication.h b/asn1c_defs/X2N_SCGChangeIndication.h
new file mode 100644
index 0000000..2a75cd2
--- /dev/null
+++ b/asn1c_defs/X2N_SCGChangeIndication.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SCGChangeIndication_H_
+#define	_X2N_SCGChangeIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SCGChangeIndication {
+	X2N_SCGChangeIndication_pDCPCountWrapAround	= 0,
+	X2N_SCGChangeIndication_pSCellChange	= 1,
+	X2N_SCGChangeIndication_other	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SCGChangeIndication;
+
+/* X2N_SCGChangeIndication */
+typedef long	 X2N_SCGChangeIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SCGChangeIndication;
+asn_struct_free_f X2N_SCGChangeIndication_free;
+asn_struct_print_f X2N_SCGChangeIndication_print;
+asn_constr_check_f X2N_SCGChangeIndication_constraint;
+ber_type_decoder_f X2N_SCGChangeIndication_decode_ber;
+der_type_encoder_f X2N_SCGChangeIndication_encode_der;
+xer_type_decoder_f X2N_SCGChangeIndication_decode_xer;
+xer_type_encoder_f X2N_SCGChangeIndication_encode_xer;
+per_type_decoder_f X2N_SCGChangeIndication_decode_uper;
+per_type_encoder_f X2N_SCGChangeIndication_encode_uper;
+per_type_decoder_f X2N_SCGChangeIndication_decode_aper;
+per_type_encoder_f X2N_SCGChangeIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SCGChangeIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SCGConfigurationQuery.c b/asn1c_defs/X2N_SCGConfigurationQuery.c
new file mode 100644
index 0000000..38083c6
--- /dev/null
+++ b/asn1c_defs/X2N_SCGConfigurationQuery.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SCGConfigurationQuery.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SCGConfigurationQuery_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SCGConfigurationQuery_value2enum_1[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SCGConfigurationQuery_enum2value_1[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SCGConfigurationQuery_specs_1 = {
+	asn_MAP_X2N_SCGConfigurationQuery_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SCGConfigurationQuery_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SCGConfigurationQuery_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SCGConfigurationQuery = {
+	"SCGConfigurationQuery",
+	"SCGConfigurationQuery",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SCGConfigurationQuery_tags_1,
+	sizeof(asn_DEF_X2N_SCGConfigurationQuery_tags_1)
+		/sizeof(asn_DEF_X2N_SCGConfigurationQuery_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SCGConfigurationQuery_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SCGConfigurationQuery_tags_1)
+		/sizeof(asn_DEF_X2N_SCGConfigurationQuery_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SCGConfigurationQuery_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SCGConfigurationQuery_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SCGConfigurationQuery.h b/asn1c_defs/X2N_SCGConfigurationQuery.h
new file mode 100644
index 0000000..2ec7688
--- /dev/null
+++ b/asn1c_defs/X2N_SCGConfigurationQuery.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SCGConfigurationQuery_H_
+#define	_X2N_SCGConfigurationQuery_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SCGConfigurationQuery {
+	X2N_SCGConfigurationQuery_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SCGConfigurationQuery;
+
+/* X2N_SCGConfigurationQuery */
+typedef long	 X2N_SCGConfigurationQuery_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SCGConfigurationQuery;
+asn_struct_free_f X2N_SCGConfigurationQuery_free;
+asn_struct_print_f X2N_SCGConfigurationQuery_print;
+asn_constr_check_f X2N_SCGConfigurationQuery_constraint;
+ber_type_decoder_f X2N_SCGConfigurationQuery_decode_ber;
+der_type_encoder_f X2N_SCGConfigurationQuery_encode_der;
+xer_type_decoder_f X2N_SCGConfigurationQuery_decode_xer;
+xer_type_encoder_f X2N_SCGConfigurationQuery_encode_xer;
+per_type_decoder_f X2N_SCGConfigurationQuery_decode_uper;
+per_type_encoder_f X2N_SCGConfigurationQuery_encode_uper;
+per_type_decoder_f X2N_SCGConfigurationQuery_decode_aper;
+per_type_encoder_f X2N_SCGConfigurationQuery_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SCGConfigurationQuery_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.c b/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.c
new file mode 100644
index 0000000..2b49777
--- /dev/null
+++ b/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SGNB-Addition-Trigger-Ind.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SGNB_Addition_Trigger_Ind_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SGNB_Addition_Trigger_Ind_value2enum_1[] = {
+	{ 0,	9,	"sn-change" },
+	{ 1,	12,	"inter-eNB-HO" },
+	{ 2,	12,	"intra-eNB-HO" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SGNB_Addition_Trigger_Ind_enum2value_1[] = {
+	1,	/* inter-eNB-HO(1) */
+	2,	/* intra-eNB-HO(2) */
+	0	/* sn-change(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SGNB_Addition_Trigger_Ind_specs_1 = {
+	asn_MAP_X2N_SGNB_Addition_Trigger_Ind_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SGNB_Addition_Trigger_Ind_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SGNB_Addition_Trigger_Ind = {
+	"SGNB-Addition-Trigger-Ind",
+	"SGNB-Addition-Trigger-Ind",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1,
+	sizeof(asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1)
+		/sizeof(asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1)
+		/sizeof(asn_DEF_X2N_SGNB_Addition_Trigger_Ind_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SGNB_Addition_Trigger_Ind_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SGNB_Addition_Trigger_Ind_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.h b/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.h
new file mode 100644
index 0000000..c80d2b9
--- /dev/null
+++ b/asn1c_defs/X2N_SGNB-Addition-Trigger-Ind.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SGNB_Addition_Trigger_Ind_H_
+#define	_X2N_SGNB_Addition_Trigger_Ind_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SGNB_Addition_Trigger_Ind {
+	X2N_SGNB_Addition_Trigger_Ind_sn_change	= 0,
+	X2N_SGNB_Addition_Trigger_Ind_inter_eNB_HO	= 1,
+	X2N_SGNB_Addition_Trigger_Ind_intra_eNB_HO	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SGNB_Addition_Trigger_Ind;
+
+/* X2N_SGNB-Addition-Trigger-Ind */
+typedef long	 X2N_SGNB_Addition_Trigger_Ind_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SGNB_Addition_Trigger_Ind;
+asn_struct_free_f X2N_SGNB_Addition_Trigger_Ind_free;
+asn_struct_print_f X2N_SGNB_Addition_Trigger_Ind_print;
+asn_constr_check_f X2N_SGNB_Addition_Trigger_Ind_constraint;
+ber_type_decoder_f X2N_SGNB_Addition_Trigger_Ind_decode_ber;
+der_type_encoder_f X2N_SGNB_Addition_Trigger_Ind_encode_der;
+xer_type_decoder_f X2N_SGNB_Addition_Trigger_Ind_decode_xer;
+xer_type_encoder_f X2N_SGNB_Addition_Trigger_Ind_encode_xer;
+per_type_decoder_f X2N_SGNB_Addition_Trigger_Ind_decode_uper;
+per_type_encoder_f X2N_SGNB_Addition_Trigger_Ind_encode_uper;
+per_type_decoder_f X2N_SGNB_Addition_Trigger_Ind_decode_aper;
+per_type_encoder_f X2N_SGNB_Addition_Trigger_Ind_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SGNB_Addition_Trigger_Ind_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.c b/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.c
new file mode 100644
index 0000000..02632b2
--- /dev/null
+++ b/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SIPTOBearerDeactivationIndication.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SIPTOBearerDeactivationIndication_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SIPTOBearerDeactivationIndication_value2enum_1[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SIPTOBearerDeactivationIndication_enum2value_1[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SIPTOBearerDeactivationIndication_specs_1 = {
+	asn_MAP_X2N_SIPTOBearerDeactivationIndication_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SIPTOBearerDeactivationIndication_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SIPTOBearerDeactivationIndication = {
+	"SIPTOBearerDeactivationIndication",
+	"SIPTOBearerDeactivationIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1,
+	sizeof(asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1)
+		/sizeof(asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1)
+		/sizeof(asn_DEF_X2N_SIPTOBearerDeactivationIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SIPTOBearerDeactivationIndication_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SIPTOBearerDeactivationIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.h b/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.h
new file mode 100644
index 0000000..6863f80
--- /dev/null
+++ b/asn1c_defs/X2N_SIPTOBearerDeactivationIndication.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SIPTOBearerDeactivationIndication_H_
+#define	_X2N_SIPTOBearerDeactivationIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SIPTOBearerDeactivationIndication {
+	X2N_SIPTOBearerDeactivationIndication_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SIPTOBearerDeactivationIndication;
+
+/* X2N_SIPTOBearerDeactivationIndication */
+typedef long	 X2N_SIPTOBearerDeactivationIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SIPTOBearerDeactivationIndication;
+asn_struct_free_f X2N_SIPTOBearerDeactivationIndication_free;
+asn_struct_print_f X2N_SIPTOBearerDeactivationIndication_print;
+asn_constr_check_f X2N_SIPTOBearerDeactivationIndication_constraint;
+ber_type_decoder_f X2N_SIPTOBearerDeactivationIndication_decode_ber;
+der_type_encoder_f X2N_SIPTOBearerDeactivationIndication_encode_der;
+xer_type_decoder_f X2N_SIPTOBearerDeactivationIndication_decode_xer;
+xer_type_encoder_f X2N_SIPTOBearerDeactivationIndication_encode_xer;
+per_type_decoder_f X2N_SIPTOBearerDeactivationIndication_decode_uper;
+per_type_encoder_f X2N_SIPTOBearerDeactivationIndication_encode_uper;
+per_type_decoder_f X2N_SIPTOBearerDeactivationIndication_decode_aper;
+per_type_encoder_f X2N_SIPTOBearerDeactivationIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SIPTOBearerDeactivationIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SNStatusTransfer.c b/asn1c_defs/X2N_SNStatusTransfer.c
new file mode 100644
index 0000000..438dcaf
--- /dev/null
+++ b/asn1c_defs/X2N_SNStatusTransfer.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SNStatusTransfer.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SNStatusTransfer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SNStatusTransfer, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SNStatusTransfer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SNStatusTransfer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SNStatusTransfer_specs_1 = {
+	sizeof(struct X2N_SNStatusTransfer),
+	offsetof(struct X2N_SNStatusTransfer, _asn_ctx),
+	asn_MAP_X2N_SNStatusTransfer_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SNStatusTransfer = {
+	"SNStatusTransfer",
+	"SNStatusTransfer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SNStatusTransfer_tags_1,
+	sizeof(asn_DEF_X2N_SNStatusTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_SNStatusTransfer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SNStatusTransfer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SNStatusTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_SNStatusTransfer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SNStatusTransfer_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SNStatusTransfer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SNStatusTransfer.h b/asn1c_defs/X2N_SNStatusTransfer.h
new file mode 100644
index 0000000..1ae1881
--- /dev/null
+++ b/asn1c_defs/X2N_SNStatusTransfer.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SNStatusTransfer_H_
+#define	_X2N_SNStatusTransfer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SNStatusTransfer */
+typedef struct X2N_SNStatusTransfer {
+	X2N_ProtocolIE_Container_8180P4_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SNStatusTransfer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SNStatusTransfer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SNStatusTransfer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SNStatusTransfer_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SNStatusTransfer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SRBType.c b/asn1c_defs/X2N_SRBType.c
new file mode 100644
index 0000000..d09c0ff
--- /dev/null
+++ b/asn1c_defs/X2N_SRBType.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SRBType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SRBType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SRBType_value2enum_1[] = {
+	{ 0,	4,	"srb1" },
+	{ 1,	4,	"srb2" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SRBType_enum2value_1[] = {
+	0,	/* srb1(0) */
+	1	/* srb2(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SRBType_specs_1 = {
+	asn_MAP_X2N_SRBType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SRBType_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SRBType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SRBType = {
+	"SRBType",
+	"SRBType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SRBType_tags_1,
+	sizeof(asn_DEF_X2N_SRBType_tags_1)
+		/sizeof(asn_DEF_X2N_SRBType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SRBType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SRBType_tags_1)
+		/sizeof(asn_DEF_X2N_SRBType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SRBType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SRBType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SRBType.h b/asn1c_defs/X2N_SRBType.h
new file mode 100644
index 0000000..f14d440
--- /dev/null
+++ b/asn1c_defs/X2N_SRBType.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SRBType_H_
+#define	_X2N_SRBType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SRBType {
+	X2N_SRBType_srb1	= 0,
+	X2N_SRBType_srb2	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SRBType;
+
+/* X2N_SRBType */
+typedef long	 X2N_SRBType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SRBType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SRBType;
+extern const asn_INTEGER_specifics_t asn_SPC_SRBType_specs_1;
+asn_struct_free_f SRBType_free;
+asn_struct_print_f SRBType_print;
+asn_constr_check_f SRBType_constraint;
+ber_type_decoder_f SRBType_decode_ber;
+der_type_encoder_f SRBType_encode_der;
+xer_type_decoder_f SRBType_decode_xer;
+xer_type_encoder_f SRBType_encode_xer;
+per_type_decoder_f SRBType_decode_uper;
+per_type_encoder_f SRBType_encode_uper;
+per_type_decoder_f SRBType_decode_aper;
+per_type_encoder_f SRBType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SRBType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SRVCCOperationPossible.c b/asn1c_defs/X2N_SRVCCOperationPossible.c
new file mode 100644
index 0000000..525d061
--- /dev/null
+++ b/asn1c_defs/X2N_SRVCCOperationPossible.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SRVCCOperationPossible.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SRVCCOperationPossible_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SRVCCOperationPossible_value2enum_1[] = {
+	{ 0,	8,	"possible" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SRVCCOperationPossible_enum2value_1[] = {
+	0	/* possible(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SRVCCOperationPossible_specs_1 = {
+	asn_MAP_X2N_SRVCCOperationPossible_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SRVCCOperationPossible_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SRVCCOperationPossible_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SRVCCOperationPossible = {
+	"SRVCCOperationPossible",
+	"SRVCCOperationPossible",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SRVCCOperationPossible_tags_1,
+	sizeof(asn_DEF_X2N_SRVCCOperationPossible_tags_1)
+		/sizeof(asn_DEF_X2N_SRVCCOperationPossible_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SRVCCOperationPossible_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SRVCCOperationPossible_tags_1)
+		/sizeof(asn_DEF_X2N_SRVCCOperationPossible_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SRVCCOperationPossible_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SRVCCOperationPossible_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SRVCCOperationPossible.h b/asn1c_defs/X2N_SRVCCOperationPossible.h
new file mode 100644
index 0000000..b9f9fc5
--- /dev/null
+++ b/asn1c_defs/X2N_SRVCCOperationPossible.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SRVCCOperationPossible_H_
+#define	_X2N_SRVCCOperationPossible_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SRVCCOperationPossible {
+	X2N_SRVCCOperationPossible_possible	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SRVCCOperationPossible;
+
+/* X2N_SRVCCOperationPossible */
+typedef long	 X2N_SRVCCOperationPossible_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SRVCCOperationPossible;
+asn_struct_free_f X2N_SRVCCOperationPossible_free;
+asn_struct_print_f X2N_SRVCCOperationPossible_print;
+asn_constr_check_f X2N_SRVCCOperationPossible_constraint;
+ber_type_decoder_f X2N_SRVCCOperationPossible_decode_ber;
+der_type_encoder_f X2N_SRVCCOperationPossible_encode_der;
+xer_type_decoder_f X2N_SRVCCOperationPossible_decode_xer;
+xer_type_encoder_f X2N_SRVCCOperationPossible_encode_xer;
+per_type_decoder_f X2N_SRVCCOperationPossible_decode_uper;
+per_type_encoder_f X2N_SRVCCOperationPossible_encode_uper;
+per_type_decoder_f X2N_SRVCCOperationPossible_decode_aper;
+per_type_encoder_f X2N_SRVCCOperationPossible_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SRVCCOperationPossible_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SULInformation.c b/asn1c_defs/X2N_SULInformation.c
new file mode 100644
index 0000000..e84f4ca
--- /dev/null
+++ b/asn1c_defs/X2N_SULInformation.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SULInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_sUL_ARFCN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3279165)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_sUL_ARFCN_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 22, -1,  0,  3279165 }	/* (0..3279165) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SULInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SULInformation, sUL_ARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_sUL_ARFCN_constr_2,  memb_X2N_sUL_ARFCN_constraint_1 },
+		0, 0, /* No default value */
+		"sUL-ARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SULInformation, sUL_TxBW),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NR_TxBW,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sUL-TxBW"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SULInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P199,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SULInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_SULInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SULInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sUL-ARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sUL-TxBW */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SULInformation_specs_1 = {
+	sizeof(struct X2N_SULInformation),
+	offsetof(struct X2N_SULInformation, _asn_ctx),
+	asn_MAP_X2N_SULInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_SULInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SULInformation = {
+	"SULInformation",
+	"SULInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SULInformation_tags_1,
+	sizeof(asn_DEF_X2N_SULInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SULInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SULInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SULInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SULInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SULInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SULInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SULInformation.h b/asn1c_defs/X2N_SULInformation.h
new file mode 100644
index 0000000..93d6824
--- /dev/null
+++ b/asn1c_defs/X2N_SULInformation.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SULInformation_H_
+#define	_X2N_SULInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include "X2N_NR-TxBW.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SULInformation */
+typedef struct X2N_SULInformation {
+	long	 sUL_ARFCN;
+	X2N_NR_TxBW_t	 sUL_TxBW;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SULInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SULInformation;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SULInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SULInformation_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SULInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ScheduledCommunicationTime.c b/asn1c_defs/X2N_ScheduledCommunicationTime.c
new file mode 100644
index 0000000..47fd22b
--- /dev/null
+++ b/asn1c_defs/X2N_ScheduledCommunicationTime.c
@@ -0,0 +1,179 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ScheduledCommunicationTime.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_dayofWeek_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_timeofDayStart_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 86399)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_timeofDayEnd_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 86399)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_dayofWeek_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  7,  7 }	/* (SIZE(7..7)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_timeofDayStart_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  17, -1,  0,  86399 }	/* (0..86399,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_timeofDayEnd_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  17, -1,  0,  86399 }	/* (0..86399,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ScheduledCommunicationTime_1[] = {
+	{ ATF_POINTER, 4, offsetof(struct X2N_ScheduledCommunicationTime, dayofWeek),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_dayofWeek_constr_2,  memb_X2N_dayofWeek_constraint_1 },
+		0, 0, /* No default value */
+		"dayofWeek"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_ScheduledCommunicationTime, timeofDayStart),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_timeofDayStart_constr_3,  memb_X2N_timeofDayStart_constraint_1 },
+		0, 0, /* No default value */
+		"timeofDayStart"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ScheduledCommunicationTime, timeofDayEnd),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_timeofDayEnd_constr_4,  memb_X2N_timeofDayEnd_constraint_1 },
+		0, 0, /* No default value */
+		"timeofDayEnd"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ScheduledCommunicationTime, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P197,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ScheduledCommunicationTime_oms_1[] = { 0, 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ScheduledCommunicationTime_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ScheduledCommunicationTime_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dayofWeek */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* timeofDayStart */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* timeofDayEnd */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ScheduledCommunicationTime_specs_1 = {
+	sizeof(struct X2N_ScheduledCommunicationTime),
+	offsetof(struct X2N_ScheduledCommunicationTime, _asn_ctx),
+	asn_MAP_X2N_ScheduledCommunicationTime_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ScheduledCommunicationTime_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ScheduledCommunicationTime = {
+	"ScheduledCommunicationTime",
+	"ScheduledCommunicationTime",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ScheduledCommunicationTime_tags_1,
+	sizeof(asn_DEF_X2N_ScheduledCommunicationTime_tags_1)
+		/sizeof(asn_DEF_X2N_ScheduledCommunicationTime_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ScheduledCommunicationTime_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ScheduledCommunicationTime_tags_1)
+		/sizeof(asn_DEF_X2N_ScheduledCommunicationTime_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ScheduledCommunicationTime_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ScheduledCommunicationTime_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ScheduledCommunicationTime.h b/asn1c_defs/X2N_ScheduledCommunicationTime.h
new file mode 100644
index 0000000..a758fca
--- /dev/null
+++ b/asn1c_defs/X2N_ScheduledCommunicationTime.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ScheduledCommunicationTime_H_
+#define	_X2N_ScheduledCommunicationTime_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ScheduledCommunicationTime */
+typedef struct X2N_ScheduledCommunicationTime {
+	BIT_STRING_t	*dayofWeek;	/* OPTIONAL */
+	long	*timeofDayStart;	/* OPTIONAL */
+	long	*timeofDayEnd;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ScheduledCommunicationTime_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ScheduledCommunicationTime;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ScheduledCommunicationTime_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ScheduledCommunicationTime_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ScheduledCommunicationTime_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBAdditionRequest.c b/asn1c_defs/X2N_SeNBAdditionRequest.c
new file mode 100644
index 0000000..1e8f9ab
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBAdditionRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P30,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequest_specs_1 = {
+	sizeof(struct X2N_SeNBAdditionRequest),
+	offsetof(struct X2N_SeNBAdditionRequest, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequest = {
+	"SeNBAdditionRequest",
+	"SeNBAdditionRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequest_tags_1,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBAdditionRequest.h b/asn1c_defs/X2N_SeNBAdditionRequest.h
new file mode 100644
index 0000000..e4712eb
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBAdditionRequest_H_
+#define	_X2N_SeNBAdditionRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBAdditionRequest */
+typedef struct X2N_SeNBAdditionRequest {
+	X2N_ProtocolIE_Container_8180P30_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBAdditionRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.c b/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.c
new file mode 100644
index 0000000..f7a7247
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBAdditionRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P31,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_SeNBAdditionRequestAcknowledge),
+	offsetof(struct X2N_SeNBAdditionRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge = {
+	"SeNBAdditionRequestAcknowledge",
+	"SeNBAdditionRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.h b/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.h
new file mode 100644
index 0000000..8dfef90
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBAdditionRequestAcknowledge_H_
+#define	_X2N_SeNBAdditionRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBAdditionRequestAcknowledge */
+typedef struct X2N_SeNBAdditionRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P31_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBAdditionRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBAdditionRequestReject.c b/asn1c_defs/X2N_SeNBAdditionRequestReject.c
new file mode 100644
index 0000000..4c0192b
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequestReject.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBAdditionRequestReject.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestReject_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBAdditionRequestReject, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P32,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBAdditionRequestReject_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBAdditionRequestReject_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestReject_specs_1 = {
+	sizeof(struct X2N_SeNBAdditionRequestReject),
+	offsetof(struct X2N_SeNBAdditionRequestReject, _asn_ctx),
+	asn_MAP_X2N_SeNBAdditionRequestReject_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestReject = {
+	"SeNBAdditionRequestReject",
+	"SeNBAdditionRequestReject",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBAdditionRequestReject_tags_1,
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBAdditionRequestReject_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBAdditionRequestReject_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBAdditionRequestReject_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBAdditionRequestReject_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBAdditionRequestReject.h b/asn1c_defs/X2N_SeNBAdditionRequestReject.h
new file mode 100644
index 0000000..b16c9e5
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBAdditionRequestReject.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBAdditionRequestReject_H_
+#define	_X2N_SeNBAdditionRequestReject_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBAdditionRequestReject */
+typedef struct X2N_SeNBAdditionRequestReject {
+	X2N_ProtocolIE_Container_8180P32_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBAdditionRequestReject_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBAdditionRequestReject;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBAdditionRequestReject_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBAdditionRequestReject_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBAdditionRequestReject_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBCounterCheckRequest.c b/asn1c_defs/X2N_SeNBCounterCheckRequest.c
new file mode 100644
index 0000000..41ef167
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBCounterCheckRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBCounterCheckRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBCounterCheckRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBCounterCheckRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P43,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBCounterCheckRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBCounterCheckRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBCounterCheckRequest_specs_1 = {
+	sizeof(struct X2N_SeNBCounterCheckRequest),
+	offsetof(struct X2N_SeNBCounterCheckRequest, _asn_ctx),
+	asn_MAP_X2N_SeNBCounterCheckRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBCounterCheckRequest = {
+	"SeNBCounterCheckRequest",
+	"SeNBCounterCheckRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBCounterCheckRequest_tags_1,
+	sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBCounterCheckRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBCounterCheckRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBCounterCheckRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBCounterCheckRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBCounterCheckRequest.h b/asn1c_defs/X2N_SeNBCounterCheckRequest.h
new file mode 100644
index 0000000..2f9d040
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBCounterCheckRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBCounterCheckRequest_H_
+#define	_X2N_SeNBCounterCheckRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBCounterCheckRequest */
+typedef struct X2N_SeNBCounterCheckRequest {
+	X2N_ProtocolIE_Container_8180P43_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBCounterCheckRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBCounterCheckRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBCounterCheckRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBCounterCheckRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBCounterCheckRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationConfirm.c b/asn1c_defs/X2N_SeNBModificationConfirm.c
new file mode 100644
index 0000000..3299ce1
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P38,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationConfirm_specs_1 = {
+	sizeof(struct X2N_SeNBModificationConfirm),
+	offsetof(struct X2N_SeNBModificationConfirm, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationConfirm = {
+	"SeNBModificationConfirm",
+	"SeNBModificationConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationConfirm_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationConfirm.h b/asn1c_defs/X2N_SeNBModificationConfirm.h
new file mode 100644
index 0000000..06b1274
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationConfirm_H_
+#define	_X2N_SeNBModificationConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationConfirm */
+typedef struct X2N_SeNBModificationConfirm {
+	X2N_ProtocolIE_Container_8180P38_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationRefuse.c b/asn1c_defs/X2N_SeNBModificationRefuse.c
new file mode 100644
index 0000000..757df5a
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRefuse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationRefuse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRefuse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRefuse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P39,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRefuse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRefuse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRefuse_specs_1 = {
+	sizeof(struct X2N_SeNBModificationRefuse),
+	offsetof(struct X2N_SeNBModificationRefuse, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRefuse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRefuse = {
+	"SeNBModificationRefuse",
+	"SeNBModificationRefuse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRefuse_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRefuse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRefuse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRefuse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRefuse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRefuse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationRefuse.h b/asn1c_defs/X2N_SeNBModificationRefuse.h
new file mode 100644
index 0000000..ac9c4b3
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRefuse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationRefuse_H_
+#define	_X2N_SeNBModificationRefuse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationRefuse */
+typedef struct X2N_SeNBModificationRefuse {
+	X2N_ProtocolIE_Container_8180P39_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRefuse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRefuse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRefuse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRefuse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationRefuse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationRequest.c b/asn1c_defs/X2N_SeNBModificationRequest.c
new file mode 100644
index 0000000..13586ad
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P34,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequest_specs_1 = {
+	sizeof(struct X2N_SeNBModificationRequest),
+	offsetof(struct X2N_SeNBModificationRequest, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequest = {
+	"SeNBModificationRequest",
+	"SeNBModificationRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequest_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationRequest.h b/asn1c_defs/X2N_SeNBModificationRequest.h
new file mode 100644
index 0000000..6b6a300
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationRequest_H_
+#define	_X2N_SeNBModificationRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationRequest */
+typedef struct X2N_SeNBModificationRequest {
+	X2N_ProtocolIE_Container_8180P34_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.c b/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.c
new file mode 100644
index 0000000..e168e69
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P35,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_SeNBModificationRequestAcknowledge),
+	offsetof(struct X2N_SeNBModificationRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestAcknowledge = {
+	"SeNBModificationRequestAcknowledge",
+	"SeNBModificationRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.h b/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.h
new file mode 100644
index 0000000..2b071d1
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationRequestAcknowledge_H_
+#define	_X2N_SeNBModificationRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationRequestAcknowledge */
+typedef struct X2N_SeNBModificationRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P35_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationRequestReject.c b/asn1c_defs/X2N_SeNBModificationRequestReject.c
new file mode 100644
index 0000000..631fbb7
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequestReject.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationRequestReject.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestReject_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequestReject, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P36,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequestReject_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequestReject_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestReject_specs_1 = {
+	sizeof(struct X2N_SeNBModificationRequestReject),
+	offsetof(struct X2N_SeNBModificationRequestReject, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequestReject_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestReject = {
+	"SeNBModificationRequestReject",
+	"SeNBModificationRequestReject",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequestReject_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestReject_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequestReject_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequestReject_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequestReject_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequestReject_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationRequestReject.h b/asn1c_defs/X2N_SeNBModificationRequestReject.h
new file mode 100644
index 0000000..2bb1dc9
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequestReject.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationRequestReject_H_
+#define	_X2N_SeNBModificationRequestReject_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationRequestReject */
+typedef struct X2N_SeNBModificationRequestReject {
+	X2N_ProtocolIE_Container_8180P36_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequestReject_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequestReject;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequestReject_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequestReject_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationRequestReject_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBModificationRequired.c b/asn1c_defs/X2N_SeNBModificationRequired.c
new file mode 100644
index 0000000..03ef08c
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBModificationRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBModificationRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P37,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBModificationRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBModificationRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequired_specs_1 = {
+	sizeof(struct X2N_SeNBModificationRequired),
+	offsetof(struct X2N_SeNBModificationRequired, _asn_ctx),
+	asn_MAP_X2N_SeNBModificationRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequired = {
+	"SeNBModificationRequired",
+	"SeNBModificationRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBModificationRequired_tags_1,
+	sizeof(asn_DEF_X2N_SeNBModificationRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBModificationRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBModificationRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBModificationRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBModificationRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBModificationRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBModificationRequired.h b/asn1c_defs/X2N_SeNBModificationRequired.h
new file mode 100644
index 0000000..f14ef7a
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBModificationRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBModificationRequired_H_
+#define	_X2N_SeNBModificationRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBModificationRequired */
+typedef struct X2N_SeNBModificationRequired {
+	X2N_ProtocolIE_Container_8180P37_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBModificationRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBModificationRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBModificationRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBModificationRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBModificationRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBReconfigurationComplete.c b/asn1c_defs/X2N_SeNBReconfigurationComplete.c
new file mode 100644
index 0000000..00f3661
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReconfigurationComplete.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBReconfigurationComplete.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReconfigurationComplete_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReconfigurationComplete, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P33,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReconfigurationComplete_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReconfigurationComplete_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReconfigurationComplete_specs_1 = {
+	sizeof(struct X2N_SeNBReconfigurationComplete),
+	offsetof(struct X2N_SeNBReconfigurationComplete, _asn_ctx),
+	asn_MAP_X2N_SeNBReconfigurationComplete_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReconfigurationComplete = {
+	"SeNBReconfigurationComplete",
+	"SeNBReconfigurationComplete",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReconfigurationComplete_tags_1,
+	sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBReconfigurationComplete_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReconfigurationComplete_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReconfigurationComplete_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBReconfigurationComplete_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBReconfigurationComplete.h b/asn1c_defs/X2N_SeNBReconfigurationComplete.h
new file mode 100644
index 0000000..32f0e44
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReconfigurationComplete.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBReconfigurationComplete_H_
+#define	_X2N_SeNBReconfigurationComplete_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBReconfigurationComplete */
+typedef struct X2N_SeNBReconfigurationComplete {
+	X2N_ProtocolIE_Container_8180P33_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReconfigurationComplete_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReconfigurationComplete;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReconfigurationComplete_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReconfigurationComplete_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBReconfigurationComplete_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBReleaseConfirm.c b/asn1c_defs/X2N_SeNBReleaseConfirm.c
new file mode 100644
index 0000000..30fbab2
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBReleaseConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P42,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseConfirm_specs_1 = {
+	sizeof(struct X2N_SeNBReleaseConfirm),
+	offsetof(struct X2N_SeNBReleaseConfirm, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseConfirm = {
+	"SeNBReleaseConfirm",
+	"SeNBReleaseConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseConfirm_tags_1,
+	sizeof(asn_DEF_X2N_SeNBReleaseConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBReleaseConfirm.h b/asn1c_defs/X2N_SeNBReleaseConfirm.h
new file mode 100644
index 0000000..3a55968
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBReleaseConfirm_H_
+#define	_X2N_SeNBReleaseConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBReleaseConfirm */
+typedef struct X2N_SeNBReleaseConfirm {
+	X2N_ProtocolIE_Container_8180P42_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBReleaseConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBReleaseRequest.c b/asn1c_defs/X2N_SeNBReleaseRequest.c
new file mode 100644
index 0000000..1074f61
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBReleaseRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P40,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequest_specs_1 = {
+	sizeof(struct X2N_SeNBReleaseRequest),
+	offsetof(struct X2N_SeNBReleaseRequest, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequest = {
+	"SeNBReleaseRequest",
+	"SeNBReleaseRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseRequest_tags_1,
+	sizeof(asn_DEF_X2N_SeNBReleaseRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBReleaseRequest.h b/asn1c_defs/X2N_SeNBReleaseRequest.h
new file mode 100644
index 0000000..ed2f8da
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBReleaseRequest_H_
+#define	_X2N_SeNBReleaseRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBReleaseRequest */
+typedef struct X2N_SeNBReleaseRequest {
+	X2N_ProtocolIE_Container_8180P40_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBReleaseRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBReleaseRequired.c b/asn1c_defs/X2N_SeNBReleaseRequired.c
new file mode 100644
index 0000000..7f13cff
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBReleaseRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SeNBReleaseRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P41,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBReleaseRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SeNBReleaseRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequired_specs_1 = {
+	sizeof(struct X2N_SeNBReleaseRequired),
+	offsetof(struct X2N_SeNBReleaseRequired, _asn_ctx),
+	asn_MAP_X2N_SeNBReleaseRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequired = {
+	"SeNBReleaseRequired",
+	"SeNBReleaseRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SeNBReleaseRequired_tags_1,
+	sizeof(asn_DEF_X2N_SeNBReleaseRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBReleaseRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBReleaseRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBReleaseRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SeNBReleaseRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SeNBReleaseRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBReleaseRequired.h b/asn1c_defs/X2N_SeNBReleaseRequired.h
new file mode 100644
index 0000000..f6e9710
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBReleaseRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBReleaseRequired_H_
+#define	_X2N_SeNBReleaseRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBReleaseRequired */
+typedef struct X2N_SeNBReleaseRequired {
+	X2N_ProtocolIE_Container_8180P41_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SeNBReleaseRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBReleaseRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SeNBReleaseRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SeNBReleaseRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBReleaseRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBSecurityKey.c b/asn1c_defs/X2N_SeNBSecurityKey.c
new file mode 100644
index 0000000..4427148
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBSecurityKey.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBSecurityKey.h"
+
+int
+X2N_SeNBSecurityKey_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SeNBSecurityKey_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  256,  256 }	/* (SIZE(256..256)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBSecurityKey_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBSecurityKey = {
+	"SeNBSecurityKey",
+	"SeNBSecurityKey",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_SeNBSecurityKey_tags_1,
+	sizeof(asn_DEF_X2N_SeNBSecurityKey_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBSecurityKey_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBSecurityKey_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBSecurityKey_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBSecurityKey_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SeNBSecurityKey_constr_1, X2N_SeNBSecurityKey_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBSecurityKey.h b/asn1c_defs/X2N_SeNBSecurityKey.h
new file mode 100644
index 0000000..3db7287
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBSecurityKey.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBSecurityKey_H_
+#define	_X2N_SeNBSecurityKey_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBSecurityKey */
+typedef BIT_STRING_t	 X2N_SeNBSecurityKey_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SeNBSecurityKey_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBSecurityKey;
+asn_struct_free_f X2N_SeNBSecurityKey_free;
+asn_struct_print_f X2N_SeNBSecurityKey_print;
+asn_constr_check_f X2N_SeNBSecurityKey_constraint;
+ber_type_decoder_f X2N_SeNBSecurityKey_decode_ber;
+der_type_encoder_f X2N_SeNBSecurityKey_encode_der;
+xer_type_decoder_f X2N_SeNBSecurityKey_decode_xer;
+xer_type_encoder_f X2N_SeNBSecurityKey_encode_xer;
+per_type_decoder_f X2N_SeNBSecurityKey_decode_uper;
+per_type_encoder_f X2N_SeNBSecurityKey_encode_uper;
+per_type_decoder_f X2N_SeNBSecurityKey_decode_aper;
+per_type_encoder_f X2N_SeNBSecurityKey_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBSecurityKey_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SeNBtoMeNBContainer.c b/asn1c_defs/X2N_SeNBtoMeNBContainer.c
new file mode 100644
index 0000000..f6a37e0
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBtoMeNBContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SeNBtoMeNBContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_SeNBtoMeNBContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SeNBtoMeNBContainer = {
+	"SeNBtoMeNBContainer",
+	"SeNBtoMeNBContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_SeNBtoMeNBContainer_tags_1,
+	sizeof(asn_DEF_X2N_SeNBtoMeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBtoMeNBContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SeNBtoMeNBContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SeNBtoMeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_SeNBtoMeNBContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SeNBtoMeNBContainer.h b/asn1c_defs/X2N_SeNBtoMeNBContainer.h
new file mode 100644
index 0000000..f00bec1
--- /dev/null
+++ b/asn1c_defs/X2N_SeNBtoMeNBContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SeNBtoMeNBContainer_H_
+#define	_X2N_SeNBtoMeNBContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SeNBtoMeNBContainer */
+typedef OCTET_STRING_t	 X2N_SeNBtoMeNBContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SeNBtoMeNBContainer;
+asn_struct_free_f X2N_SeNBtoMeNBContainer_free;
+asn_struct_print_f X2N_SeNBtoMeNBContainer_print;
+asn_constr_check_f X2N_SeNBtoMeNBContainer_constraint;
+ber_type_decoder_f X2N_SeNBtoMeNBContainer_decode_ber;
+der_type_encoder_f X2N_SeNBtoMeNBContainer_encode_der;
+xer_type_decoder_f X2N_SeNBtoMeNBContainer_decode_xer;
+xer_type_encoder_f X2N_SeNBtoMeNBContainer_encode_xer;
+per_type_decoder_f X2N_SeNBtoMeNBContainer_decode_uper;
+per_type_encoder_f X2N_SeNBtoMeNBContainer_encode_uper;
+per_type_decoder_f X2N_SeNBtoMeNBContainer_decode_aper;
+per_type_encoder_f X2N_SeNBtoMeNBContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SeNBtoMeNBContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SecondaryRATDataUsageReport.c b/asn1c_defs/X2N_SecondaryRATDataUsageReport.c
new file mode 100644
index 0000000..7c9d7c1
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATDataUsageReport.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SecondaryRATDataUsageReport.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SecondaryRATDataUsageReport_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATDataUsageReport, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P87,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SecondaryRATDataUsageReport_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATDataUsageReport_specs_1 = {
+	sizeof(struct X2N_SecondaryRATDataUsageReport),
+	offsetof(struct X2N_SecondaryRATDataUsageReport, _asn_ctx),
+	asn_MAP_X2N_SecondaryRATDataUsageReport_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATDataUsageReport = {
+	"SecondaryRATDataUsageReport",
+	"SecondaryRATDataUsageReport",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1,
+	sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATDataUsageReport_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATDataUsageReport_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATDataUsageReport_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SecondaryRATDataUsageReport.h b/asn1c_defs/X2N_SecondaryRATDataUsageReport.h
new file mode 100644
index 0000000..392599a
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATDataUsageReport.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SecondaryRATDataUsageReport_H_
+#define	_X2N_SecondaryRATDataUsageReport_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SecondaryRATDataUsageReport */
+typedef struct X2N_SecondaryRATDataUsageReport {
+	X2N_ProtocolIE_Container_8180P87_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATDataUsageReport_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATDataUsageReport;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATDataUsageReport_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SecondaryRATDataUsageReport_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SecondaryRATDataUsageReport_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SecondaryRATUsageReport-Item.c b/asn1c_defs/X2N_SecondaryRATUsageReport-Item.c
new file mode 100644
index 0000000..072e7f9
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATUsageReport-Item.c
@@ -0,0 +1,129 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SecondaryRATUsageReport-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_secondaryRATType_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_secondaryRATType_value2enum_3[] = {
+	{ 0,	2,	"nr" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_secondaryRATType_enum2value_3[] = {
+	0	/* nr(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_secondaryRATType_specs_3 = {
+	asn_MAP_X2N_secondaryRATType_value2enum_3,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_secondaryRATType_enum2value_3,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_secondaryRATType_tags_3[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_secondaryRATType_3 = {
+	"secondaryRATType",
+	"secondaryRATType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_secondaryRATType_tags_3,
+	sizeof(asn_DEF_X2N_secondaryRATType_tags_3)
+		/sizeof(asn_DEF_X2N_secondaryRATType_tags_3[0]) - 1, /* 1 */
+	asn_DEF_X2N_secondaryRATType_tags_3,	/* Same as above */
+	sizeof(asn_DEF_X2N_secondaryRATType_tags_3)
+		/sizeof(asn_DEF_X2N_secondaryRATType_tags_3[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_secondaryRATType_constr_3, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_secondaryRATType_specs_3	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReport_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item, e_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RAB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item, secondaryRATType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_secondaryRATType_3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"secondaryRATType"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SecondaryRATUsageReport_Item, e_RABUsageReportList),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABUsageReportList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABUsageReportList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SecondaryRATUsageReport_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P190,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SecondaryRATUsageReport_Item_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SecondaryRATUsageReport_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* secondaryRATType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* e-RABUsageReportList */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_SecondaryRATUsageReport_Item_specs_1 = {
+	sizeof(struct X2N_SecondaryRATUsageReport_Item),
+	offsetof(struct X2N_SecondaryRATUsageReport_Item, _asn_ctx),
+	asn_MAP_X2N_SecondaryRATUsageReport_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_SecondaryRATUsageReport_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_Item = {
+	"SecondaryRATUsageReport-Item",
+	"SecondaryRATUsageReport-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1,
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReport_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SecondaryRATUsageReport_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_SecondaryRATUsageReport_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SecondaryRATUsageReport-Item.h b/asn1c_defs/X2N_SecondaryRATUsageReport-Item.h
new file mode 100644
index 0000000..9cd7361
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATUsageReport-Item.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SecondaryRATUsageReport_Item_H_
+#define	_X2N_SecondaryRATUsageReport_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_E-RAB-ID.h"
+#include <NativeEnumerated.h>
+#include "X2N_E-RABUsageReportList.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SecondaryRATUsageReport_Item__secondaryRATType {
+	X2N_SecondaryRATUsageReport_Item__secondaryRATType_nr	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SecondaryRATUsageReport_Item__secondaryRATType;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SecondaryRATUsageReport-Item */
+typedef struct X2N_SecondaryRATUsageReport_Item {
+	X2N_E_RAB_ID_t	 e_RAB_ID;
+	long	 secondaryRATType;
+	X2N_E_RABUsageReportList_t	 e_RABUsageReportList;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATUsageReport_Item_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_secondaryRATType_3;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReport_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SecondaryRATUsageReport_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SecondaryRATUsageReportList.c b/asn1c_defs/X2N_SecondaryRATUsageReportList.c
new file mode 100644
index 0000000..875ff7f
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATUsageReportList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SecondaryRATUsageReportList.h"
+
+#include "X2N_ProtocolIE-Single-Container.h"
+static asn_per_constraints_t asn_PER_type_X2N_SecondaryRATUsageReportList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_SecondaryRATUsageReportList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ProtocolIE_Single_Container_8183P42,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SecondaryRATUsageReportList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_SecondaryRATUsageReportList_specs_1 = {
+	sizeof(struct X2N_SecondaryRATUsageReportList),
+	offsetof(struct X2N_SecondaryRATUsageReportList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReportList = {
+	"SecondaryRATUsageReportList",
+	"SecondaryRATUsageReportList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_SecondaryRATUsageReportList_tags_1,
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReportList_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReportList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SecondaryRATUsageReportList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SecondaryRATUsageReportList_tags_1)
+		/sizeof(asn_DEF_X2N_SecondaryRATUsageReportList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SecondaryRATUsageReportList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_SecondaryRATUsageReportList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_SecondaryRATUsageReportList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SecondaryRATUsageReportList.h b/asn1c_defs/X2N_SecondaryRATUsageReportList.h
new file mode 100644
index 0000000..c2b8b4c
--- /dev/null
+++ b/asn1c_defs/X2N_SecondaryRATUsageReportList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SecondaryRATUsageReportList_H_
+#define	_X2N_SecondaryRATUsageReportList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolIE_Single_Container;
+
+/* X2N_SecondaryRATUsageReportList */
+typedef struct X2N_SecondaryRATUsageReportList {
+	A_SEQUENCE_OF(struct X2N_ProtocolIE_Single_Container) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SecondaryRATUsageReportList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SecondaryRATUsageReportList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SecondaryRATUsageReportList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCell-Information.c b/asn1c_defs/X2N_ServedCell-Information.c
new file mode 100644
index 0000000..1a44da5
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCell-Information.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ServedCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information, pCI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information, cellId),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cellId"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information, tAC),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information, broadcastPLMNs),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BroadcastPLMNs_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"broadcastPLMNs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCell_Information, eUTRA_Mode_Info),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_EUTRA_Mode_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRA-Mode-Info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P192,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedCell_Information_oms_1[] = { 5 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pCI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellId */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tAC */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* broadcastPLMNs */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* eUTRA-Mode-Info */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_Information_specs_1 = {
+	sizeof(struct X2N_ServedCell_Information),
+	offsetof(struct X2N_ServedCell_Information, _asn_ctx),
+	asn_MAP_X2N_ServedCell_Information_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedCell_Information_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	6,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_Information = {
+	"ServedCell-Information",
+	"ServedCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_ServedCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCell_Information_1,
+	6,	/* Elements count */
+	&asn_SPC_X2N_ServedCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCell-Information.h b/asn1c_defs/X2N_ServedCell-Information.h
new file mode 100644
index 0000000..16c864c
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCell-Information.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCell_Information_H_
+#define	_X2N_ServedCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PCI.h"
+#include "X2N_ECGI.h"
+#include "X2N_TAC.h"
+#include "X2N_BroadcastPLMNs-Item.h"
+#include "X2N_EUTRA-Mode-Info.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ServedCell-Information */
+typedef struct X2N_ServedCell_Information {
+	X2N_PCI_t	 pCI;
+	X2N_ECGI_t	 cellId;
+	X2N_TAC_t	 tAC;
+	X2N_BroadcastPLMNs_Item_t	 broadcastPLMNs;
+	X2N_EUTRA_Mode_Info_t	 eUTRA_Mode_Info;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCell_Information_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCells.c b/asn1c_defs/X2N_ServedCells.c
new file mode 100644
index 0000000..ca8cac8
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCells.c
@@ -0,0 +1,115 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCells.h"
+
+#include "X2N_Neighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedCells_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCells__Member, servedCellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedCellInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedCells__Member, neighbour_Info),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Neighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"neighbour-Info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedCells__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P191,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedCellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* neighbour-Info */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_ServedCells__Member),
+	offsetof(struct X2N_ServedCells__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_ServedCells_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCells_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedCells_specs_1 = {
+	sizeof(struct X2N_ServedCells),
+	offsetof(struct X2N_ServedCells, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCells = {
+	"ServedCells",
+	"ServedCells",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedCells_tags_1,
+	sizeof(asn_DEF_X2N_ServedCells_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCells_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCells_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCells_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCells_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedCells_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedCells_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedCells_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCells.h b/asn1c_defs/X2N_ServedCells.h
new file mode 100644
index 0000000..c894117
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCells.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCells_H_
+#define	_X2N_ServedCells_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ServedCell-Information.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_Neighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_ServedCells__Member {
+	X2N_ServedCell_Information_t	 servedCellInfo;
+	struct X2N_Neighbour_Information	*neighbour_Info;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ServedCells__Member;
+
+/* X2N_ServedCells */
+typedef struct X2N_ServedCells {
+	A_SEQUENCE_OF(ServedCells__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCells_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCells;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCells_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCellsToActivate-Item.c b/asn1c_defs/X2N_ServedCellsToActivate-Item.c
new file mode 100644
index 0000000..17bbee2
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToActivate-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCellsToActivate-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ServedCellsToActivate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToActivate_Item, ecgi),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ecgi"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedCellsToActivate_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P14,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedCellsToActivate_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToActivate_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCellsToActivate_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ecgi */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToActivate_Item_specs_1 = {
+	sizeof(struct X2N_ServedCellsToActivate_Item),
+	offsetof(struct X2N_ServedCellsToActivate_Item, _asn_ctx),
+	asn_MAP_X2N_ServedCellsToActivate_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedCellsToActivate_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate_Item = {
+	"ServedCellsToActivate-Item",
+	"ServedCellsToActivate-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCellsToActivate_Item_tags_1,
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToActivate_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCellsToActivate_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ServedCellsToActivate_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCellsToActivate-Item.h b/asn1c_defs/X2N_ServedCellsToActivate-Item.h
new file mode 100644
index 0000000..a673cd7
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToActivate-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCellsToActivate_Item_H_
+#define	_X2N_ServedCellsToActivate_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ServedCellsToActivate-Item */
+typedef struct X2N_ServedCellsToActivate_Item {
+	X2N_ECGI_t	 ecgi;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToActivate_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToActivate_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCellsToActivate_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCellsToActivate_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCellsToActivate.c b/asn1c_defs/X2N_ServedCellsToActivate.c
new file mode 100644
index 0000000..18fe7fd
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToActivate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCellsToActivate.h"
+
+#include "X2N_ServedCellsToActivate-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedCellsToActivate_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedCellsToActivate_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToActivate_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToActivate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedCellsToActivate_specs_1 = {
+	sizeof(struct X2N_ServedCellsToActivate),
+	offsetof(struct X2N_ServedCellsToActivate, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate = {
+	"ServedCellsToActivate",
+	"ServedCellsToActivate",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedCellsToActivate_tags_1,
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToActivate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToActivate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedCellsToActivate_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedCellsToActivate_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedCellsToActivate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCellsToActivate.h b/asn1c_defs/X2N_ServedCellsToActivate.h
new file mode 100644
index 0000000..52f434f
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToActivate.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCellsToActivate_H_
+#define	_X2N_ServedCellsToActivate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ServedCellsToActivate_Item;
+
+/* X2N_ServedCellsToActivate */
+typedef struct X2N_ServedCellsToActivate {
+	A_SEQUENCE_OF(struct X2N_ServedCellsToActivate_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToActivate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToActivate;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCellsToActivate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCellsToModify-Item.c b/asn1c_defs/X2N_ServedCellsToModify-Item.c
new file mode 100644
index 0000000..70c0bce
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToModify-Item.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCellsToModify-Item.h"
+
+#include "X2N_Neighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ServedCellsToModify_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item, old_ecgi),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"old-ecgi"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedCellsToModify_Item, servedCellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedCellInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedCellsToModify_Item, neighbour_Info),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Neighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"neighbour-Info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedCellsToModify_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedCellsToModify_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToModify_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedCellsToModify_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-ecgi */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedCellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* neighbour-Info */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToModify_Item_specs_1 = {
+	sizeof(struct X2N_ServedCellsToModify_Item),
+	offsetof(struct X2N_ServedCellsToModify_Item, _asn_ctx),
+	asn_MAP_X2N_ServedCellsToModify_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedCellsToModify_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify_Item = {
+	"ServedCellsToModify-Item",
+	"ServedCellsToModify-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedCellsToModify_Item_tags_1,
+	sizeof(asn_DEF_X2N_ServedCellsToModify_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToModify_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToModify_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedCellsToModify_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_ServedCellsToModify_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCellsToModify-Item.h b/asn1c_defs/X2N_ServedCellsToModify-Item.h
new file mode 100644
index 0000000..566b473
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToModify-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCellsToModify_Item_H_
+#define	_X2N_ServedCellsToModify_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include "X2N_ServedCell-Information.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_Neighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ServedCellsToModify-Item */
+typedef struct X2N_ServedCellsToModify_Item {
+	X2N_ECGI_t	 old_ecgi;
+	X2N_ServedCell_Information_t	 servedCellInfo;
+	struct X2N_Neighbour_Information	*neighbour_Info;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToModify_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedCellsToModify_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedCellsToModify_Item_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCellsToModify_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedCellsToModify.c b/asn1c_defs/X2N_ServedCellsToModify.c
new file mode 100644
index 0000000..59e4d78
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToModify.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedCellsToModify.h"
+
+#include "X2N_ServedCellsToModify-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedCellsToModify_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedCellsToModify_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedCellsToModify_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedCellsToModify_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedCellsToModify_specs_1 = {
+	sizeof(struct X2N_ServedCellsToModify),
+	offsetof(struct X2N_ServedCellsToModify, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify = {
+	"ServedCellsToModify",
+	"ServedCellsToModify",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedCellsToModify_tags_1,
+	sizeof(asn_DEF_X2N_ServedCellsToModify_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedCellsToModify_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedCellsToModify_tags_1)
+		/sizeof(asn_DEF_X2N_ServedCellsToModify_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedCellsToModify_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedCellsToModify_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedCellsToModify_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedCellsToModify.h b/asn1c_defs/X2N_ServedCellsToModify.h
new file mode 100644
index 0000000..2f4b288
--- /dev/null
+++ b/asn1c_defs/X2N_ServedCellsToModify.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedCellsToModify_H_
+#define	_X2N_ServedCellsToModify_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ServedCellsToModify_Item;
+
+/* X2N_ServedCellsToModify */
+typedef struct X2N_ServedCellsToModify {
+	A_SEQUENCE_OF(struct X2N_ServedCellsToModify_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedCellsToModify_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedCellsToModify;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedCellsToModify_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.c b/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.c
new file mode 100644
index 0000000..e6aabce
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.c
@@ -0,0 +1,115 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedEUTRAcellsENDCX2ManagementList.h"
+
+#include "X2N_NRNeighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedEUTRAcellsENDCX2ManagementList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member, servedEUTRACellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedEUTRACellInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member, nrNeighbourInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRNeighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrNeighbourInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P90,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedEUTRACellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrNeighbourInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member),
+	offsetof(struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsENDCX2ManagementList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedEUTRAcellsENDCX2ManagementList_specs_1 = {
+	sizeof(struct X2N_ServedEUTRAcellsENDCX2ManagementList),
+	offsetof(struct X2N_ServedEUTRAcellsENDCX2ManagementList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList = {
+	"ServedEUTRAcellsENDCX2ManagementList",
+	"ServedEUTRAcellsENDCX2ManagementList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1,
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedEUTRAcellsENDCX2ManagementList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedEUTRAcellsENDCX2ManagementList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedEUTRAcellsENDCX2ManagementList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.h b/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.h
new file mode 100644
index 0000000..283529e
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsENDCX2ManagementList.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedEUTRAcellsENDCX2ManagementList_H_
+#define	_X2N_ServedEUTRAcellsENDCX2ManagementList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ServedCell-Information.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRNeighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_ServedEUTRAcellsENDCX2ManagementList__Member {
+	X2N_ServedCell_Information_t	 servedEUTRACellInfo;
+	struct X2N_NRNeighbour_Information	*nrNeighbourInfo;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ServedEUTRAcellsENDCX2ManagementList__Member;
+
+/* X2N_ServedEUTRAcellsENDCX2ManagementList */
+typedef struct X2N_ServedEUTRAcellsENDCX2ManagementList {
+	A_SEQUENCE_OF(ServedEUTRAcellsENDCX2ManagementList__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedEUTRAcellsENDCX2ManagementList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsENDCX2ManagementList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedEUTRAcellsENDCX2ManagementList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.c b/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.c
new file mode 100644
index 0000000..9701f99
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.h"
+
+#include "X2N_ECGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_specs_1 = {
+	sizeof(struct X2N_ServedEUTRAcellsToDeleteListENDCConfUpd),
+	offsetof(struct X2N_ServedEUTRAcellsToDeleteListENDCConfUpd, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd = {
+	"ServedEUTRAcellsToDeleteListENDCConfUpd",
+	"ServedEUTRAcellsToDeleteListENDCConfUpd",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1,
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.h b/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.h
new file mode 100644
index 0000000..7b3576d
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsToDeleteListENDCConfUpd.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_H_
+#define	_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ECGI;
+
+/* X2N_ServedEUTRAcellsToDeleteListENDCConfUpd */
+typedef struct X2N_ServedEUTRAcellsToDeleteListENDCConfUpd {
+	A_SEQUENCE_OF(struct X2N_ECGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToDeleteListENDCConfUpd;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedEUTRAcellsToDeleteListENDCConfUpd_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.c b/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.c
new file mode 100644
index 0000000..a53bb03
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.c
@@ -0,0 +1,125 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedEUTRAcellsToModifyListENDCConfUpd.h"
+
+#include "X2N_NRNeighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member, old_ECGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"old-ECGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member, servedEUTRACellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedEUTRACellInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member, nrNeighbourInfo),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRNeighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrNeighbourInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P99,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-ECGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedEUTRACellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrNeighbourInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member),
+	offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	4,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_specs_1 = {
+	sizeof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd),
+	offsetof(struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd = {
+	"ServedEUTRAcellsToModifyListENDCConfUpd",
+	"ServedEUTRAcellsToModifyListENDCConfUpd",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1,
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1)
+		/sizeof(asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.h b/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.h
new file mode 100644
index 0000000..8514b43
--- /dev/null
+++ b/asn1c_defs/X2N_ServedEUTRAcellsToModifyListENDCConfUpd.h
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_H_
+#define	_X2N_ServedEUTRAcellsToModifyListENDCConfUpd_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ECGI.h"
+#include "X2N_ServedCell-Information.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRNeighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd__Member {
+	X2N_ECGI_t	 old_ECGI;
+	X2N_ServedCell_Information_t	 servedEUTRACellInfo;
+	struct X2N_NRNeighbour_Information	*nrNeighbourInfo;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ServedEUTRAcellsToModifyListENDCConfUpd__Member;
+
+/* X2N_ServedEUTRAcellsToModifyListENDCConfUpd */
+typedef struct X2N_ServedEUTRAcellsToModifyListENDCConfUpd {
+	A_SEQUENCE_OF(ServedEUTRAcellsToModifyListENDCConfUpd__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedEUTRAcellsToModifyListENDCConfUpd_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedEUTRAcellsToModifyListENDCConfUpd;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedEUTRAcellsToModifyListENDCConfUpd_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRCell-Information.c b/asn1c_defs/X2N_ServedNRCell-Information.c
new file mode 100644
index 0000000..4ea194a
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCell-Information.c
@@ -0,0 +1,179 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+#include "X2N_FDD-InfoServedNRCell-Information.h"
+#include "X2N_TDD-InfoServedNRCell-Information.h"
+static asn_per_constraints_t asn_PER_type_X2N_nrModeInfo_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_nrModeInfo_7[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_ServedNRCell_Information__nrModeInfo, choice.fdd),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FDD_InfoServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fdd"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_ServedNRCell_Information__nrModeInfo, choice.tdd),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TDD_InfoServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tdd"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_nrModeInfo_tag2el_7[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_nrModeInfo_specs_7 = {
+	sizeof(struct X2N_ServedNRCell_Information__nrModeInfo),
+	offsetof(struct X2N_ServedNRCell_Information__nrModeInfo, _asn_ctx),
+	offsetof(struct X2N_ServedNRCell_Information__nrModeInfo, present),
+	sizeof(((struct X2N_ServedNRCell_Information__nrModeInfo *)0)->present),
+	asn_MAP_X2N_nrModeInfo_tag2el_7,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_nrModeInfo_7 = {
+	"nrModeInfo",
+	"nrModeInfo",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_nrModeInfo_constr_7, CHOICE_constraint },
+	asn_MBR_X2N_nrModeInfo_7,
+	2,	/* Elements count */
+	&asn_SPC_X2N_nrModeInfo_specs_7	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information, nrpCI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRPCI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrpCI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information, nrCellID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrCellID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedNRCell_Information, fiveGS_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_FiveGS_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fiveGS-TAC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedNRCell_Information, configured_TAC),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"configured-TAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information, broadcastPLMNs),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BroadcastPLMNs_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"broadcastPLMNs"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information, nrModeInfo),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_nrModeInfo_7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrModeInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCell_Information, measurementTimingConfiguration),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"measurementTimingConfiguration"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedNRCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P92,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedNRCell_Information_oms_1[] = { 2, 3, 7 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrpCI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fiveGS-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* configured-TAC */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* broadcastPLMNs */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* nrModeInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* measurementTimingConfiguration */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCell_Information_specs_1 = {
+	sizeof(struct X2N_ServedNRCell_Information),
+	offsetof(struct X2N_ServedNRCell_Information, _asn_ctx),
+	asn_MAP_X2N_ServedNRCell_Information_tag2el_1,
+	8,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedNRCell_Information_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	8,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCell_Information = {
+	"ServedNRCell-Information",
+	"ServedNRCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCell_Information_1,
+	8,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRCell-Information.h b/asn1c_defs/X2N_ServedNRCell-Information.h
new file mode 100644
index 0000000..8fd4ae5
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCell-Information.h
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRCell_Information_H_
+#define	_X2N_ServedNRCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRPCI.h"
+#include "X2N_NRCGI.h"
+#include "X2N_FiveGS-TAC.h"
+#include "X2N_TAC.h"
+#include "X2N_BroadcastPLMNs-Item.h"
+#include <OCTET_STRING.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ServedNRCell_Information__nrModeInfo_PR {
+	X2N_ServedNRCell_Information__nrModeInfo_PR_NOTHING,	/* No components present */
+	X2N_ServedNRCell_Information__nrModeInfo_PR_fdd,
+	X2N_ServedNRCell_Information__nrModeInfo_PR_tdd
+	/* Extensions may appear below */
+	
+} X2N_ServedNRCell_Information__nrModeInfo_PR;
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+struct X2N_FDD_InfoServedNRCell_Information;
+struct X2N_TDD_InfoServedNRCell_Information;
+
+/* X2N_ServedNRCell-Information */
+typedef struct X2N_ServedNRCell_Information {
+	X2N_NRPCI_t	 nrpCI;
+	X2N_NRCGI_t	 nrCellID;
+	X2N_FiveGS_TAC_t	*fiveGS_TAC;	/* OPTIONAL */
+	X2N_TAC_t	*configured_TAC;	/* OPTIONAL */
+	X2N_BroadcastPLMNs_Item_t	 broadcastPLMNs;
+	struct X2N_ServedNRCell_Information__nrModeInfo {
+		X2N_ServedNRCell_Information__nrModeInfo_PR present;
+		union X2N_ServedNRCell_Information__X2N_nrModeInfo_u {
+			struct X2N_FDD_InfoServedNRCell_Information	*fdd;
+			struct X2N_TDD_InfoServedNRCell_Information	*tdd;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} nrModeInfo;
+	OCTET_STRING_t	 measurementTimingConfiguration;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCell_Information_1[8];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRCellsToActivate-Item.c b/asn1c_defs/X2N_ServedNRCellsToActivate-Item.c
new file mode 100644
index 0000000..4dd4455
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToActivate-Item.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRCellsToActivate-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToActivate_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToActivate_Item, nrCellID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrCellID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedNRCellsToActivate_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P101,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedNRCellsToActivate_Item_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCellsToActivate_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrCellID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToActivate_Item_specs_1 = {
+	sizeof(struct X2N_ServedNRCellsToActivate_Item),
+	offsetof(struct X2N_ServedNRCellsToActivate_Item, _asn_ctx),
+	asn_MAP_X2N_ServedNRCellsToActivate_Item_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedNRCellsToActivate_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate_Item = {
+	"ServedNRCellsToActivate-Item",
+	"ServedNRCellsToActivate-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCellsToActivate_Item_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCellsToActivate_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRCellsToActivate-Item.h b/asn1c_defs/X2N_ServedNRCellsToActivate-Item.h
new file mode 100644
index 0000000..f899df8
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToActivate-Item.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRCellsToActivate_Item_H_
+#define	_X2N_ServedNRCellsToActivate_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRCGI.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ServedNRCellsToActivate-Item */
+typedef struct X2N_ServedNRCellsToActivate_Item {
+	X2N_NRCGI_t	 nrCellID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCellsToActivate_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToActivate_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToActivate_Item_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRCellsToActivate_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRCellsToActivate.c b/asn1c_defs/X2N_ServedNRCellsToActivate.c
new file mode 100644
index 0000000..e44111b
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToActivate.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRCellsToActivate.h"
+
+#include "X2N_ServedNRCellsToActivate-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedNRCellsToActivate_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToActivate_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCellsToActivate_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCellsToActivate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedNRCellsToActivate_specs_1 = {
+	sizeof(struct X2N_ServedNRCellsToActivate),
+	offsetof(struct X2N_ServedNRCellsToActivate, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate = {
+	"ServedNRCellsToActivate",
+	"ServedNRCellsToActivate",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedNRCellsToActivate_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCellsToActivate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCellsToActivate_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToActivate_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedNRCellsToActivate_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedNRCellsToActivate_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedNRCellsToActivate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRCellsToActivate.h b/asn1c_defs/X2N_ServedNRCellsToActivate.h
new file mode 100644
index 0000000..23d9140
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToActivate.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRCellsToActivate_H_
+#define	_X2N_ServedNRCellsToActivate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ServedNRCellsToActivate_Item;
+
+/* X2N_ServedNRCellsToActivate */
+typedef struct X2N_ServedNRCellsToActivate {
+	A_SEQUENCE_OF(struct X2N_ServedNRCellsToActivate_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCellsToActivate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToActivate;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRCellsToActivate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRCellsToModify-Item.c b/asn1c_defs/X2N_ServedNRCellsToModify-Item.c
new file mode 100644
index 0000000..e30919f
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToModify-Item.c
@@ -0,0 +1,94 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRCellsToModify-Item.h"
+
+#include "X2N_NRNeighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToModify_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToModify_Item, old_nrcgi),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"old-nrcgi"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRCellsToModify_Item, servedNRCellInformation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedNRCellInformation"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_ServedNRCellsToModify_Item, nrNeighbourInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRNeighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrNeighbourInformation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedNRCellsToModify_Item, nrDeactivationIndication),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DeactivationIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nrDeactivationIndication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedNRCellsToModify_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P100,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ServedNRCellsToModify_Item_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ServedNRCellsToModify_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* old-nrcgi */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* servedNRCellInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrNeighbourInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* nrDeactivationIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToModify_Item_specs_1 = {
+	sizeof(struct X2N_ServedNRCellsToModify_Item),
+	offsetof(struct X2N_ServedNRCellsToModify_Item, _asn_ctx),
+	asn_MAP_X2N_ServedNRCellsToModify_Item_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_ServedNRCellsToModify_Item_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToModify_Item = {
+	"ServedNRCellsToModify-Item",
+	"ServedNRCellsToModify-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRCellsToModify_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ServedNRCellsToModify_Item_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_ServedNRCellsToModify_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRCellsToModify-Item.h b/asn1c_defs/X2N_ServedNRCellsToModify-Item.h
new file mode 100644
index 0000000..c865ecd
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRCellsToModify-Item.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRCellsToModify_Item_H_
+#define	_X2N_ServedNRCellsToModify_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRCGI.h"
+#include "X2N_ServedNRCell-Information.h"
+#include "X2N_DeactivationIndication.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRNeighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ServedNRCellsToModify-Item */
+typedef struct X2N_ServedNRCellsToModify_Item {
+	X2N_NRCGI_t	 old_nrcgi;
+	X2N_ServedNRCell_Information_t	 servedNRCellInformation;
+	struct X2N_NRNeighbour_Information	*nrNeighbourInformation;	/* OPTIONAL */
+	X2N_DeactivationIndication_t	*nrDeactivationIndication;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRCellsToModify_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRCellsToModify_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ServedNRCellsToModify_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ServedNRCellsToModify_Item_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRCellsToModify_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.c b/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.c
new file mode 100644
index 0000000..9f3a3a4
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.c
@@ -0,0 +1,115 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRcellsENDCX2ManagementList.h"
+
+#include "X2N_NRNeighbour-Information.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedNRcellsENDCX2ManagementList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ServedNRcellsENDCX2ManagementList__Member, servedNRCellInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ServedNRCell_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"servedNRCellInfo"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_ServedNRcellsENDCX2ManagementList__Member, nRNeighbourInfo),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRNeighbour_Information,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRNeighbourInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ServedNRcellsENDCX2ManagementList__Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P91,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Member_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servedNRCellInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRNeighbourInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Member_specs_2 = {
+	sizeof(struct X2N_ServedNRcellsENDCX2ManagementList__Member),
+	offsetof(struct X2N_ServedNRcellsENDCX2ManagementList__Member, _asn_ctx),
+	asn_MAP_X2N_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Member_tags_2,
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	asn_DEF_X2N_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_Member_tags_2)
+		/sizeof(asn_DEF_X2N_Member_tags_2[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_X2N_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_ServedNRcellsENDCX2ManagementList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_Member_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedNRcellsENDCX2ManagementList_specs_1 = {
+	sizeof(struct X2N_ServedNRcellsENDCX2ManagementList),
+	offsetof(struct X2N_ServedNRcellsENDCX2ManagementList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsENDCX2ManagementList = {
+	"ServedNRcellsENDCX2ManagementList",
+	"ServedNRcellsENDCX2ManagementList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsENDCX2ManagementList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedNRcellsENDCX2ManagementList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedNRcellsENDCX2ManagementList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedNRcellsENDCX2ManagementList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.h b/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.h
new file mode 100644
index 0000000..8736bc1
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsENDCX2ManagementList.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRcellsENDCX2ManagementList_H_
+#define	_X2N_ServedNRcellsENDCX2ManagementList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "X2N_ServedNRCell-Information.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRNeighbour_Information;
+struct X2N_ProtocolExtensionContainer;
+
+/* Forward definitions */
+typedef struct X2N_ServedNRcellsENDCX2ManagementList__Member {
+	X2N_ServedNRCell_Information_t	 servedNRCellInfo;
+	struct X2N_NRNeighbour_Information	*nRNeighbourInfo;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} ServedNRcellsENDCX2ManagementList__Member;
+
+/* X2N_ServedNRcellsENDCX2ManagementList */
+typedef struct X2N_ServedNRcellsENDCX2ManagementList {
+	A_SEQUENCE_OF(ServedNRcellsENDCX2ManagementList__Member) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRcellsENDCX2ManagementList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsENDCX2ManagementList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRcellsENDCX2ManagementList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.c b/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.c
new file mode 100644
index 0000000..3a44ab2
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRcellsToDeleteENDCConfUpdList.h"
+
+#include "X2N_NRCGI.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedNRcellsToDeleteENDCConfUpdList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedNRcellsToDeleteENDCConfUpdList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedNRcellsToDeleteENDCConfUpdList_specs_1 = {
+	sizeof(struct X2N_ServedNRcellsToDeleteENDCConfUpdList),
+	offsetof(struct X2N_ServedNRcellsToDeleteENDCConfUpdList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList = {
+	"ServedNRcellsToDeleteENDCConfUpdList",
+	"ServedNRcellsToDeleteENDCConfUpdList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedNRcellsToDeleteENDCConfUpdList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedNRcellsToDeleteENDCConfUpdList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedNRcellsToDeleteENDCConfUpdList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.h b/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.h
new file mode 100644
index 0000000..488517a
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsToDeleteENDCConfUpdList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRcellsToDeleteENDCConfUpdList_H_
+#define	_X2N_ServedNRcellsToDeleteENDCConfUpdList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRCGI;
+
+/* X2N_ServedNRcellsToDeleteENDCConfUpdList */
+typedef struct X2N_ServedNRcellsToDeleteENDCConfUpdList {
+	A_SEQUENCE_OF(struct X2N_NRCGI) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRcellsToDeleteENDCConfUpdList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsToDeleteENDCConfUpdList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRcellsToDeleteENDCConfUpdList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.c b/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.c
new file mode 100644
index 0000000..ccbb7a1
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServedNRcellsToModifyENDCConfUpdList.h"
+
+#include "X2N_ServedNRCellsToModify-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_ServedNRcellsToModifyENDCConfUpdList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 14,  14,  1,  16384 }	/* (SIZE(1..16384)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_ServedNRcellsToModifyENDCConfUpdList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ServedNRCellsToModify_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_ServedNRcellsToModifyENDCConfUpdList_specs_1 = {
+	sizeof(struct X2N_ServedNRcellsToModifyENDCConfUpdList),
+	offsetof(struct X2N_ServedNRcellsToModifyENDCConfUpdList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList = {
+	"ServedNRcellsToModifyENDCConfUpdList",
+	"ServedNRcellsToModifyENDCConfUpdList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1,
+	sizeof(asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1)
+		/sizeof(asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServedNRcellsToModifyENDCConfUpdList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_ServedNRcellsToModifyENDCConfUpdList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_ServedNRcellsToModifyENDCConfUpdList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.h b/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.h
new file mode 100644
index 0000000..e073963
--- /dev/null
+++ b/asn1c_defs/X2N_ServedNRcellsToModifyENDCConfUpdList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServedNRcellsToModifyENDCConfUpdList_H_
+#define	_X2N_ServedNRcellsToModifyENDCConfUpdList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ServedNRCellsToModify_Item;
+
+/* X2N_ServedNRcellsToModifyENDCConfUpdList */
+typedef struct X2N_ServedNRcellsToModifyENDCConfUpdList {
+	A_SEQUENCE_OF(struct X2N_ServedNRCellsToModify_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ServedNRcellsToModifyENDCConfUpdList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServedNRcellsToModifyENDCConfUpdList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServedNRcellsToModifyENDCConfUpdList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ServiceType.c b/asn1c_defs/X2N_ServiceType.c
new file mode 100644
index 0000000..bd20cfa
--- /dev/null
+++ b/asn1c_defs/X2N_ServiceType.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ServiceType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ServiceType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_ServiceType_value2enum_1[] = {
+	{ 0,	25,	"qMC-for-streaming-service" },
+	{ 1,	20,	"qMC-for-MTSI-service" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_ServiceType_enum2value_1[] = {
+	1,	/* qMC-for-MTSI-service(1) */
+	0	/* qMC-for-streaming-service(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_ServiceType_specs_1 = {
+	asn_MAP_X2N_ServiceType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_ServiceType_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ServiceType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ServiceType = {
+	"ServiceType",
+	"ServiceType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_ServiceType_tags_1,
+	sizeof(asn_DEF_X2N_ServiceType_tags_1)
+		/sizeof(asn_DEF_X2N_ServiceType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ServiceType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ServiceType_tags_1)
+		/sizeof(asn_DEF_X2N_ServiceType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ServiceType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_ServiceType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ServiceType.h b/asn1c_defs/X2N_ServiceType.h
new file mode 100644
index 0000000..c4b62d7
--- /dev/null
+++ b/asn1c_defs/X2N_ServiceType.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ServiceType_H_
+#define	_X2N_ServiceType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ServiceType {
+	X2N_ServiceType_qMC_for_streaming_service	= 0,
+	X2N_ServiceType_qMC_for_MTSI_service	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_ServiceType;
+
+/* X2N_ServiceType */
+typedef long	 X2N_ServiceType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ServiceType;
+asn_struct_free_f X2N_ServiceType_free;
+asn_struct_print_f X2N_ServiceType_print;
+asn_constr_check_f X2N_ServiceType_constraint;
+ber_type_decoder_f X2N_ServiceType_decode_ber;
+der_type_encoder_f X2N_ServiceType_encode_der;
+xer_type_decoder_f X2N_ServiceType_decode_xer;
+xer_type_encoder_f X2N_ServiceType_encode_xer;
+per_type_decoder_f X2N_ServiceType_decode_uper;
+per_type_encoder_f X2N_ServiceType_encode_uper;
+per_type_decoder_f X2N_ServiceType_decode_aper;
+per_type_encoder_f X2N_ServiceType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ServiceType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNB-UE-X2AP-ID.c b/asn1c_defs/X2N_SgNB-UE-X2AP-ID.c
new file mode 100644
index 0000000..e001cda
--- /dev/null
+++ b/asn1c_defs/X2N_SgNB-UE-X2AP-ID.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNB-UE-X2AP-ID.h"
+
+int
+X2N_SgNB_UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SgNB_UE_X2AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SgNB_UE_X2AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNB_UE_X2AP_ID = {
+	"SgNB-UE-X2AP-ID",
+	"SgNB-UE-X2AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1,
+	sizeof(asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_SgNB_UE_X2AP_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SgNB_UE_X2AP_ID_constr_1, X2N_SgNB_UE_X2AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_SgNB_UE_X2AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNB-UE-X2AP-ID.h b/asn1c_defs/X2N_SgNB-UE-X2AP-ID.h
new file mode 100644
index 0000000..befb9e0
--- /dev/null
+++ b/asn1c_defs/X2N_SgNB-UE-X2AP-ID.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNB_UE_X2AP_ID_H_
+#define	_X2N_SgNB_UE_X2AP_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNB-UE-X2AP-ID */
+typedef unsigned long	 X2N_SgNB_UE_X2AP_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SgNB_UE_X2AP_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNB_UE_X2AP_ID;
+extern const asn_INTEGER_specifics_t asn_SPC_SgNB_UE_X2AP_ID_specs_1;
+asn_struct_free_f SgNB_UE_X2AP_ID_free;
+asn_struct_print_f SgNB_UE_X2AP_ID_print;
+asn_constr_check_f SgNB_UE_X2AP_ID_constraint;
+ber_type_decoder_f SgNB_UE_X2AP_ID_decode_ber;
+der_type_encoder_f SgNB_UE_X2AP_ID_encode_der;
+xer_type_decoder_f SgNB_UE_X2AP_ID_decode_xer;
+xer_type_encoder_f SgNB_UE_X2AP_ID_encode_xer;
+per_type_decoder_f SgNB_UE_X2AP_ID_decode_uper;
+per_type_encoder_f SgNB_UE_X2AP_ID_encode_uper;
+per_type_decoder_f SgNB_UE_X2AP_ID_decode_aper;
+per_type_encoder_f SgNB_UE_X2AP_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNB_UE_X2AP_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBActivityNotification.c b/asn1c_defs/X2N_SgNBActivityNotification.c
new file mode 100644
index 0000000..29b993b
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBActivityNotification.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBActivityNotification.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBActivityNotification_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBActivityNotification, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P88,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBActivityNotification_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBActivityNotification_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBActivityNotification_specs_1 = {
+	sizeof(struct X2N_SgNBActivityNotification),
+	offsetof(struct X2N_SgNBActivityNotification, _asn_ctx),
+	asn_MAP_X2N_SgNBActivityNotification_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBActivityNotification = {
+	"SgNBActivityNotification",
+	"SgNBActivityNotification",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBActivityNotification_tags_1,
+	sizeof(asn_DEF_X2N_SgNBActivityNotification_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBActivityNotification_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBActivityNotification_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBActivityNotification_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBActivityNotification_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBActivityNotification_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBActivityNotification_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBActivityNotification.h b/asn1c_defs/X2N_SgNBActivityNotification.h
new file mode 100644
index 0000000..0e3d064
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBActivityNotification.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBActivityNotification_H_
+#define	_X2N_SgNBActivityNotification_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBActivityNotification */
+typedef struct X2N_SgNBActivityNotification {
+	X2N_ProtocolIE_Container_8180P88_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBActivityNotification_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBActivityNotification;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBActivityNotification_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBActivityNotification_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBActivityNotification_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBAdditionRequest.c b/asn1c_defs/X2N_SgNBAdditionRequest.c
new file mode 100644
index 0000000..44565e9
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBAdditionRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P50,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequest_specs_1 = {
+	sizeof(struct X2N_SgNBAdditionRequest),
+	offsetof(struct X2N_SgNBAdditionRequest, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequest = {
+	"SgNBAdditionRequest",
+	"SgNBAdditionRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequest_tags_1,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBAdditionRequest.h b/asn1c_defs/X2N_SgNBAdditionRequest.h
new file mode 100644
index 0000000..9ec5ca1
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBAdditionRequest_H_
+#define	_X2N_SgNBAdditionRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBAdditionRequest */
+typedef struct X2N_SgNBAdditionRequest {
+	X2N_ProtocolIE_Container_8180P50_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBAdditionRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.c b/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.c
new file mode 100644
index 0000000..40c7750
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBAdditionRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P51,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_SgNBAdditionRequestAcknowledge),
+	offsetof(struct X2N_SgNBAdditionRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge = {
+	"SgNBAdditionRequestAcknowledge",
+	"SgNBAdditionRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.h b/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.h
new file mode 100644
index 0000000..d84aa5b
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBAdditionRequestAcknowledge_H_
+#define	_X2N_SgNBAdditionRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBAdditionRequestAcknowledge */
+typedef struct X2N_SgNBAdditionRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P51_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBAdditionRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBAdditionRequestReject.c b/asn1c_defs/X2N_SgNBAdditionRequestReject.c
new file mode 100644
index 0000000..a42a9e0
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequestReject.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBAdditionRequestReject.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestReject_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBAdditionRequestReject, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P52,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBAdditionRequestReject_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBAdditionRequestReject_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestReject_specs_1 = {
+	sizeof(struct X2N_SgNBAdditionRequestReject),
+	offsetof(struct X2N_SgNBAdditionRequestReject, _asn_ctx),
+	asn_MAP_X2N_SgNBAdditionRequestReject_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestReject = {
+	"SgNBAdditionRequestReject",
+	"SgNBAdditionRequestReject",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBAdditionRequestReject_tags_1,
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBAdditionRequestReject_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBAdditionRequestReject_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBAdditionRequestReject_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBAdditionRequestReject_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBAdditionRequestReject.h b/asn1c_defs/X2N_SgNBAdditionRequestReject.h
new file mode 100644
index 0000000..154ea65
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBAdditionRequestReject.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBAdditionRequestReject_H_
+#define	_X2N_SgNBAdditionRequestReject_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBAdditionRequestReject */
+typedef struct X2N_SgNBAdditionRequestReject {
+	X2N_ProtocolIE_Container_8180P52_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBAdditionRequestReject_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBAdditionRequestReject;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBAdditionRequestReject_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBAdditionRequestReject_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBAdditionRequestReject_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBChangeConfirm.c b/asn1c_defs/X2N_SgNBChangeConfirm.c
new file mode 100644
index 0000000..3aacfdf
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBChangeConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P67,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeConfirm_specs_1 = {
+	sizeof(struct X2N_SgNBChangeConfirm),
+	offsetof(struct X2N_SgNBChangeConfirm, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeConfirm = {
+	"SgNBChangeConfirm",
+	"SgNBChangeConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeConfirm_tags_1,
+	sizeof(asn_DEF_X2N_SgNBChangeConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBChangeConfirm.h b/asn1c_defs/X2N_SgNBChangeConfirm.h
new file mode 100644
index 0000000..d99d8ec
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBChangeConfirm_H_
+#define	_X2N_SgNBChangeConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBChangeConfirm */
+typedef struct X2N_SgNBChangeConfirm {
+	X2N_ProtocolIE_Container_8180P67_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBChangeConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBChangeRefuse.c b/asn1c_defs/X2N_SgNBChangeRefuse.c
new file mode 100644
index 0000000..11fe927
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeRefuse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBChangeRefuse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRefuse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRefuse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P69,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeRefuse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeRefuse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRefuse_specs_1 = {
+	sizeof(struct X2N_SgNBChangeRefuse),
+	offsetof(struct X2N_SgNBChangeRefuse, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeRefuse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRefuse = {
+	"SgNBChangeRefuse",
+	"SgNBChangeRefuse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeRefuse_tags_1,
+	sizeof(asn_DEF_X2N_SgNBChangeRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeRefuse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeRefuse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeRefuse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeRefuse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeRefuse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBChangeRefuse.h b/asn1c_defs/X2N_SgNBChangeRefuse.h
new file mode 100644
index 0000000..1819773
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeRefuse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBChangeRefuse_H_
+#define	_X2N_SgNBChangeRefuse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBChangeRefuse */
+typedef struct X2N_SgNBChangeRefuse {
+	X2N_ProtocolIE_Container_8180P69_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeRefuse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRefuse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRefuse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRefuse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBChangeRefuse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBChangeRequired.c b/asn1c_defs/X2N_SgNBChangeRequired.c
new file mode 100644
index 0000000..e451d81
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBChangeRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBChangeRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P66,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBChangeRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBChangeRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRequired_specs_1 = {
+	sizeof(struct X2N_SgNBChangeRequired),
+	offsetof(struct X2N_SgNBChangeRequired, _asn_ctx),
+	asn_MAP_X2N_SgNBChangeRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRequired = {
+	"SgNBChangeRequired",
+	"SgNBChangeRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBChangeRequired_tags_1,
+	sizeof(asn_DEF_X2N_SgNBChangeRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBChangeRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBChangeRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBChangeRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBChangeRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBChangeRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBChangeRequired.h b/asn1c_defs/X2N_SgNBChangeRequired.h
new file mode 100644
index 0000000..1a423ba
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBChangeRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBChangeRequired_H_
+#define	_X2N_SgNBChangeRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBChangeRequired */
+typedef struct X2N_SgNBChangeRequired {
+	X2N_ProtocolIE_Container_8180P66_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBChangeRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBChangeRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBChangeRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBChangeRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBChangeRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.c b/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.c
new file mode 100644
index 0000000..8105c05
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBCoordinationAssistanceInformation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SgNBCoordinationAssistanceInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SgNBCoordinationAssistanceInformation_value2enum_1[] = {
+	{ 0,	25,	"coordination-not-required" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SgNBCoordinationAssistanceInformation_enum2value_1[] = {
+	0	/* coordination-not-required(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SgNBCoordinationAssistanceInformation_specs_1 = {
+	asn_MAP_X2N_SgNBCoordinationAssistanceInformation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SgNBCoordinationAssistanceInformation_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCoordinationAssistanceInformation = {
+	"SgNBCoordinationAssistanceInformation",
+	"SgNBCoordinationAssistanceInformation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1,
+	sizeof(asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBCoordinationAssistanceInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SgNBCoordinationAssistanceInformation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SgNBCoordinationAssistanceInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.h b/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.h
new file mode 100644
index 0000000..96cc951
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBCoordinationAssistanceInformation.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBCoordinationAssistanceInformation_H_
+#define	_X2N_SgNBCoordinationAssistanceInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SgNBCoordinationAssistanceInformation {
+	X2N_SgNBCoordinationAssistanceInformation_coordination_not_required	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SgNBCoordinationAssistanceInformation;
+
+/* X2N_SgNBCoordinationAssistanceInformation */
+typedef long	 X2N_SgNBCoordinationAssistanceInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCoordinationAssistanceInformation;
+asn_struct_free_f X2N_SgNBCoordinationAssistanceInformation_free;
+asn_struct_print_f X2N_SgNBCoordinationAssistanceInformation_print;
+asn_constr_check_f X2N_SgNBCoordinationAssistanceInformation_constraint;
+ber_type_decoder_f X2N_SgNBCoordinationAssistanceInformation_decode_ber;
+der_type_encoder_f X2N_SgNBCoordinationAssistanceInformation_encode_der;
+xer_type_decoder_f X2N_SgNBCoordinationAssistanceInformation_decode_xer;
+xer_type_encoder_f X2N_SgNBCoordinationAssistanceInformation_encode_xer;
+per_type_decoder_f X2N_SgNBCoordinationAssistanceInformation_decode_uper;
+per_type_encoder_f X2N_SgNBCoordinationAssistanceInformation_encode_uper;
+per_type_decoder_f X2N_SgNBCoordinationAssistanceInformation_decode_aper;
+per_type_encoder_f X2N_SgNBCoordinationAssistanceInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBCoordinationAssistanceInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBCounterCheckRequest.c b/asn1c_defs/X2N_SgNBCounterCheckRequest.c
new file mode 100644
index 0000000..2b5501a
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBCounterCheckRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBCounterCheckRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBCounterCheckRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBCounterCheckRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P65,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBCounterCheckRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBCounterCheckRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBCounterCheckRequest_specs_1 = {
+	sizeof(struct X2N_SgNBCounterCheckRequest),
+	offsetof(struct X2N_SgNBCounterCheckRequest, _asn_ctx),
+	asn_MAP_X2N_SgNBCounterCheckRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCounterCheckRequest = {
+	"SgNBCounterCheckRequest",
+	"SgNBCounterCheckRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBCounterCheckRequest_tags_1,
+	sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBCounterCheckRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBCounterCheckRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBCounterCheckRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBCounterCheckRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBCounterCheckRequest.h b/asn1c_defs/X2N_SgNBCounterCheckRequest.h
new file mode 100644
index 0000000..1623e11
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBCounterCheckRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBCounterCheckRequest_H_
+#define	_X2N_SgNBCounterCheckRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBCounterCheckRequest */
+typedef struct X2N_SgNBCounterCheckRequest {
+	X2N_ProtocolIE_Container_8180P65_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBCounterCheckRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBCounterCheckRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBCounterCheckRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBCounterCheckRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBCounterCheckRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationConfirm.c b/asn1c_defs/X2N_SgNBModificationConfirm.c
new file mode 100644
index 0000000..770f92a
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P58,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationConfirm_specs_1 = {
+	sizeof(struct X2N_SgNBModificationConfirm),
+	offsetof(struct X2N_SgNBModificationConfirm, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationConfirm = {
+	"SgNBModificationConfirm",
+	"SgNBModificationConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationConfirm_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationConfirm.h b/asn1c_defs/X2N_SgNBModificationConfirm.h
new file mode 100644
index 0000000..e8951d1
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationConfirm_H_
+#define	_X2N_SgNBModificationConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationConfirm */
+typedef struct X2N_SgNBModificationConfirm {
+	X2N_ProtocolIE_Container_8180P58_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationRefuse.c b/asn1c_defs/X2N_SgNBModificationRefuse.c
new file mode 100644
index 0000000..d832b5f
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRefuse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationRefuse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRefuse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRefuse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P59,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRefuse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRefuse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRefuse_specs_1 = {
+	sizeof(struct X2N_SgNBModificationRefuse),
+	offsetof(struct X2N_SgNBModificationRefuse, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRefuse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRefuse = {
+	"SgNBModificationRefuse",
+	"SgNBModificationRefuse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRefuse_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRefuse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRefuse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRefuse_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRefuse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRefuse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRefuse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationRefuse.h b/asn1c_defs/X2N_SgNBModificationRefuse.h
new file mode 100644
index 0000000..5bb3e31
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRefuse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationRefuse_H_
+#define	_X2N_SgNBModificationRefuse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationRefuse */
+typedef struct X2N_SgNBModificationRefuse {
+	X2N_ProtocolIE_Container_8180P59_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRefuse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRefuse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRefuse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRefuse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationRefuse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationRequest.c b/asn1c_defs/X2N_SgNBModificationRequest.c
new file mode 100644
index 0000000..ebf17e0
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P54,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequest_specs_1 = {
+	sizeof(struct X2N_SgNBModificationRequest),
+	offsetof(struct X2N_SgNBModificationRequest, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequest = {
+	"SgNBModificationRequest",
+	"SgNBModificationRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequest_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationRequest.h b/asn1c_defs/X2N_SgNBModificationRequest.h
new file mode 100644
index 0000000..17f5728
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationRequest_H_
+#define	_X2N_SgNBModificationRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationRequest */
+typedef struct X2N_SgNBModificationRequest {
+	X2N_ProtocolIE_Container_8180P54_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.c b/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.c
new file mode 100644
index 0000000..22b800b
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P55,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_SgNBModificationRequestAcknowledge),
+	offsetof(struct X2N_SgNBModificationRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestAcknowledge = {
+	"SgNBModificationRequestAcknowledge",
+	"SgNBModificationRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.h b/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.h
new file mode 100644
index 0000000..e922038
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationRequestAcknowledge_H_
+#define	_X2N_SgNBModificationRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationRequestAcknowledge */
+typedef struct X2N_SgNBModificationRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P55_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationRequestReject.c b/asn1c_defs/X2N_SgNBModificationRequestReject.c
new file mode 100644
index 0000000..fd54bff
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequestReject.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationRequestReject.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestReject_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequestReject, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P56,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequestReject_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequestReject_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestReject_specs_1 = {
+	sizeof(struct X2N_SgNBModificationRequestReject),
+	offsetof(struct X2N_SgNBModificationRequestReject, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequestReject_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestReject = {
+	"SgNBModificationRequestReject",
+	"SgNBModificationRequestReject",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequestReject_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestReject_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequestReject_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequestReject_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequestReject_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequestReject_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationRequestReject.h b/asn1c_defs/X2N_SgNBModificationRequestReject.h
new file mode 100644
index 0000000..3de3cad
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequestReject.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationRequestReject_H_
+#define	_X2N_SgNBModificationRequestReject_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationRequestReject */
+typedef struct X2N_SgNBModificationRequestReject {
+	X2N_ProtocolIE_Container_8180P56_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequestReject_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequestReject;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequestReject_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequestReject_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationRequestReject_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBModificationRequired.c b/asn1c_defs/X2N_SgNBModificationRequired.c
new file mode 100644
index 0000000..a03909e
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBModificationRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBModificationRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P57,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBModificationRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBModificationRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequired_specs_1 = {
+	sizeof(struct X2N_SgNBModificationRequired),
+	offsetof(struct X2N_SgNBModificationRequired, _asn_ctx),
+	asn_MAP_X2N_SgNBModificationRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequired = {
+	"SgNBModificationRequired",
+	"SgNBModificationRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBModificationRequired_tags_1,
+	sizeof(asn_DEF_X2N_SgNBModificationRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBModificationRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBModificationRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBModificationRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBModificationRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBModificationRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBModificationRequired.h b/asn1c_defs/X2N_SgNBModificationRequired.h
new file mode 100644
index 0000000..fef7617
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBModificationRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBModificationRequired_H_
+#define	_X2N_SgNBModificationRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBModificationRequired */
+typedef struct X2N_SgNBModificationRequired {
+	X2N_ProtocolIE_Container_8180P57_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBModificationRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBModificationRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBModificationRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBModificationRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBModificationRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReconfigurationComplete.c b/asn1c_defs/X2N_SgNBReconfigurationComplete.c
new file mode 100644
index 0000000..6b665b1
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReconfigurationComplete.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReconfigurationComplete.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReconfigurationComplete_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReconfigurationComplete, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P53,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReconfigurationComplete_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReconfigurationComplete_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReconfigurationComplete_specs_1 = {
+	sizeof(struct X2N_SgNBReconfigurationComplete),
+	offsetof(struct X2N_SgNBReconfigurationComplete, _asn_ctx),
+	asn_MAP_X2N_SgNBReconfigurationComplete_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReconfigurationComplete = {
+	"SgNBReconfigurationComplete",
+	"SgNBReconfigurationComplete",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReconfigurationComplete_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReconfigurationComplete_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReconfigurationComplete_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReconfigurationComplete_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReconfigurationComplete_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReconfigurationComplete.h b/asn1c_defs/X2N_SgNBReconfigurationComplete.h
new file mode 100644
index 0000000..1ff4026
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReconfigurationComplete.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReconfigurationComplete_H_
+#define	_X2N_SgNBReconfigurationComplete_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReconfigurationComplete */
+typedef struct X2N_SgNBReconfigurationComplete {
+	X2N_ProtocolIE_Container_8180P53_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReconfigurationComplete_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReconfigurationComplete;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReconfigurationComplete_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReconfigurationComplete_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReconfigurationComplete_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReleaseConfirm.c b/asn1c_defs/X2N_SgNBReleaseConfirm.c
new file mode 100644
index 0000000..25132ec
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseConfirm.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReleaseConfirm.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseConfirm_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseConfirm, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P64,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseConfirm_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseConfirm_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseConfirm_specs_1 = {
+	sizeof(struct X2N_SgNBReleaseConfirm),
+	offsetof(struct X2N_SgNBReleaseConfirm, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseConfirm_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseConfirm = {
+	"SgNBReleaseConfirm",
+	"SgNBReleaseConfirm",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseConfirm_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReleaseConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseConfirm_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseConfirm_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseConfirm_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseConfirm_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseConfirm_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseConfirm_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReleaseConfirm.h b/asn1c_defs/X2N_SgNBReleaseConfirm.h
new file mode 100644
index 0000000..ee78392
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseConfirm.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReleaseConfirm_H_
+#define	_X2N_SgNBReleaseConfirm_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReleaseConfirm */
+typedef struct X2N_SgNBReleaseConfirm {
+	X2N_ProtocolIE_Container_8180P64_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseConfirm_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseConfirm;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseConfirm_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseConfirm_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReleaseConfirm_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReleaseRequest.c b/asn1c_defs/X2N_SgNBReleaseRequest.c
new file mode 100644
index 0000000..623339e
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReleaseRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P60,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequest_specs_1 = {
+	sizeof(struct X2N_SgNBReleaseRequest),
+	offsetof(struct X2N_SgNBReleaseRequest, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequest = {
+	"SgNBReleaseRequest",
+	"SgNBReleaseRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequest_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequest_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReleaseRequest.h b/asn1c_defs/X2N_SgNBReleaseRequest.h
new file mode 100644
index 0000000..e6edc67
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReleaseRequest_H_
+#define	_X2N_SgNBReleaseRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReleaseRequest */
+typedef struct X2N_SgNBReleaseRequest {
+	X2N_ProtocolIE_Container_8180P60_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReleaseRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.c b/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.c
new file mode 100644
index 0000000..ea6896a
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReleaseRequestAcknowledge.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestAcknowledge_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestAcknowledge, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P61,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequestAcknowledge_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestAcknowledge_specs_1 = {
+	sizeof(struct X2N_SgNBReleaseRequestAcknowledge),
+	offsetof(struct X2N_SgNBReleaseRequestAcknowledge, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequestAcknowledge_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge = {
+	"SgNBReleaseRequestAcknowledge",
+	"SgNBReleaseRequestAcknowledge",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestAcknowledge_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequestAcknowledge_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequestAcknowledge_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.h b/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.h
new file mode 100644
index 0000000..191b963
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequestAcknowledge.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReleaseRequestAcknowledge_H_
+#define	_X2N_SgNBReleaseRequestAcknowledge_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReleaseRequestAcknowledge */
+typedef struct X2N_SgNBReleaseRequestAcknowledge {
+	X2N_ProtocolIE_Container_8180P61_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequestAcknowledge_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestAcknowledge;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestAcknowledge_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestAcknowledge_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReleaseRequestAcknowledge_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReleaseRequestReject.c b/asn1c_defs/X2N_SgNBReleaseRequestReject.c
new file mode 100644
index 0000000..1d3646e
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequestReject.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReleaseRequestReject.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestReject_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequestReject, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P62,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequestReject_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequestReject_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestReject_specs_1 = {
+	sizeof(struct X2N_SgNBReleaseRequestReject),
+	offsetof(struct X2N_SgNBReleaseRequestReject, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequestReject_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestReject = {
+	"SgNBReleaseRequestReject",
+	"SgNBReleaseRequestReject",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequestReject_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequestReject_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequestReject_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequestReject_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequestReject_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReleaseRequestReject.h b/asn1c_defs/X2N_SgNBReleaseRequestReject.h
new file mode 100644
index 0000000..b1b46f4
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequestReject.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReleaseRequestReject_H_
+#define	_X2N_SgNBReleaseRequestReject_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReleaseRequestReject */
+typedef struct X2N_SgNBReleaseRequestReject {
+	X2N_ProtocolIE_Container_8180P62_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequestReject_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequestReject;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequestReject_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequestReject_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReleaseRequestReject_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBReleaseRequired.c b/asn1c_defs/X2N_SgNBReleaseRequired.c
new file mode 100644
index 0000000..4452862
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequired.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBReleaseRequired.h"
+
+asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequired_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBReleaseRequired, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P63,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBReleaseRequired_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBReleaseRequired_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequired_specs_1 = {
+	sizeof(struct X2N_SgNBReleaseRequired),
+	offsetof(struct X2N_SgNBReleaseRequired, _asn_ctx),
+	asn_MAP_X2N_SgNBReleaseRequired_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequired = {
+	"SgNBReleaseRequired",
+	"SgNBReleaseRequired",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBReleaseRequired_tags_1,
+	sizeof(asn_DEF_X2N_SgNBReleaseRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequired_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBReleaseRequired_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBReleaseRequired_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBReleaseRequired_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBReleaseRequired_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_SgNBReleaseRequired_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBReleaseRequired.h b/asn1c_defs/X2N_SgNBReleaseRequired.h
new file mode 100644
index 0000000..0a8428b
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBReleaseRequired.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBReleaseRequired_H_
+#define	_X2N_SgNBReleaseRequired_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBReleaseRequired */
+typedef struct X2N_SgNBReleaseRequired {
+	X2N_ProtocolIE_Container_8180P63_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBReleaseRequired_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBReleaseRequired;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBReleaseRequired_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SgNBReleaseRequired_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBReleaseRequired_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBResourceCoordinationInformation.c b/asn1c_defs/X2N_SgNBResourceCoordinationInformation.c
new file mode 100644
index 0000000..45dceed
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBResourceCoordinationInformation.c
@@ -0,0 +1,155 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBResourceCoordinationInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_uLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 4400)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_dLCoordinationInformation_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 4400)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_uLCoordinationInformation_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  13,  13,  6,  4400 }	/* (SIZE(6..4400,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_dLCoordinationInformation_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  13,  13,  6,  4400 }	/* (SIZE(6..4400,...)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_SgNBResourceCoordinationInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformation, nR_CGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRCGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-CGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SgNBResourceCoordinationInformation, uLCoordinationInformation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_uLCoordinationInformation_constr_3,  memb_X2N_uLCoordinationInformation_constraint_1 },
+		0, 0, /* No default value */
+		"uLCoordinationInformation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_SgNBResourceCoordinationInformation, dLCoordinationInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_dLCoordinationInformation_constr_4,  memb_X2N_dLCoordinationInformation_constraint_1 },
+		0, 0, /* No default value */
+		"dLCoordinationInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SgNBResourceCoordinationInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P193,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SgNBResourceCoordinationInformation_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SgNBResourceCoordinationInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR-CGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uLCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dLCoordinationInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_SgNBResourceCoordinationInformation_specs_1 = {
+	sizeof(struct X2N_SgNBResourceCoordinationInformation),
+	offsetof(struct X2N_SgNBResourceCoordinationInformation, _asn_ctx),
+	asn_MAP_X2N_SgNBResourceCoordinationInformation_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_SgNBResourceCoordinationInformation_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBResourceCoordinationInformation = {
+	"SgNBResourceCoordinationInformation",
+	"SgNBResourceCoordinationInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1,
+	sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBResourceCoordinationInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SgNBResourceCoordinationInformation_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_SgNBResourceCoordinationInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBResourceCoordinationInformation.h b/asn1c_defs/X2N_SgNBResourceCoordinationInformation.h
new file mode 100644
index 0000000..6370c7c
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBResourceCoordinationInformation.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBResourceCoordinationInformation_H_
+#define	_X2N_SgNBResourceCoordinationInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRCGI.h"
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SgNBResourceCoordinationInformation */
+typedef struct X2N_SgNBResourceCoordinationInformation {
+	X2N_NRCGI_t	 nR_CGI;
+	BIT_STRING_t	 uLCoordinationInformation;
+	BIT_STRING_t	*dLCoordinationInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SgNBResourceCoordinationInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBResourceCoordinationInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBResourceCoordinationInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBSecurityKey.c b/asn1c_defs/X2N_SgNBSecurityKey.c
new file mode 100644
index 0000000..632194c
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBSecurityKey.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBSecurityKey.h"
+
+int
+X2N_SgNBSecurityKey_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SgNBSecurityKey_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  256,  256 }	/* (SIZE(256..256)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBSecurityKey_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBSecurityKey = {
+	"SgNBSecurityKey",
+	"SgNBSecurityKey",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_SgNBSecurityKey_tags_1,
+	sizeof(asn_DEF_X2N_SgNBSecurityKey_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBSecurityKey_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBSecurityKey_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBSecurityKey_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBSecurityKey_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SgNBSecurityKey_constr_1, X2N_SgNBSecurityKey_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBSecurityKey.h b/asn1c_defs/X2N_SgNBSecurityKey.h
new file mode 100644
index 0000000..e12546b
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBSecurityKey.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBSecurityKey_H_
+#define	_X2N_SgNBSecurityKey_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBSecurityKey */
+typedef BIT_STRING_t	 X2N_SgNBSecurityKey_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SgNBSecurityKey_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBSecurityKey;
+asn_struct_free_f X2N_SgNBSecurityKey_free;
+asn_struct_print_f X2N_SgNBSecurityKey_print;
+asn_constr_check_f X2N_SgNBSecurityKey_constraint;
+ber_type_decoder_f X2N_SgNBSecurityKey_decode_ber;
+der_type_encoder_f X2N_SgNBSecurityKey_encode_der;
+xer_type_decoder_f X2N_SgNBSecurityKey_decode_xer;
+xer_type_encoder_f X2N_SgNBSecurityKey_encode_xer;
+per_type_decoder_f X2N_SgNBSecurityKey_decode_uper;
+per_type_encoder_f X2N_SgNBSecurityKey_encode_uper;
+per_type_decoder_f X2N_SgNBSecurityKey_decode_aper;
+per_type_encoder_f X2N_SgNBSecurityKey_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBSecurityKey_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SgNBtoMeNBContainer.c b/asn1c_defs/X2N_SgNBtoMeNBContainer.c
new file mode 100644
index 0000000..8b1ffb4
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBtoMeNBContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SgNBtoMeNBContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_SgNBtoMeNBContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SgNBtoMeNBContainer = {
+	"SgNBtoMeNBContainer",
+	"SgNBtoMeNBContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_SgNBtoMeNBContainer_tags_1,
+	sizeof(asn_DEF_X2N_SgNBtoMeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBtoMeNBContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SgNBtoMeNBContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SgNBtoMeNBContainer_tags_1)
+		/sizeof(asn_DEF_X2N_SgNBtoMeNBContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SgNBtoMeNBContainer.h b/asn1c_defs/X2N_SgNBtoMeNBContainer.h
new file mode 100644
index 0000000..c1b5e89
--- /dev/null
+++ b/asn1c_defs/X2N_SgNBtoMeNBContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SgNBtoMeNBContainer_H_
+#define	_X2N_SgNBtoMeNBContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SgNBtoMeNBContainer */
+typedef OCTET_STRING_t	 X2N_SgNBtoMeNBContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SgNBtoMeNBContainer;
+asn_struct_free_f X2N_SgNBtoMeNBContainer_free;
+asn_struct_print_f X2N_SgNBtoMeNBContainer_print;
+asn_constr_check_f X2N_SgNBtoMeNBContainer_constraint;
+ber_type_decoder_f X2N_SgNBtoMeNBContainer_decode_ber;
+der_type_encoder_f X2N_SgNBtoMeNBContainer_encode_der;
+xer_type_decoder_f X2N_SgNBtoMeNBContainer_decode_xer;
+xer_type_encoder_f X2N_SgNBtoMeNBContainer_encode_xer;
+per_type_decoder_f X2N_SgNBtoMeNBContainer_decode_uper;
+per_type_encoder_f X2N_SgNBtoMeNBContainer_encode_uper;
+per_type_decoder_f X2N_SgNBtoMeNBContainer_decode_aper;
+per_type_encoder_f X2N_SgNBtoMeNBContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SgNBtoMeNBContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SharedResourceType.c b/asn1c_defs/X2N_SharedResourceType.c
new file mode 100644
index 0000000..c4824ec
--- /dev/null
+++ b/asn1c_defs/X2N_SharedResourceType.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SharedResourceType.h"
+
+#include "X2N_ULOnlySharing.h"
+#include "X2N_ULandDLSharing.h"
+asn_per_constraints_t asn_PER_type_X2N_SharedResourceType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SharedResourceType_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_SharedResourceType, choice.uLOnlySharing),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULOnlySharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLOnlySharing"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_SharedResourceType, choice.uLandDLSharing),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULandDLSharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLandDLSharing"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SharedResourceType_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLOnlySharing */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* uLandDLSharing */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_SharedResourceType_specs_1 = {
+	sizeof(struct X2N_SharedResourceType),
+	offsetof(struct X2N_SharedResourceType, _asn_ctx),
+	offsetof(struct X2N_SharedResourceType, present),
+	sizeof(((struct X2N_SharedResourceType *)0)->present),
+	asn_MAP_X2N_SharedResourceType_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SharedResourceType = {
+	"SharedResourceType",
+	"SharedResourceType",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_SharedResourceType_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_SharedResourceType_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_SharedResourceType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SharedResourceType.h b/asn1c_defs/X2N_SharedResourceType.h
new file mode 100644
index 0000000..07ccee6
--- /dev/null
+++ b/asn1c_defs/X2N_SharedResourceType.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SharedResourceType_H_
+#define	_X2N_SharedResourceType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SharedResourceType_PR {
+	X2N_SharedResourceType_PR_NOTHING,	/* No components present */
+	X2N_SharedResourceType_PR_uLOnlySharing,
+	X2N_SharedResourceType_PR_uLandDLSharing
+	/* Extensions may appear below */
+	
+} X2N_SharedResourceType_PR;
+
+/* Forward declarations */
+struct X2N_ULOnlySharing;
+struct X2N_ULandDLSharing;
+
+/* X2N_SharedResourceType */
+typedef struct X2N_SharedResourceType {
+	X2N_SharedResourceType_PR present;
+	union X2N_SharedResourceType_u {
+		struct X2N_ULOnlySharing	*uLOnlySharing;
+		struct X2N_ULandDLSharing	*uLandDLSharing;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SharedResourceType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SharedResourceType;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_SharedResourceType_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SharedResourceType_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_SharedResourceType_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SharedResourceType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ShortMAC-I.c b/asn1c_defs/X2N_ShortMAC-I.c
new file mode 100644
index 0000000..d8bcc43
--- /dev/null
+++ b/asn1c_defs/X2N_ShortMAC-I.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ShortMAC-I.h"
+
+int
+X2N_ShortMAC_I_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_ShortMAC_I_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  16,  16 }	/* (SIZE(16..16)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ShortMAC_I_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ShortMAC_I = {
+	"ShortMAC-I",
+	"ShortMAC-I",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ShortMAC_I_tags_1,
+	sizeof(asn_DEF_X2N_ShortMAC_I_tags_1)
+		/sizeof(asn_DEF_X2N_ShortMAC_I_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ShortMAC_I_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ShortMAC_I_tags_1)
+		/sizeof(asn_DEF_X2N_ShortMAC_I_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ShortMAC_I_constr_1, X2N_ShortMAC_I_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ShortMAC-I.h b/asn1c_defs/X2N_ShortMAC-I.h
new file mode 100644
index 0000000..36e9b1d
--- /dev/null
+++ b/asn1c_defs/X2N_ShortMAC-I.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ShortMAC_I_H_
+#define	_X2N_ShortMAC_I_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ShortMAC-I */
+typedef BIT_STRING_t	 X2N_ShortMAC_I_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ShortMAC_I;
+asn_struct_free_f X2N_ShortMAC_I_free;
+asn_struct_print_f X2N_ShortMAC_I_print;
+asn_constr_check_f X2N_ShortMAC_I_constraint;
+ber_type_decoder_f X2N_ShortMAC_I_decode_ber;
+der_type_encoder_f X2N_ShortMAC_I_encode_der;
+xer_type_decoder_f X2N_ShortMAC_I_decode_xer;
+xer_type_encoder_f X2N_ShortMAC_I_encode_xer;
+per_type_decoder_f X2N_ShortMAC_I_decode_uper;
+per_type_encoder_f X2N_ShortMAC_I_encode_uper;
+per_type_decoder_f X2N_ShortMAC_I_decode_aper;
+per_type_encoder_f X2N_ShortMAC_I_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ShortMAC_I_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.c b/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.c
new file mode 100644
index 0000000..276b36c
--- /dev/null
+++ b/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SourceOfUEActivityBehaviourInformation.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SourceOfUEActivityBehaviourInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SourceOfUEActivityBehaviourInformation_value2enum_1[] = {
+	{ 0,	24,	"subscription-information" },
+	{ 1,	10,	"statistics" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SourceOfUEActivityBehaviourInformation_enum2value_1[] = {
+	1,	/* statistics(1) */
+	0	/* subscription-information(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SourceOfUEActivityBehaviourInformation_specs_1 = {
+	asn_MAP_X2N_SourceOfUEActivityBehaviourInformation_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SourceOfUEActivityBehaviourInformation_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SourceOfUEActivityBehaviourInformation = {
+	"SourceOfUEActivityBehaviourInformation",
+	"SourceOfUEActivityBehaviourInformation",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1,
+	sizeof(asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1)
+		/sizeof(asn_DEF_X2N_SourceOfUEActivityBehaviourInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SourceOfUEActivityBehaviourInformation_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SourceOfUEActivityBehaviourInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.h b/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.h
new file mode 100644
index 0000000..b64e048
--- /dev/null
+++ b/asn1c_defs/X2N_SourceOfUEActivityBehaviourInformation.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SourceOfUEActivityBehaviourInformation_H_
+#define	_X2N_SourceOfUEActivityBehaviourInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SourceOfUEActivityBehaviourInformation {
+	X2N_SourceOfUEActivityBehaviourInformation_subscription_information	= 0,
+	X2N_SourceOfUEActivityBehaviourInformation_statistics	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SourceOfUEActivityBehaviourInformation;
+
+/* X2N_SourceOfUEActivityBehaviourInformation */
+typedef long	 X2N_SourceOfUEActivityBehaviourInformation_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SourceOfUEActivityBehaviourInformation_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SourceOfUEActivityBehaviourInformation;
+extern const asn_INTEGER_specifics_t asn_SPC_SourceOfUEActivityBehaviourInformation_specs_1;
+asn_struct_free_f SourceOfUEActivityBehaviourInformation_free;
+asn_struct_print_f SourceOfUEActivityBehaviourInformation_print;
+asn_constr_check_f SourceOfUEActivityBehaviourInformation_constraint;
+ber_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_ber;
+der_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_der;
+xer_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_xer;
+xer_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_xer;
+per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_uper;
+per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_uper;
+per_type_decoder_f SourceOfUEActivityBehaviourInformation_decode_aper;
+per_type_encoder_f SourceOfUEActivityBehaviourInformation_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SourceOfUEActivityBehaviourInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SpecialSubframe-Info.c b/asn1c_defs/X2N_SpecialSubframe-Info.c
new file mode 100644
index 0000000..5ae9781
--- /dev/null
+++ b/asn1c_defs/X2N_SpecialSubframe-Info.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SpecialSubframe-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_SpecialSubframe_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info, specialSubframePatterns),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SpecialSubframePatterns,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"specialSubframePatterns"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info, cyclicPrefixDL),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixDL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixDL"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SpecialSubframe_Info, cyclicPrefixUL),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_CyclicPrefixUL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"cyclicPrefixUL"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SpecialSubframe_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P194,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SpecialSubframe_Info_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_SpecialSubframe_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SpecialSubframe_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* specialSubframePatterns */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cyclicPrefixDL */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cyclicPrefixUL */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SpecialSubframe_Info_specs_1 = {
+	sizeof(struct X2N_SpecialSubframe_Info),
+	offsetof(struct X2N_SpecialSubframe_Info, _asn_ctx),
+	asn_MAP_X2N_SpecialSubframe_Info_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_SpecialSubframe_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframe_Info = {
+	"SpecialSubframe-Info",
+	"SpecialSubframe-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SpecialSubframe_Info_tags_1,
+	sizeof(asn_DEF_X2N_SpecialSubframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_SpecialSubframe_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SpecialSubframe_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SpecialSubframe_Info_tags_1)
+		/sizeof(asn_DEF_X2N_SpecialSubframe_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SpecialSubframe_Info_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_SpecialSubframe_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SpecialSubframe-Info.h b/asn1c_defs/X2N_SpecialSubframe-Info.h
new file mode 100644
index 0000000..fc9082d
--- /dev/null
+++ b/asn1c_defs/X2N_SpecialSubframe-Info.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SpecialSubframe_Info_H_
+#define	_X2N_SpecialSubframe_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SpecialSubframePatterns.h"
+#include "X2N_CyclicPrefixDL.h"
+#include "X2N_CyclicPrefixUL.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SpecialSubframe-Info */
+typedef struct X2N_SpecialSubframe_Info {
+	X2N_SpecialSubframePatterns_t	 specialSubframePatterns;
+	X2N_CyclicPrefixDL_t	 cyclicPrefixDL;
+	X2N_CyclicPrefixUL_t	 cyclicPrefixUL;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SpecialSubframe_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframe_Info;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SpecialSubframe_Info_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SpecialSubframe_Info_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SpecialSubframe_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SpecialSubframePatterns.c b/asn1c_defs/X2N_SpecialSubframePatterns.c
new file mode 100644
index 0000000..599c37e
--- /dev/null
+++ b/asn1c_defs/X2N_SpecialSubframePatterns.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SpecialSubframePatterns.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SpecialSubframePatterns_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  8 }	/* (0..8,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SpecialSubframePatterns_value2enum_1[] = {
+	{ 0,	4,	"ssp0" },
+	{ 1,	4,	"ssp1" },
+	{ 2,	4,	"ssp2" },
+	{ 3,	4,	"ssp3" },
+	{ 4,	4,	"ssp4" },
+	{ 5,	4,	"ssp5" },
+	{ 6,	4,	"ssp6" },
+	{ 7,	4,	"ssp7" },
+	{ 8,	4,	"ssp8" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SpecialSubframePatterns_enum2value_1[] = {
+	0,	/* ssp0(0) */
+	1,	/* ssp1(1) */
+	2,	/* ssp2(2) */
+	3,	/* ssp3(3) */
+	4,	/* ssp4(4) */
+	5,	/* ssp5(5) */
+	6,	/* ssp6(6) */
+	7,	/* ssp7(7) */
+	8	/* ssp8(8) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SpecialSubframePatterns_specs_1 = {
+	asn_MAP_X2N_SpecialSubframePatterns_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SpecialSubframePatterns_enum2value_1,	/* N => "tag"; sorted by N */
+	9,	/* Number of elements in the maps */
+	10,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SpecialSubframePatterns_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframePatterns = {
+	"SpecialSubframePatterns",
+	"SpecialSubframePatterns",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SpecialSubframePatterns_tags_1,
+	sizeof(asn_DEF_X2N_SpecialSubframePatterns_tags_1)
+		/sizeof(asn_DEF_X2N_SpecialSubframePatterns_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SpecialSubframePatterns_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SpecialSubframePatterns_tags_1)
+		/sizeof(asn_DEF_X2N_SpecialSubframePatterns_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SpecialSubframePatterns_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SpecialSubframePatterns_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SpecialSubframePatterns.h b/asn1c_defs/X2N_SpecialSubframePatterns.h
new file mode 100644
index 0000000..c268df6
--- /dev/null
+++ b/asn1c_defs/X2N_SpecialSubframePatterns.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SpecialSubframePatterns_H_
+#define	_X2N_SpecialSubframePatterns_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SpecialSubframePatterns {
+	X2N_SpecialSubframePatterns_ssp0	= 0,
+	X2N_SpecialSubframePatterns_ssp1	= 1,
+	X2N_SpecialSubframePatterns_ssp2	= 2,
+	X2N_SpecialSubframePatterns_ssp3	= 3,
+	X2N_SpecialSubframePatterns_ssp4	= 4,
+	X2N_SpecialSubframePatterns_ssp5	= 5,
+	X2N_SpecialSubframePatterns_ssp6	= 6,
+	X2N_SpecialSubframePatterns_ssp7	= 7,
+	X2N_SpecialSubframePatterns_ssp8	= 8
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SpecialSubframePatterns;
+
+/* X2N_SpecialSubframePatterns */
+typedef long	 X2N_SpecialSubframePatterns_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SpecialSubframePatterns_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SpecialSubframePatterns;
+extern const asn_INTEGER_specifics_t asn_SPC_SpecialSubframePatterns_specs_1;
+asn_struct_free_f SpecialSubframePatterns_free;
+asn_struct_print_f SpecialSubframePatterns_print;
+asn_constr_check_f SpecialSubframePatterns_constraint;
+ber_type_decoder_f SpecialSubframePatterns_decode_ber;
+der_type_encoder_f SpecialSubframePatterns_encode_der;
+xer_type_decoder_f SpecialSubframePatterns_decode_xer;
+xer_type_encoder_f SpecialSubframePatterns_encode_xer;
+per_type_decoder_f SpecialSubframePatterns_decode_uper;
+per_type_encoder_f SpecialSubframePatterns_encode_uper;
+per_type_decoder_f SpecialSubframePatterns_decode_aper;
+per_type_encoder_f SpecialSubframePatterns_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SpecialSubframePatterns_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SpectrumSharingGroupID.c b/asn1c_defs/X2N_SpectrumSharingGroupID.c
new file mode 100644
index 0000000..8384403
--- /dev/null
+++ b/asn1c_defs/X2N_SpectrumSharingGroupID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SpectrumSharingGroupID.h"
+
+int
+X2N_SpectrumSharingGroupID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SpectrumSharingGroupID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (1..256) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SpectrumSharingGroupID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SpectrumSharingGroupID = {
+	"SpectrumSharingGroupID",
+	"SpectrumSharingGroupID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_SpectrumSharingGroupID_tags_1,
+	sizeof(asn_DEF_X2N_SpectrumSharingGroupID_tags_1)
+		/sizeof(asn_DEF_X2N_SpectrumSharingGroupID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SpectrumSharingGroupID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SpectrumSharingGroupID_tags_1)
+		/sizeof(asn_DEF_X2N_SpectrumSharingGroupID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SpectrumSharingGroupID_constr_1, X2N_SpectrumSharingGroupID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_SpectrumSharingGroupID.h b/asn1c_defs/X2N_SpectrumSharingGroupID.h
new file mode 100644
index 0000000..0be2a62
--- /dev/null
+++ b/asn1c_defs/X2N_SpectrumSharingGroupID.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SpectrumSharingGroupID_H_
+#define	_X2N_SpectrumSharingGroupID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SpectrumSharingGroupID */
+typedef long	 X2N_SpectrumSharingGroupID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SpectrumSharingGroupID;
+asn_struct_free_f X2N_SpectrumSharingGroupID_free;
+asn_struct_print_f X2N_SpectrumSharingGroupID_print;
+asn_constr_check_f X2N_SpectrumSharingGroupID_constraint;
+ber_type_decoder_f X2N_SpectrumSharingGroupID_decode_ber;
+der_type_encoder_f X2N_SpectrumSharingGroupID_encode_der;
+xer_type_decoder_f X2N_SpectrumSharingGroupID_decode_xer;
+xer_type_encoder_f X2N_SpectrumSharingGroupID_encode_xer;
+per_type_decoder_f X2N_SpectrumSharingGroupID_decode_uper;
+per_type_encoder_f X2N_SpectrumSharingGroupID_encode_uper;
+per_type_decoder_f X2N_SpectrumSharingGroupID_decode_aper;
+per_type_encoder_f X2N_SpectrumSharingGroupID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SpectrumSharingGroupID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SplitSRB.c b/asn1c_defs/X2N_SplitSRB.c
new file mode 100644
index 0000000..9813c7d
--- /dev/null
+++ b/asn1c_defs/X2N_SplitSRB.c
@@ -0,0 +1,84 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SplitSRB.h"
+
+#include "X2N_DeliveryStatus.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_SplitSRB_1[] = {
+	{ ATF_POINTER, 1, offsetof(struct X2N_SplitSRB, rrcContainer),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RRCContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rrcContainer"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SplitSRB, srbType),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SRBType,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"srbType"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_SplitSRB, deliveryStatus),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DeliveryStatus,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"deliveryStatus"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SplitSRB, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P170,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SplitSRB_oms_1[] = { 0, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_SplitSRB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SplitSRB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcContainer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srbType */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deliveryStatus */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_SplitSRB_specs_1 = {
+	sizeof(struct X2N_SplitSRB),
+	offsetof(struct X2N_SplitSRB, _asn_ctx),
+	asn_MAP_X2N_SplitSRB_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_SplitSRB_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRB = {
+	"SplitSRB",
+	"SplitSRB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SplitSRB_tags_1,
+	sizeof(asn_DEF_X2N_SplitSRB_tags_1)
+		/sizeof(asn_DEF_X2N_SplitSRB_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SplitSRB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SplitSRB_tags_1)
+		/sizeof(asn_DEF_X2N_SplitSRB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SplitSRB_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_SplitSRB_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SplitSRB.h b/asn1c_defs/X2N_SplitSRB.h
new file mode 100644
index 0000000..28055d8
--- /dev/null
+++ b/asn1c_defs/X2N_SplitSRB.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SplitSRB_H_
+#define	_X2N_SplitSRB_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_RRCContainer.h"
+#include "X2N_SRBType.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_DeliveryStatus;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SplitSRB */
+typedef struct X2N_SplitSRB {
+	X2N_RRCContainer_t	*rrcContainer;	/* OPTIONAL */
+	X2N_SRBType_t	 srbType;
+	struct X2N_DeliveryStatus	*deliveryStatus;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SplitSRB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRB;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SplitSRB_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SplitSRBs.c b/asn1c_defs/X2N_SplitSRBs.c
new file mode 100644
index 0000000..1f5b08e
--- /dev/null
+++ b/asn1c_defs/X2N_SplitSRBs.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SplitSRBs.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_SplitSRBs_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SplitSRBs_value2enum_1[] = {
+	{ 0,	4,	"srb1" },
+	{ 1,	4,	"srb2" },
+	{ 2,	8,	"srb1and2" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SplitSRBs_enum2value_1[] = {
+	0,	/* srb1(0) */
+	2,	/* srb1and2(2) */
+	1	/* srb2(1) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_SplitSRBs_specs_1 = {
+	asn_MAP_X2N_SplitSRBs_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SplitSRBs_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SplitSRBs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRBs = {
+	"SplitSRBs",
+	"SplitSRBs",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SplitSRBs_tags_1,
+	sizeof(asn_DEF_X2N_SplitSRBs_tags_1)
+		/sizeof(asn_DEF_X2N_SplitSRBs_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SplitSRBs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SplitSRBs_tags_1)
+		/sizeof(asn_DEF_X2N_SplitSRBs_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SplitSRBs_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SplitSRBs_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SplitSRBs.h b/asn1c_defs/X2N_SplitSRBs.h
new file mode 100644
index 0000000..4696661
--- /dev/null
+++ b/asn1c_defs/X2N_SplitSRBs.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SplitSRBs_H_
+#define	_X2N_SplitSRBs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SplitSRBs {
+	X2N_SplitSRBs_srb1	= 0,
+	X2N_SplitSRBs_srb2	= 1,
+	X2N_SplitSRBs_srb1and2	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SplitSRBs;
+
+/* X2N_SplitSRBs */
+typedef long	 X2N_SplitSRBs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SplitSRBs;
+asn_struct_free_f X2N_SplitSRBs_free;
+asn_struct_print_f X2N_SplitSRBs_print;
+asn_constr_check_f X2N_SplitSRBs_constraint;
+ber_type_decoder_f X2N_SplitSRBs_decode_ber;
+der_type_encoder_f X2N_SplitSRBs_encode_der;
+xer_type_decoder_f X2N_SplitSRBs_decode_xer;
+xer_type_encoder_f X2N_SplitSRBs_encode_xer;
+per_type_decoder_f X2N_SplitSRBs_decode_uper;
+per_type_encoder_f X2N_SplitSRBs_encode_uper;
+per_type_decoder_f X2N_SplitSRBs_decode_aper;
+per_type_encoder_f X2N_SplitSRBs_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SplitSRBs_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandCQI.c b/asn1c_defs/X2N_SubbandCQI.c
new file mode 100644
index 0000000..030de4d
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQI.c
@@ -0,0 +1,74 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandCQI.h"
+
+#include "X2N_SubbandCQICodeword1.h"
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQI, subbandCQICodeword0),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_SubbandCQICodeword0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subbandCQICodeword0"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_SubbandCQI, subbandCQICodeword1),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_SubbandCQICodeword1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subbandCQICodeword1"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SubbandCQI, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P195,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SubbandCQI_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandCQI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subbandCQICodeword0 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* subbandCQICodeword1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQI_specs_1 = {
+	sizeof(struct X2N_SubbandCQI),
+	offsetof(struct X2N_SubbandCQI, _asn_ctx),
+	asn_MAP_X2N_SubbandCQI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_SubbandCQI_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQI = {
+	"SubbandCQI",
+	"SubbandCQI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SubbandCQI_tags_1,
+	sizeof(asn_DEF_X2N_SubbandCQI_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubbandCQI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandCQI_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SubbandCQI_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandCQI.h b/asn1c_defs/X2N_SubbandCQI.h
new file mode 100644
index 0000000..f972aaa
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQI.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandCQI_H_
+#define	_X2N_SubbandCQI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SubbandCQICodeword0.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_SubbandCQICodeword1;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SubbandCQI */
+typedef struct X2N_SubbandCQI {
+	X2N_SubbandCQICodeword0_t	 subbandCQICodeword0;
+	struct X2N_SubbandCQICodeword1	*subbandCQICodeword1;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQI;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQI_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQI_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandCQI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandCQICodeword0.c b/asn1c_defs/X2N_SubbandCQICodeword0.c
new file mode 100644
index 0000000..a12897b
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQICodeword0.c
@@ -0,0 +1,162 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandCQICodeword0.h"
+
+static int
+memb_X2N_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_two_bitSubbandDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_two_bitDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_four_bitCQI_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_two_bitSubbandDifferentialCQI_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_two_bitDifferentialCQI_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_SubbandCQICodeword0_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQICodeword0_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword0, choice.four_bitCQI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_four_bitCQI_constr_2,  memb_X2N_four_bitCQI_constraint_1 },
+		0, 0, /* No default value */
+		"four-bitCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword0, choice.two_bitSubbandDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_two_bitSubbandDifferentialCQI_constr_3,  memb_X2N_two_bitSubbandDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"two-bitSubbandDifferentialCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword0, choice.two_bitDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_two_bitDifferentialCQI_constr_4,  memb_X2N_two_bitDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"two-bitDifferentialCQI"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQICodeword0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* two-bitSubbandDifferentialCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* two-bitDifferentialCQI */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_SubbandCQICodeword0_specs_1 = {
+	sizeof(struct X2N_SubbandCQICodeword0),
+	offsetof(struct X2N_SubbandCQICodeword0, _asn_ctx),
+	offsetof(struct X2N_SubbandCQICodeword0, present),
+	sizeof(((struct X2N_SubbandCQICodeword0 *)0)->present),
+	asn_MAP_X2N_SubbandCQICodeword0_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQICodeword0 = {
+	"SubbandCQICodeword0",
+	"SubbandCQICodeword0",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_SubbandCQICodeword0_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_SubbandCQICodeword0_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQICodeword0_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandCQICodeword0.h b/asn1c_defs/X2N_SubbandCQICodeword0.h
new file mode 100644
index 0000000..702171c
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQICodeword0.h
@@ -0,0 +1,60 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandCQICodeword0_H_
+#define	_X2N_SubbandCQICodeword0_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubbandCQICodeword0_PR {
+	X2N_SubbandCQICodeword0_PR_NOTHING,	/* No components present */
+	X2N_SubbandCQICodeword0_PR_four_bitCQI,
+	X2N_SubbandCQICodeword0_PR_two_bitSubbandDifferentialCQI,
+	X2N_SubbandCQICodeword0_PR_two_bitDifferentialCQI
+	/* Extensions may appear below */
+	
+} X2N_SubbandCQICodeword0_PR;
+
+/* X2N_SubbandCQICodeword0 */
+typedef struct X2N_SubbandCQICodeword0 {
+	X2N_SubbandCQICodeword0_PR present;
+	union X2N_SubbandCQICodeword0_u {
+		long	 four_bitCQI;
+		long	 two_bitSubbandDifferentialCQI;
+		long	 two_bitDifferentialCQI;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQICodeword0_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQICodeword0;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_SubbandCQICodeword0_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQICodeword0_1[3];
+extern asn_per_constraints_t asn_PER_type_X2N_SubbandCQICodeword0_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandCQICodeword0_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandCQICodeword1.c b/asn1c_defs/X2N_SubbandCQICodeword1.c
new file mode 100644
index 0000000..5d5c048
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQICodeword1.c
@@ -0,0 +1,202 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandCQICodeword1.h"
+
+static int
+memb_X2N_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_three_bitSpatialDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_two_bitSubbandDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_two_bitDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_four_bitCQI_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_three_bitSpatialDifferentialCQI_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  7 }	/* (0..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_two_bitSubbandDifferentialCQI_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_two_bitDifferentialCQI_constr_5 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_SubbandCQICodeword1_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  3 }	/* (0..3,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQICodeword1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword1, choice.four_bitCQI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_four_bitCQI_constr_2,  memb_X2N_four_bitCQI_constraint_1 },
+		0, 0, /* No default value */
+		"four-bitCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword1, choice.three_bitSpatialDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_three_bitSpatialDifferentialCQI_constr_3,  memb_X2N_three_bitSpatialDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"three-bitSpatialDifferentialCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword1, choice.two_bitSubbandDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_two_bitSubbandDifferentialCQI_constr_4,  memb_X2N_two_bitSubbandDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"two-bitSubbandDifferentialCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQICodeword1, choice.two_bitDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_two_bitDifferentialCQI_constr_5,  memb_X2N_two_bitDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"two-bitDifferentialCQI"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQICodeword1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* three-bitSpatialDifferentialCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* two-bitSubbandDifferentialCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* two-bitDifferentialCQI */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_SubbandCQICodeword1_specs_1 = {
+	sizeof(struct X2N_SubbandCQICodeword1),
+	offsetof(struct X2N_SubbandCQICodeword1, _asn_ctx),
+	offsetof(struct X2N_SubbandCQICodeword1, present),
+	sizeof(((struct X2N_SubbandCQICodeword1 *)0)->present),
+	asn_MAP_X2N_SubbandCQICodeword1_tag2el_1,
+	4,	/* Count of tags in the map */
+	0, 0,
+	4	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQICodeword1 = {
+	"SubbandCQICodeword1",
+	"SubbandCQICodeword1",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_SubbandCQICodeword1_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_SubbandCQICodeword1_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQICodeword1_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandCQICodeword1.h b/asn1c_defs/X2N_SubbandCQICodeword1.h
new file mode 100644
index 0000000..47be2c6
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQICodeword1.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandCQICodeword1_H_
+#define	_X2N_SubbandCQICodeword1_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubbandCQICodeword1_PR {
+	X2N_SubbandCQICodeword1_PR_NOTHING,	/* No components present */
+	X2N_SubbandCQICodeword1_PR_four_bitCQI,
+	X2N_SubbandCQICodeword1_PR_three_bitSpatialDifferentialCQI,
+	X2N_SubbandCQICodeword1_PR_two_bitSubbandDifferentialCQI,
+	X2N_SubbandCQICodeword1_PR_two_bitDifferentialCQI
+	/* Extensions may appear below */
+	
+} X2N_SubbandCQICodeword1_PR;
+
+/* X2N_SubbandCQICodeword1 */
+typedef struct X2N_SubbandCQICodeword1 {
+	X2N_SubbandCQICodeword1_PR present;
+	union X2N_SubbandCQICodeword1_u {
+		long	 four_bitCQI;
+		long	 three_bitSpatialDifferentialCQI;
+		long	 two_bitSubbandDifferentialCQI;
+		long	 two_bitDifferentialCQI;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQICodeword1_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQICodeword1;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_SubbandCQICodeword1_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQICodeword1_1[4];
+extern asn_per_constraints_t asn_PER_type_X2N_SubbandCQICodeword1_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandCQICodeword1_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandCQIItem.c b/asn1c_defs/X2N_SubbandCQIItem.c
new file mode 100644
index 0000000..aba6819
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQIItem.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandCQIItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_subbandIndex_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 27)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_subbandIndex_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  5,  5,  0,  27 }	/* (0..27,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQIItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQIItem, subbandCQI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubbandCQI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subbandCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubbandCQIItem, subbandIndex),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_subbandIndex_constr_3,  memb_X2N_subbandIndex_constraint_1 },
+		0, 0, /* No default value */
+		"subbandIndex"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SubbandCQIItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P198,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SubbandCQIItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandCQIItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubbandCQIItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subbandCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* subbandIndex */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQIItem_specs_1 = {
+	sizeof(struct X2N_SubbandCQIItem),
+	offsetof(struct X2N_SubbandCQIItem, _asn_ctx),
+	asn_MAP_X2N_SubbandCQIItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_SubbandCQIItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIItem = {
+	"SubbandCQIItem",
+	"SubbandCQIItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SubbandCQIItem_tags_1,
+	sizeof(asn_DEF_X2N_SubbandCQIItem_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQIItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubbandCQIItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandCQIItem_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQIItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SubbandCQIItem_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SubbandCQIItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandCQIItem.h b/asn1c_defs/X2N_SubbandCQIItem.h
new file mode 100644
index 0000000..b13bd1a
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQIItem.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandCQIItem_H_
+#define	_X2N_SubbandCQIItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SubbandCQI.h"
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SubbandCQIItem */
+typedef struct X2N_SubbandCQIItem {
+	X2N_SubbandCQI_t	 subbandCQI;
+	long	 subbandIndex;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQIItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SubbandCQIItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQIItem_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandCQIItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandCQIList.c b/asn1c_defs/X2N_SubbandCQIList.c
new file mode 100644
index 0000000..66eccf0
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQIList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandCQIList.h"
+
+#include "X2N_SubbandCQIItem.h"
+asn_per_constraints_t asn_PER_type_X2N_SubbandCQIList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  14 }	/* (SIZE(1..14)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SubbandCQIList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SubbandCQIItem,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandCQIList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_SubbandCQIList_specs_1 = {
+	sizeof(struct X2N_SubbandCQIList),
+	offsetof(struct X2N_SubbandCQIList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIList = {
+	"SubbandCQIList",
+	"SubbandCQIList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_SubbandCQIList_tags_1,
+	sizeof(asn_DEF_X2N_SubbandCQIList_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQIList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubbandCQIList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandCQIList_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandCQIList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SubbandCQIList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_SubbandCQIList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_SubbandCQIList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandCQIList.h b/asn1c_defs/X2N_SubbandCQIList.h
new file mode 100644
index 0000000..44f929a
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandCQIList.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandCQIList_H_
+#define	_X2N_SubbandCQIList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_SubbandCQIItem;
+
+/* X2N_SubbandCQIList */
+typedef struct X2N_SubbandCQIList {
+	A_SEQUENCE_OF(struct X2N_SubbandCQIItem) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubbandCQIList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandCQIList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_SubbandCQIList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubbandCQIList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_SubbandCQIList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandCQIList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubbandSize.c b/asn1c_defs/X2N_SubbandSize.c
new file mode 100644
index 0000000..2688981
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandSize.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubbandSize.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SubbandSize_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  4 }	/* (0..4,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SubbandSize_value2enum_1[] = {
+	{ 0,	5,	"size2" },
+	{ 1,	5,	"size3" },
+	{ 2,	5,	"size4" },
+	{ 3,	5,	"size6" },
+	{ 4,	5,	"size8" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SubbandSize_enum2value_1[] = {
+	0,	/* size2(0) */
+	1,	/* size3(1) */
+	2,	/* size4(2) */
+	3,	/* size6(3) */
+	4	/* size8(4) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SubbandSize_specs_1 = {
+	asn_MAP_X2N_SubbandSize_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SubbandSize_enum2value_1,	/* N => "tag"; sorted by N */
+	5,	/* Number of elements in the maps */
+	6,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubbandSize_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubbandSize = {
+	"SubbandSize",
+	"SubbandSize",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SubbandSize_tags_1,
+	sizeof(asn_DEF_X2N_SubbandSize_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandSize_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubbandSize_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubbandSize_tags_1)
+		/sizeof(asn_DEF_X2N_SubbandSize_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SubbandSize_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SubbandSize_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubbandSize.h b/asn1c_defs/X2N_SubbandSize.h
new file mode 100644
index 0000000..aab3610
--- /dev/null
+++ b/asn1c_defs/X2N_SubbandSize.h
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubbandSize_H_
+#define	_X2N_SubbandSize_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubbandSize {
+	X2N_SubbandSize_size2	= 0,
+	X2N_SubbandSize_size3	= 1,
+	X2N_SubbandSize_size4	= 2,
+	X2N_SubbandSize_size6	= 3,
+	X2N_SubbandSize_size8	= 4
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SubbandSize;
+
+/* X2N_SubbandSize */
+typedef long	 X2N_SubbandSize_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SubbandSize_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubbandSize;
+extern const asn_INTEGER_specifics_t asn_SPC_SubbandSize_specs_1;
+asn_struct_free_f SubbandSize_free;
+asn_struct_print_f SubbandSize_print;
+asn_constr_check_f SubbandSize_constraint;
+ber_type_decoder_f SubbandSize_decode_ber;
+der_type_encoder_f SubbandSize_encode_der;
+xer_type_decoder_f SubbandSize_decode_xer;
+xer_type_encoder_f SubbandSize_encode_xer;
+per_type_decoder_f SubbandSize_decode_uper;
+per_type_encoder_f SubbandSize_encode_uper;
+per_type_decoder_f SubbandSize_decode_aper;
+per_type_encoder_f SubbandSize_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubbandSize_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubframeAllocation.c b/asn1c_defs/X2N_SubframeAllocation.c
new file mode 100644
index 0000000..8b83703
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeAllocation.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubframeAllocation.h"
+
+asn_per_constraints_t asn_PER_type_X2N_SubframeAllocation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SubframeAllocation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubframeAllocation, choice.oneframe),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Oneframe,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"oneframe"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SubframeAllocation, choice.fourframes),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Fourframes,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fourframes"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SubframeAllocation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oneframe */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fourframes */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_SubframeAllocation_specs_1 = {
+	sizeof(struct X2N_SubframeAllocation),
+	offsetof(struct X2N_SubframeAllocation, _asn_ctx),
+	offsetof(struct X2N_SubframeAllocation, present),
+	sizeof(((struct X2N_SubframeAllocation *)0)->present),
+	asn_MAP_X2N_SubframeAllocation_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubframeAllocation = {
+	"SubframeAllocation",
+	"SubframeAllocation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_SubframeAllocation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_SubframeAllocation_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_SubframeAllocation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubframeAllocation.h b/asn1c_defs/X2N_SubframeAllocation.h
new file mode 100644
index 0000000..67930d6
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeAllocation.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubframeAllocation_H_
+#define	_X2N_SubframeAllocation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_Oneframe.h"
+#include "X2N_Fourframes.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubframeAllocation_PR {
+	X2N_SubframeAllocation_PR_NOTHING,	/* No components present */
+	X2N_SubframeAllocation_PR_oneframe,
+	X2N_SubframeAllocation_PR_fourframes
+	/* Extensions may appear below */
+	
+} X2N_SubframeAllocation_PR;
+
+/* X2N_SubframeAllocation */
+typedef struct X2N_SubframeAllocation {
+	X2N_SubframeAllocation_PR present;
+	union X2N_SubframeAllocation_u {
+		X2N_Oneframe_t	 oneframe;
+		X2N_Fourframes_t	 fourframes;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SubframeAllocation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubframeAllocation;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_SubframeAllocation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SubframeAllocation_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_SubframeAllocation_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubframeAllocation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubframeAssignment.c b/asn1c_defs/X2N_SubframeAssignment.c
new file mode 100644
index 0000000..9c52b00
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeAssignment.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubframeAssignment.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SubframeAssignment_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  6 }	/* (0..6,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SubframeAssignment_value2enum_1[] = {
+	{ 0,	3,	"sa0" },
+	{ 1,	3,	"sa1" },
+	{ 2,	3,	"sa2" },
+	{ 3,	3,	"sa3" },
+	{ 4,	3,	"sa4" },
+	{ 5,	3,	"sa5" },
+	{ 6,	3,	"sa6" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SubframeAssignment_enum2value_1[] = {
+	0,	/* sa0(0) */
+	1,	/* sa1(1) */
+	2,	/* sa2(2) */
+	3,	/* sa3(3) */
+	4,	/* sa4(4) */
+	5,	/* sa5(5) */
+	6	/* sa6(6) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SubframeAssignment_specs_1 = {
+	asn_MAP_X2N_SubframeAssignment_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SubframeAssignment_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	8,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubframeAssignment_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubframeAssignment = {
+	"SubframeAssignment",
+	"SubframeAssignment",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SubframeAssignment_tags_1,
+	sizeof(asn_DEF_X2N_SubframeAssignment_tags_1)
+		/sizeof(asn_DEF_X2N_SubframeAssignment_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubframeAssignment_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubframeAssignment_tags_1)
+		/sizeof(asn_DEF_X2N_SubframeAssignment_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SubframeAssignment_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SubframeAssignment_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubframeAssignment.h b/asn1c_defs/X2N_SubframeAssignment.h
new file mode 100644
index 0000000..5eb360a
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeAssignment.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubframeAssignment_H_
+#define	_X2N_SubframeAssignment_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubframeAssignment {
+	X2N_SubframeAssignment_sa0	= 0,
+	X2N_SubframeAssignment_sa1	= 1,
+	X2N_SubframeAssignment_sa2	= 2,
+	X2N_SubframeAssignment_sa3	= 3,
+	X2N_SubframeAssignment_sa4	= 4,
+	X2N_SubframeAssignment_sa5	= 5,
+	X2N_SubframeAssignment_sa6	= 6
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SubframeAssignment;
+
+/* X2N_SubframeAssignment */
+typedef long	 X2N_SubframeAssignment_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SubframeAssignment_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubframeAssignment;
+extern const asn_INTEGER_specifics_t asn_SPC_SubframeAssignment_specs_1;
+asn_struct_free_f SubframeAssignment_free;
+asn_struct_print_f SubframeAssignment_print;
+asn_constr_check_f SubframeAssignment_constraint;
+ber_type_decoder_f SubframeAssignment_decode_ber;
+der_type_encoder_f SubframeAssignment_encode_der;
+xer_type_decoder_f SubframeAssignment_decode_xer;
+xer_type_encoder_f SubframeAssignment_encode_xer;
+per_type_decoder_f SubframeAssignment_decode_uper;
+per_type_encoder_f SubframeAssignment_encode_uper;
+per_type_decoder_f SubframeAssignment_decode_aper;
+per_type_encoder_f SubframeAssignment_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubframeAssignment_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubframeType.c b/asn1c_defs/X2N_SubframeType.c
new file mode 100644
index 0000000..b5e0e08
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeType.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubframeType.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SubframeType_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_SubframeType_value2enum_1[] = {
+	{ 0,	5,	"mbsfn" },
+	{ 1,	8,	"nonmbsfn" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_SubframeType_enum2value_1[] = {
+	0,	/* mbsfn(0) */
+	1	/* nonmbsfn(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_SubframeType_specs_1 = {
+	asn_MAP_X2N_SubframeType_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_SubframeType_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubframeType_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubframeType = {
+	"SubframeType",
+	"SubframeType",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_SubframeType_tags_1,
+	sizeof(asn_DEF_X2N_SubframeType_tags_1)
+		/sizeof(asn_DEF_X2N_SubframeType_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubframeType_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubframeType_tags_1)
+		/sizeof(asn_DEF_X2N_SubframeType_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SubframeType_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_SubframeType_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SubframeType.h b/asn1c_defs/X2N_SubframeType.h
new file mode 100644
index 0000000..7ceb467
--- /dev/null
+++ b/asn1c_defs/X2N_SubframeType.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubframeType_H_
+#define	_X2N_SubframeType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SubframeType {
+	X2N_SubframeType_mbsfn	= 0,
+	X2N_SubframeType_nonmbsfn	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_SubframeType;
+
+/* X2N_SubframeType */
+typedef long	 X2N_SubframeType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SubframeType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubframeType;
+extern const asn_INTEGER_specifics_t asn_SPC_SubframeType_specs_1;
+asn_struct_free_f SubframeType_free;
+asn_struct_print_f SubframeType_print;
+asn_constr_check_f SubframeType_constraint;
+ber_type_decoder_f SubframeType_decode_ber;
+der_type_encoder_f SubframeType_encode_der;
+xer_type_decoder_f SubframeType_decode_xer;
+xer_type_encoder_f SubframeType_encode_xer;
+per_type_decoder_f SubframeType_decode_uper;
+per_type_encoder_f SubframeType_encode_uper;
+per_type_decoder_f SubframeType_decode_aper;
+per_type_encoder_f SubframeType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubframeType_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SubscriberProfileIDforRFP.c b/asn1c_defs/X2N_SubscriberProfileIDforRFP.c
new file mode 100644
index 0000000..fa58a3d
--- /dev/null
+++ b/asn1c_defs/X2N_SubscriberProfileIDforRFP.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SubscriberProfileIDforRFP.h"
+
+int
+X2N_SubscriberProfileIDforRFP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 256)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_SubscriberProfileIDforRFP_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (1..256) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SubscriberProfileIDforRFP = {
+	"SubscriberProfileIDforRFP",
+	"SubscriberProfileIDforRFP",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1,
+	sizeof(asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1)
+		/sizeof(asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1)
+		/sizeof(asn_DEF_X2N_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_SubscriberProfileIDforRFP_constr_1, X2N_SubscriberProfileIDforRFP_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_SubscriberProfileIDforRFP.h b/asn1c_defs/X2N_SubscriberProfileIDforRFP.h
new file mode 100644
index 0000000..c5e1247
--- /dev/null
+++ b/asn1c_defs/X2N_SubscriberProfileIDforRFP.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SubscriberProfileIDforRFP_H_
+#define	_X2N_SubscriberProfileIDforRFP_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_SubscriberProfileIDforRFP */
+typedef long	 X2N_SubscriberProfileIDforRFP_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_SubscriberProfileIDforRFP_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SubscriberProfileIDforRFP;
+asn_struct_free_f X2N_SubscriberProfileIDforRFP_free;
+asn_struct_print_f X2N_SubscriberProfileIDforRFP_print;
+asn_constr_check_f X2N_SubscriberProfileIDforRFP_constraint;
+ber_type_decoder_f X2N_SubscriberProfileIDforRFP_decode_ber;
+der_type_encoder_f X2N_SubscriberProfileIDforRFP_encode_der;
+xer_type_decoder_f X2N_SubscriberProfileIDforRFP_decode_xer;
+xer_type_encoder_f X2N_SubscriberProfileIDforRFP_encode_xer;
+per_type_decoder_f X2N_SubscriberProfileIDforRFP_decode_uper;
+per_type_encoder_f X2N_SubscriberProfileIDforRFP_encode_uper;
+per_type_decoder_f X2N_SubscriberProfileIDforRFP_decode_aper;
+per_type_encoder_f X2N_SubscriberProfileIDforRFP_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SubscriberProfileIDforRFP_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.c b/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.c
new file mode 100644
index 0000000..e9fcd3d
--- /dev/null
+++ b/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.c
@@ -0,0 +1,340 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Subscription-Based-UE-DifferentiationInfo.h"
+
+#include "X2N_ScheduledCommunicationTime.h"
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_X2N_periodicTime_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 3600)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_X2N_periodicCommunicationIndicator_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_stationaryIndication_constr_8 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_trafficProfile_constr_12 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_batteryIndication_constr_17 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_periodicTime_constr_6 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  12,  12,  1,  3600 }	/* (1..3600,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_periodicCommunicationIndicator_value2enum_2[] = {
+	{ 0,	12,	"periodically" },
+	{ 1,	8,	"ondemand" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_periodicCommunicationIndicator_enum2value_2[] = {
+	1,	/* ondemand(1) */
+	0	/* periodically(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_periodicCommunicationIndicator_specs_2 = {
+	asn_MAP_X2N_periodicCommunicationIndicator_value2enum_2,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_periodicCommunicationIndicator_enum2value_2,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_periodicCommunicationIndicator_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_periodicCommunicationIndicator_2 = {
+	"periodicCommunicationIndicator",
+	"periodicCommunicationIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_periodicCommunicationIndicator_tags_2,
+	sizeof(asn_DEF_X2N_periodicCommunicationIndicator_tags_2)
+		/sizeof(asn_DEF_X2N_periodicCommunicationIndicator_tags_2[0]) - 1, /* 1 */
+	asn_DEF_X2N_periodicCommunicationIndicator_tags_2,	/* Same as above */
+	sizeof(asn_DEF_X2N_periodicCommunicationIndicator_tags_2)
+		/sizeof(asn_DEF_X2N_periodicCommunicationIndicator_tags_2[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_periodicCommunicationIndicator_constr_2, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_periodicCommunicationIndicator_specs_2	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_stationaryIndication_value2enum_8[] = {
+	{ 0,	10,	"stationary" },
+	{ 1,	6,	"mobile" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_stationaryIndication_enum2value_8[] = {
+	1,	/* mobile(1) */
+	0	/* stationary(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_stationaryIndication_specs_8 = {
+	asn_MAP_X2N_stationaryIndication_value2enum_8,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_stationaryIndication_enum2value_8,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_stationaryIndication_tags_8[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_stationaryIndication_8 = {
+	"stationaryIndication",
+	"stationaryIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_stationaryIndication_tags_8,
+	sizeof(asn_DEF_X2N_stationaryIndication_tags_8)
+		/sizeof(asn_DEF_X2N_stationaryIndication_tags_8[0]) - 1, /* 1 */
+	asn_DEF_X2N_stationaryIndication_tags_8,	/* Same as above */
+	sizeof(asn_DEF_X2N_stationaryIndication_tags_8)
+		/sizeof(asn_DEF_X2N_stationaryIndication_tags_8[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_stationaryIndication_constr_8, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_stationaryIndication_specs_8	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_trafficProfile_value2enum_12[] = {
+	{ 0,	13,	"single-packet" },
+	{ 1,	12,	"dual-packets" },
+	{ 2,	16,	"multiple-packets" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_trafficProfile_enum2value_12[] = {
+	1,	/* dual-packets(1) */
+	2,	/* multiple-packets(2) */
+	0	/* single-packet(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_trafficProfile_specs_12 = {
+	asn_MAP_X2N_trafficProfile_value2enum_12,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_trafficProfile_enum2value_12,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_trafficProfile_tags_12[] = {
+	(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_trafficProfile_12 = {
+	"trafficProfile",
+	"trafficProfile",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_trafficProfile_tags_12,
+	sizeof(asn_DEF_X2N_trafficProfile_tags_12)
+		/sizeof(asn_DEF_X2N_trafficProfile_tags_12[0]) - 1, /* 1 */
+	asn_DEF_X2N_trafficProfile_tags_12,	/* Same as above */
+	sizeof(asn_DEF_X2N_trafficProfile_tags_12)
+		/sizeof(asn_DEF_X2N_trafficProfile_tags_12[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_trafficProfile_constr_12, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_trafficProfile_specs_12	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_batteryIndication_value2enum_17[] = {
+	{ 0,	15,	"battery-powered" },
+	{ 1,	47,	"battery-powered-not-rechargeable-or-replaceable" },
+	{ 2,	19,	"not-battery-powered" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_batteryIndication_enum2value_17[] = {
+	0,	/* battery-powered(0) */
+	1,	/* battery-powered-not-rechargeable-or-replaceable(1) */
+	2	/* not-battery-powered(2) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_batteryIndication_specs_17 = {
+	asn_MAP_X2N_batteryIndication_value2enum_17,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_batteryIndication_enum2value_17,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_batteryIndication_tags_17[] = {
+	(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_batteryIndication_17 = {
+	"batteryIndication",
+	"batteryIndication",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_batteryIndication_tags_17,
+	sizeof(asn_DEF_X2N_batteryIndication_tags_17)
+		/sizeof(asn_DEF_X2N_batteryIndication_tags_17[0]) - 1, /* 1 */
+	asn_DEF_X2N_batteryIndication_tags_17,	/* Same as above */
+	sizeof(asn_DEF_X2N_batteryIndication_tags_17)
+		/sizeof(asn_DEF_X2N_batteryIndication_tags_17[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_batteryIndication_constr_17, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_batteryIndication_specs_17	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_Subscription_Based_UE_DifferentiationInfo_1[] = {
+	{ ATF_POINTER, 7, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, periodicCommunicationIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_periodicCommunicationIndicator_2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"periodicCommunicationIndicator"
+		},
+	{ ATF_POINTER, 6, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, periodicTime),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_periodicTime_constr_6,  memb_X2N_periodicTime_constraint_1 },
+		0, 0, /* No default value */
+		"periodicTime"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, scheduledCommunicationTime),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ScheduledCommunicationTime,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"scheduledCommunicationTime"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, stationaryIndication),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_stationaryIndication_8,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"stationaryIndication"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, trafficProfile),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_trafficProfile_12,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"trafficProfile"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, batteryIndication),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_batteryIndication_17,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"batteryIndication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P196,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* periodicCommunicationIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* periodicTime */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* scheduledCommunicationTime */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* stationaryIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* trafficProfile */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* batteryIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_Subscription_Based_UE_DifferentiationInfo_specs_1 = {
+	sizeof(struct X2N_Subscription_Based_UE_DifferentiationInfo),
+	offsetof(struct X2N_Subscription_Based_UE_DifferentiationInfo, _asn_ctx),
+	asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_Subscription_Based_UE_DifferentiationInfo_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo = {
+	"Subscription-Based-UE-DifferentiationInfo",
+	"Subscription-Based-UE-DifferentiationInfo",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1,
+	sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1)
+		/sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1)
+		/sizeof(asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_Subscription_Based_UE_DifferentiationInfo_1,
+	7,	/* Elements count */
+	&asn_SPC_X2N_Subscription_Based_UE_DifferentiationInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.h b/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.h
new file mode 100644
index 0000000..accd458
--- /dev/null
+++ b/asn1c_defs/X2N_Subscription-Based-UE-DifferentiationInfo.h
@@ -0,0 +1,89 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Subscription_Based_UE_DifferentiationInfo_H_
+#define	_X2N_Subscription_Based_UE_DifferentiationInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator {
+	X2N_Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator_periodically	= 0,
+	X2N_Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator_ondemand	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Subscription_Based_UE_DifferentiationInfo__periodicCommunicationIndicator;
+typedef enum X2N_Subscription_Based_UE_DifferentiationInfo__stationaryIndication {
+	X2N_Subscription_Based_UE_DifferentiationInfo__stationaryIndication_stationary	= 0,
+	X2N_Subscription_Based_UE_DifferentiationInfo__stationaryIndication_mobile	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Subscription_Based_UE_DifferentiationInfo__stationaryIndication;
+typedef enum X2N_Subscription_Based_UE_DifferentiationInfo__trafficProfile {
+	X2N_Subscription_Based_UE_DifferentiationInfo__trafficProfile_single_packet	= 0,
+	X2N_Subscription_Based_UE_DifferentiationInfo__trafficProfile_dual_packets	= 1,
+	X2N_Subscription_Based_UE_DifferentiationInfo__trafficProfile_multiple_packets	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Subscription_Based_UE_DifferentiationInfo__trafficProfile;
+typedef enum X2N_Subscription_Based_UE_DifferentiationInfo__batteryIndication {
+	X2N_Subscription_Based_UE_DifferentiationInfo__batteryIndication_battery_powered	= 0,
+	X2N_Subscription_Based_UE_DifferentiationInfo__batteryIndication_battery_powered_not_rechargeable_or_replaceable	= 1,
+	X2N_Subscription_Based_UE_DifferentiationInfo__batteryIndication_not_battery_powered	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_Subscription_Based_UE_DifferentiationInfo__batteryIndication;
+
+/* Forward declarations */
+struct X2N_ScheduledCommunicationTime;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_Subscription-Based-UE-DifferentiationInfo */
+typedef struct X2N_Subscription_Based_UE_DifferentiationInfo {
+	long	*periodicCommunicationIndicator;	/* OPTIONAL */
+	long	*periodicTime;	/* OPTIONAL */
+	struct X2N_ScheduledCommunicationTime	*scheduledCommunicationTime;	/* OPTIONAL */
+	long	*stationaryIndication;	/* OPTIONAL */
+	long	*trafficProfile;	/* OPTIONAL */
+	long	*batteryIndication;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_Subscription_Based_UE_DifferentiationInfo_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_periodicCommunicationIndicator_2;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_stationaryIndication_8;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_trafficProfile_12;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_batteryIndication_17;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Subscription_Based_UE_DifferentiationInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Subscription_Based_UE_DifferentiationInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SuccessfulOutcome.c b/asn1c_defs/X2N_SuccessfulOutcome.c
new file mode 100644
index 0000000..a4bda74
--- /dev/null
+++ b/asn1c_defs/X2N_SuccessfulOutcome.c
@@ -0,0 +1,808 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SuccessfulOutcome.h"
+
+static const long asn_VAL_1_X2N_id_handoverPreparation = 0;
+static const long asn_VAL_1_X2N_reject = 0;
+static const long asn_VAL_2_X2N_id_reset = 7;
+static const long asn_VAL_2_X2N_reject = 0;
+static const long asn_VAL_3_X2N_id_x2Setup = 6;
+static const long asn_VAL_3_X2N_reject = 0;
+static const long asn_VAL_4_X2N_id_resourceStatusReportingInitiation = 9;
+static const long asn_VAL_4_X2N_reject = 0;
+static const long asn_VAL_5_X2N_id_eNBConfigurationUpdate = 8;
+static const long asn_VAL_5_X2N_reject = 0;
+static const long asn_VAL_6_X2N_id_mobilitySettingsChange = 12;
+static const long asn_VAL_6_X2N_reject = 0;
+static const long asn_VAL_7_X2N_id_cellActivation = 15;
+static const long asn_VAL_7_X2N_reject = 0;
+static const long asn_VAL_8_X2N_id_seNBAdditionPreparation = 19;
+static const long asn_VAL_8_X2N_reject = 0;
+static const long asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation = 21;
+static const long asn_VAL_9_X2N_reject = 0;
+static const long asn_VAL_10_X2N_id_seNBinitiatedSeNBModification = 22;
+static const long asn_VAL_10_X2N_reject = 0;
+static const long asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease = 24;
+static const long asn_VAL_11_X2N_reject = 0;
+static const long asn_VAL_12_X2N_id_x2Removal = 18;
+static const long asn_VAL_12_X2N_reject = 0;
+static const long asn_VAL_13_X2N_id_retrieveUEContext = 26;
+static const long asn_VAL_13_X2N_reject = 0;
+static const long asn_VAL_14_X2N_id_sgNBAdditionPreparation = 27;
+static const long asn_VAL_14_X2N_reject = 0;
+static const long asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation = 29;
+static const long asn_VAL_15_X2N_reject = 0;
+static const long asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification = 30;
+static const long asn_VAL_16_X2N_reject = 0;
+static const long asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease = 31;
+static const long asn_VAL_17_X2N_ignore = 1;
+static const long asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease = 32;
+static const long asn_VAL_18_X2N_reject = 0;
+static const long asn_VAL_19_X2N_id_sgNBChange = 34;
+static const long asn_VAL_19_X2N_reject = 0;
+static const long asn_VAL_20_X2N_id_endcX2Setup = 36;
+static const long asn_VAL_20_X2N_reject = 0;
+static const long asn_VAL_21_X2N_id_endcConfigurationUpdate = 37;
+static const long asn_VAL_21_X2N_reject = 0;
+static const long asn_VAL_22_X2N_id_endcCellActivation = 39;
+static const long asn_VAL_22_X2N_reject = 0;
+static const long asn_VAL_23_X2N_id_endcPartialReset = 40;
+static const long asn_VAL_23_X2N_reject = 0;
+static const long asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination = 41;
+static const long asn_VAL_24_X2N_reject = 0;
+static const long asn_VAL_25_X2N_id_endcX2Removal = 43;
+static const long asn_VAL_25_X2N_reject = 0;
+static const long asn_VAL_26_X2N_id_snStatusTransfer = 4;
+static const long asn_VAL_26_X2N_ignore = 1;
+static const long asn_VAL_27_X2N_id_uEContextRelease = 5;
+static const long asn_VAL_27_X2N_ignore = 1;
+static const long asn_VAL_28_X2N_id_handoverCancel = 1;
+static const long asn_VAL_28_X2N_ignore = 1;
+static const long asn_VAL_29_X2N_id_errorIndication = 3;
+static const long asn_VAL_29_X2N_ignore = 1;
+static const long asn_VAL_30_X2N_id_resourceStatusReporting = 10;
+static const long asn_VAL_30_X2N_ignore = 1;
+static const long asn_VAL_31_X2N_id_loadIndication = 2;
+static const long asn_VAL_31_X2N_ignore = 1;
+static const long asn_VAL_32_X2N_id_privateMessage = 11;
+static const long asn_VAL_32_X2N_ignore = 1;
+static const long asn_VAL_33_X2N_id_rLFIndication = 13;
+static const long asn_VAL_33_X2N_ignore = 1;
+static const long asn_VAL_34_X2N_id_handoverReport = 14;
+static const long asn_VAL_34_X2N_ignore = 1;
+static const long asn_VAL_35_X2N_id_x2Release = 16;
+static const long asn_VAL_35_X2N_reject = 0;
+static const long asn_VAL_36_X2N_id_x2APMessageTransfer = 17;
+static const long asn_VAL_36_X2N_reject = 0;
+static const long asn_VAL_37_X2N_id_seNBReconfigurationCompletion = 20;
+static const long asn_VAL_37_X2N_ignore = 1;
+static const long asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease = 23;
+static const long asn_VAL_38_X2N_ignore = 1;
+static const long asn_VAL_39_X2N_id_seNBCounterCheck = 25;
+static const long asn_VAL_39_X2N_reject = 0;
+static const long asn_VAL_40_X2N_id_sgNBReconfigurationCompletion = 28;
+static const long asn_VAL_40_X2N_ignore = 1;
+static const long asn_VAL_41_X2N_id_sgNBCounterCheck = 33;
+static const long asn_VAL_41_X2N_reject = 0;
+static const long asn_VAL_42_X2N_id_rRCTransfer = 35;
+static const long asn_VAL_42_X2N_reject = 0;
+static const long asn_VAL_43_X2N_id_secondaryRATDataUsageReport = 38;
+static const long asn_VAL_43_X2N_reject = 0;
+static const long asn_VAL_44_X2N_id_SgNBActivityNotification = 42;
+static const long asn_VAL_44_X2N_reject = 0;
+static const long asn_VAL_45_X2N_id_dataForwardingAddressIndication = 44;
+static const long asn_VAL_45_X2N_ignore = 1;
+static const long asn_VAL_46_X2N_id_gNBStatusIndication = 45;
+static const long asn_VAL_46_X2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverPreparationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_1_X2N_id_handoverPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_1_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResetRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResetResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_2_X2N_id_reset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_2_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_3_X2N_id_x2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_3_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_4_X2N_id_resourceStatusReportingInitiation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_4_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_5_X2N_id_eNBConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_5_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_MobilityChangeRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_6_X2N_id_mobilitySettingsChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_6_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_CellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_7_X2N_id_cellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_7_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_8_X2N_id_seNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_8_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_9_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_10_X2N_id_seNBinitiatedSeNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_10_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_11_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_12_X2N_id_x2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_12_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RetrieveUEContextRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_13_X2N_id_retrieveUEContext },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_13_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_14_X2N_id_sgNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_14_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_15_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_16_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_17_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_18_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBChangeRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_19_X2N_id_sgNBChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_19_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_20_X2N_id_endcX2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_20_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_21_X2N_id_endcConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_21_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCCellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_22_X2N_id_endcCellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_22_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCPartialResetRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCPartialResetConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_23_X2N_id_endcPartialReset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_23_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_24_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_25_X2N_id_endcX2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_25_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SNStatusTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_26_X2N_id_snStatusTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_26_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_UEContextRelease },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_27_X2N_id_uEContextRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_27_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverCancel },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_28_X2N_id_handoverCancel },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_28_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ErrorIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_29_X2N_id_errorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_29_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusUpdate },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_30_X2N_id_resourceStatusReporting },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_30_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_LoadInformation },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_31_X2N_id_loadIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_31_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_PrivateMessage },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_32_X2N_id_privateMessage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_32_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RLFIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_33_X2N_id_rLFIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_33_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_34_X2N_id_handoverReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_34_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2Release },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_35_X2N_id_x2Release },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_35_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2APMessageTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_36_X2N_id_x2APMessageTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_36_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_37_X2N_id_seNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_37_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_38_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_39_X2N_id_seNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_39_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_40_X2N_id_sgNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_40_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_41_X2N_id_sgNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_41_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RRCTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_42_X2N_id_rRCTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_42_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SecondaryRATDataUsageReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_43_X2N_id_secondaryRATDataUsageReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_43_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBActivityNotification },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_44_X2N_id_SgNBActivityNotification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_44_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_DataForwardingAddressIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_45_X2N_id_dataForwardingAddressIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_45_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_GNBStatusIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_46_X2N_id_gNBStatusIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_46_X2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 46, 5, asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_X2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_SuccessfulOutcome_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_SuccessfulOutcome_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 1; /* &SuccessfulOutcome */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_SuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.HandoverRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ResetResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResetResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResetResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.X2SetupResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2SetupResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ResourceStatusResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResourceStatusResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENBConfigurationUpdateAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdateAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENBConfigurationUpdateAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.MobilityChangeAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityChangeAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.CellActivationResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellActivationResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SeNBAdditionRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBAdditionRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SeNBModificationRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SeNBModificationConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SeNBReleaseConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBReleaseConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBReleaseConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.X2RemovalResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2RemovalResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.RetrieveUEContextResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RetrieveUEContextResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBAdditionRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBAdditionRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBModificationRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBModificationConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBReleaseRequestAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequestAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReleaseRequestAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBReleaseConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReleaseConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.SgNBChangeConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBChangeConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENDCX2SetupResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2SetupResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENDCConfigurationUpdateAcknowledge),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCConfigurationUpdateAcknowledge"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENDCCellActivationResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCCellActivationResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENDCPartialResetConfirm),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCPartialResetConfirm,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCPartialResetConfirm"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.EUTRANRCellResourceCoordinationResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"EUTRANRCellResourceCoordinationResponse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome__value, choice.ENDCX2RemovalResponse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalResponse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2RemovalResponse"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 24 }, /* HandoverRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 23 }, /* ResetResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 22 }, /* X2SetupResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 21 }, /* ResourceStatusResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 20 }, /* ENBConfigurationUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 19 }, /* MobilityChangeAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 18 }, /* CellActivationResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 17 }, /* SeNBAdditionRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 16 }, /* SeNBModificationRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 15 }, /* SeNBModificationConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 14 }, /* SeNBReleaseConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 11, -11, 13 }, /* X2RemovalResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -12, 12 }, /* RetrieveUEContextResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -13, 11 }, /* SgNBAdditionRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -14, 10 }, /* SgNBModificationRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -15, 9 }, /* SgNBModificationConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 16, -16, 8 }, /* SgNBReleaseRequestAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 17, -17, 7 }, /* SgNBReleaseConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 18, -18, 6 }, /* SgNBChangeConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 19, -19, 5 }, /* ENDCX2SetupResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 20, -20, 4 }, /* ENDCConfigurationUpdateAcknowledge */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 21, -21, 3 }, /* ENDCCellActivationResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 22, -22, 2 }, /* ENDCPartialResetConfirm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 23, -23, 1 }, /* EUTRANRCellResourceCoordinationResponse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 24, -24, 0 } /* ENDCX2RemovalResponse */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_4 = {
+	sizeof(struct X2N_SuccessfulOutcome__value),
+	offsetof(struct X2N_SuccessfulOutcome__value, _asn_ctx),
+	offsetof(struct X2N_SuccessfulOutcome__value, present),
+	sizeof(((struct X2N_SuccessfulOutcome__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_4,
+	25,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_4,
+	25,	/* Elements count */
+	&asn_SPC_X2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_SuccessfulOutcome_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_X2N_procedureCode_constr_2,  memb_X2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_SuccessfulOutcome_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_SuccessfulOutcome, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_4,
+		select_SuccessfulOutcome_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_4,  memb_X2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_SuccessfulOutcome_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SuccessfulOutcome_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SuccessfulOutcome_specs_1 = {
+	sizeof(struct X2N_SuccessfulOutcome),
+	offsetof(struct X2N_SuccessfulOutcome, _asn_ctx),
+	asn_MAP_X2N_SuccessfulOutcome_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SuccessfulOutcome = {
+	"SuccessfulOutcome",
+	"SuccessfulOutcome",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SuccessfulOutcome_tags_1,
+	sizeof(asn_DEF_X2N_SuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_X2N_SuccessfulOutcome_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SuccessfulOutcome_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_X2N_SuccessfulOutcome_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SuccessfulOutcome_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_SuccessfulOutcome_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SuccessfulOutcome.h b/asn1c_defs/X2N_SuccessfulOutcome.h
new file mode 100644
index 0000000..bf54269
--- /dev/null
+++ b/asn1c_defs/X2N_SuccessfulOutcome.h
@@ -0,0 +1,200 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SuccessfulOutcome_H_
+#define	_X2N_SuccessfulOutcome_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProcedureCode.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "X2N_HandoverRequest.h"
+#include "X2N_HandoverRequestAcknowledge.h"
+#include "X2N_HandoverPreparationFailure.h"
+#include "X2N_ResetRequest.h"
+#include "X2N_ResetResponse.h"
+#include "X2N_X2SetupRequest.h"
+#include "X2N_X2SetupResponse.h"
+#include "X2N_X2SetupFailure.h"
+#include "X2N_ResourceStatusRequest.h"
+#include "X2N_ResourceStatusResponse.h"
+#include "X2N_ResourceStatusFailure.h"
+#include "X2N_ENBConfigurationUpdate.h"
+#include "X2N_ENBConfigurationUpdateAcknowledge.h"
+#include "X2N_ENBConfigurationUpdateFailure.h"
+#include "X2N_MobilityChangeRequest.h"
+#include "X2N_MobilityChangeAcknowledge.h"
+#include "X2N_MobilityChangeFailure.h"
+#include "X2N_CellActivationRequest.h"
+#include "X2N_CellActivationResponse.h"
+#include "X2N_CellActivationFailure.h"
+#include "X2N_SeNBAdditionRequest.h"
+#include "X2N_SeNBAdditionRequestAcknowledge.h"
+#include "X2N_SeNBAdditionRequestReject.h"
+#include "X2N_SeNBModificationRequest.h"
+#include "X2N_SeNBModificationRequestAcknowledge.h"
+#include "X2N_SeNBModificationRequestReject.h"
+#include "X2N_SeNBModificationRequired.h"
+#include "X2N_SeNBModificationConfirm.h"
+#include "X2N_SeNBModificationRefuse.h"
+#include "X2N_SeNBReleaseRequired.h"
+#include "X2N_SeNBReleaseConfirm.h"
+#include "X2N_X2RemovalRequest.h"
+#include "X2N_X2RemovalResponse.h"
+#include "X2N_X2RemovalFailure.h"
+#include "X2N_RetrieveUEContextRequest.h"
+#include "X2N_RetrieveUEContextResponse.h"
+#include "X2N_RetrieveUEContextFailure.h"
+#include "X2N_SgNBAdditionRequest.h"
+#include "X2N_SgNBAdditionRequestAcknowledge.h"
+#include "X2N_SgNBAdditionRequestReject.h"
+#include "X2N_SgNBModificationRequest.h"
+#include "X2N_SgNBModificationRequestAcknowledge.h"
+#include "X2N_SgNBModificationRequestReject.h"
+#include "X2N_SgNBModificationRequired.h"
+#include "X2N_SgNBModificationConfirm.h"
+#include "X2N_SgNBModificationRefuse.h"
+#include "X2N_SgNBReleaseRequest.h"
+#include "X2N_SgNBReleaseRequestAcknowledge.h"
+#include "X2N_SgNBReleaseRequestReject.h"
+#include "X2N_SgNBReleaseRequired.h"
+#include "X2N_SgNBReleaseConfirm.h"
+#include "X2N_SgNBChangeRequired.h"
+#include "X2N_SgNBChangeConfirm.h"
+#include "X2N_SgNBChangeRefuse.h"
+#include "X2N_ENDCX2SetupRequest.h"
+#include "X2N_ENDCX2SetupResponse.h"
+#include "X2N_ENDCX2SetupFailure.h"
+#include "X2N_ENDCConfigurationUpdate.h"
+#include "X2N_ENDCConfigurationUpdateAcknowledge.h"
+#include "X2N_ENDCConfigurationUpdateFailure.h"
+#include "X2N_ENDCCellActivationRequest.h"
+#include "X2N_ENDCCellActivationResponse.h"
+#include "X2N_ENDCCellActivationFailure.h"
+#include "X2N_ENDCPartialResetRequired.h"
+#include "X2N_ENDCPartialResetConfirm.h"
+#include "X2N_EUTRANRCellResourceCoordinationRequest.h"
+#include "X2N_EUTRANRCellResourceCoordinationResponse.h"
+#include "X2N_ENDCX2RemovalRequest.h"
+#include "X2N_ENDCX2RemovalResponse.h"
+#include "X2N_ENDCX2RemovalFailure.h"
+#include "X2N_SNStatusTransfer.h"
+#include "X2N_UEContextRelease.h"
+#include "X2N_HandoverCancel.h"
+#include "X2N_ErrorIndication.h"
+#include "X2N_ResourceStatusUpdate.h"
+#include "X2N_LoadInformation.h"
+#include "X2N_PrivateMessage.h"
+#include "X2N_RLFIndication.h"
+#include "X2N_HandoverReport.h"
+#include "X2N_X2Release.h"
+#include "X2N_X2APMessageTransfer.h"
+#include "X2N_SeNBReconfigurationComplete.h"
+#include "X2N_SeNBReleaseRequest.h"
+#include "X2N_SeNBCounterCheckRequest.h"
+#include "X2N_SgNBReconfigurationComplete.h"
+#include "X2N_SgNBCounterCheckRequest.h"
+#include "X2N_RRCTransfer.h"
+#include "X2N_SecondaryRATDataUsageReport.h"
+#include "X2N_SgNBActivityNotification.h"
+#include "X2N_DataForwardingAddressIndication.h"
+#include "X2N_GNBStatusIndication.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_SuccessfulOutcome__value_PR {
+	X2N_SuccessfulOutcome__value_PR_NOTHING,	/* No components present */
+	X2N_SuccessfulOutcome__value_PR_HandoverRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_ResetResponse,
+	X2N_SuccessfulOutcome__value_PR_X2SetupResponse,
+	X2N_SuccessfulOutcome__value_PR_ResourceStatusResponse,
+	X2N_SuccessfulOutcome__value_PR_ENBConfigurationUpdateAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_MobilityChangeAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_CellActivationResponse,
+	X2N_SuccessfulOutcome__value_PR_SeNBAdditionRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_SeNBModificationRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_SeNBModificationConfirm,
+	X2N_SuccessfulOutcome__value_PR_SeNBReleaseConfirm,
+	X2N_SuccessfulOutcome__value_PR_X2RemovalResponse,
+	X2N_SuccessfulOutcome__value_PR_RetrieveUEContextResponse,
+	X2N_SuccessfulOutcome__value_PR_SgNBAdditionRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_SgNBModificationRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_SgNBModificationConfirm,
+	X2N_SuccessfulOutcome__value_PR_SgNBReleaseRequestAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_SgNBReleaseConfirm,
+	X2N_SuccessfulOutcome__value_PR_SgNBChangeConfirm,
+	X2N_SuccessfulOutcome__value_PR_ENDCX2SetupResponse,
+	X2N_SuccessfulOutcome__value_PR_ENDCConfigurationUpdateAcknowledge,
+	X2N_SuccessfulOutcome__value_PR_ENDCCellActivationResponse,
+	X2N_SuccessfulOutcome__value_PR_ENDCPartialResetConfirm,
+	X2N_SuccessfulOutcome__value_PR_EUTRANRCellResourceCoordinationResponse,
+	X2N_SuccessfulOutcome__value_PR_ENDCX2RemovalResponse
+} X2N_SuccessfulOutcome__value_PR;
+
+/* X2N_SuccessfulOutcome */
+typedef struct X2N_SuccessfulOutcome {
+	X2N_ProcedureCode_t	 procedureCode;
+	X2N_Criticality_t	 criticality;
+	struct X2N_SuccessfulOutcome__value {
+		X2N_SuccessfulOutcome__value_PR present;
+		union X2N_SuccessfulOutcome__X2N_value_u {
+			X2N_HandoverRequestAcknowledge_t	 HandoverRequestAcknowledge;
+			X2N_ResetResponse_t	 ResetResponse;
+			X2N_X2SetupResponse_t	 X2SetupResponse;
+			X2N_ResourceStatusResponse_t	 ResourceStatusResponse;
+			X2N_ENBConfigurationUpdateAcknowledge_t	 ENBConfigurationUpdateAcknowledge;
+			X2N_MobilityChangeAcknowledge_t	 MobilityChangeAcknowledge;
+			X2N_CellActivationResponse_t	 CellActivationResponse;
+			X2N_SeNBAdditionRequestAcknowledge_t	 SeNBAdditionRequestAcknowledge;
+			X2N_SeNBModificationRequestAcknowledge_t	 SeNBModificationRequestAcknowledge;
+			X2N_SeNBModificationConfirm_t	 SeNBModificationConfirm;
+			X2N_SeNBReleaseConfirm_t	 SeNBReleaseConfirm;
+			X2N_X2RemovalResponse_t	 X2RemovalResponse;
+			X2N_RetrieveUEContextResponse_t	 RetrieveUEContextResponse;
+			X2N_SgNBAdditionRequestAcknowledge_t	 SgNBAdditionRequestAcknowledge;
+			X2N_SgNBModificationRequestAcknowledge_t	 SgNBModificationRequestAcknowledge;
+			X2N_SgNBModificationConfirm_t	 SgNBModificationConfirm;
+			X2N_SgNBReleaseRequestAcknowledge_t	 SgNBReleaseRequestAcknowledge;
+			X2N_SgNBReleaseConfirm_t	 SgNBReleaseConfirm;
+			X2N_SgNBChangeConfirm_t	 SgNBChangeConfirm;
+			X2N_ENDCX2SetupResponse_t	 ENDCX2SetupResponse;
+			X2N_ENDCConfigurationUpdateAcknowledge_t	 ENDCConfigurationUpdateAcknowledge;
+			X2N_ENDCCellActivationResponse_t	 ENDCCellActivationResponse;
+			X2N_ENDCPartialResetConfirm_t	 ENDCPartialResetConfirm;
+			X2N_EUTRANRCellResourceCoordinationResponse_t	 EUTRANRCellResourceCoordinationResponse;
+			X2N_ENDCX2RemovalResponse_t	 ENDCX2RemovalResponse;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SuccessfulOutcome_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SuccessfulOutcome;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SuccessfulOutcome_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SuccessfulOutcome_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SuccessfulOutcome_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_SupportedSULFreqBandItem.c b/asn1c_defs/X2N_SupportedSULFreqBandItem.c
new file mode 100644
index 0000000..876da2c
--- /dev/null
+++ b/asn1c_defs/X2N_SupportedSULFreqBandItem.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_SupportedSULFreqBandItem.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 1024)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_freqBandIndicatorNr_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  10,  10,  1,  1024 }	/* (1..1024,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_SupportedSULFreqBandItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_SupportedSULFreqBandItem, freqBandIndicatorNr),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_freqBandIndicatorNr_constr_2,  memb_X2N_freqBandIndicatorNr_constraint_1 },
+		0, 0, /* No default value */
+		"freqBandIndicatorNr"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_SupportedSULFreqBandItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P200,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_SupportedSULFreqBandItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_SupportedSULFreqBandItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_SupportedSULFreqBandItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_SupportedSULFreqBandItem_specs_1 = {
+	sizeof(struct X2N_SupportedSULFreqBandItem),
+	offsetof(struct X2N_SupportedSULFreqBandItem, _asn_ctx),
+	asn_MAP_X2N_SupportedSULFreqBandItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_SupportedSULFreqBandItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_SupportedSULFreqBandItem = {
+	"SupportedSULFreqBandItem",
+	"SupportedSULFreqBandItem",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_SupportedSULFreqBandItem_tags_1,
+	sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_tags_1)
+		/sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_tags_1[0]), /* 1 */
+	asn_DEF_X2N_SupportedSULFreqBandItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_tags_1)
+		/sizeof(asn_DEF_X2N_SupportedSULFreqBandItem_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_SupportedSULFreqBandItem_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_SupportedSULFreqBandItem_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_SupportedSULFreqBandItem.h b/asn1c_defs/X2N_SupportedSULFreqBandItem.h
new file mode 100644
index 0000000..fb47c18
--- /dev/null
+++ b/asn1c_defs/X2N_SupportedSULFreqBandItem.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_SupportedSULFreqBandItem_H_
+#define	_X2N_SupportedSULFreqBandItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_SupportedSULFreqBandItem */
+typedef struct X2N_SupportedSULFreqBandItem {
+	long	 freqBandIndicatorNr;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_SupportedSULFreqBandItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_SupportedSULFreqBandItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_SupportedSULFreqBandItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_SupportedSULFreqBandItem_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_SupportedSULFreqBandItem_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TABasedMDT.c b/asn1c_defs/X2N_TABasedMDT.c
new file mode 100644
index 0000000..5b9a0a5
--- /dev/null
+++ b/asn1c_defs/X2N_TABasedMDT.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TABasedMDT.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TABasedMDT_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedMDT, tAListforMDT),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAListforMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAListforMDT"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TABasedMDT, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P201,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TABasedMDT_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_TABasedMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TABasedMDT_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAListforMDT */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedMDT_specs_1 = {
+	sizeof(struct X2N_TABasedMDT),
+	offsetof(struct X2N_TABasedMDT, _asn_ctx),
+	asn_MAP_X2N_TABasedMDT_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_TABasedMDT_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TABasedMDT = {
+	"TABasedMDT",
+	"TABasedMDT",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TABasedMDT_tags_1,
+	sizeof(asn_DEF_X2N_TABasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TABasedMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TABasedMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TABasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TABasedMDT_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TABasedMDT_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_TABasedMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TABasedMDT.h b/asn1c_defs/X2N_TABasedMDT.h
new file mode 100644
index 0000000..24455d1
--- /dev/null
+++ b/asn1c_defs/X2N_TABasedMDT.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TABasedMDT_H_
+#define	_X2N_TABasedMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAListforMDT.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TABasedMDT */
+typedef struct X2N_TABasedMDT {
+	X2N_TAListforMDT_t	 tAListforMDT;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TABasedMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TABasedMDT;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TABasedMDT_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TABasedMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TABasedQMC.c b/asn1c_defs/X2N_TABasedQMC.c
new file mode 100644
index 0000000..4f616cd
--- /dev/null
+++ b/asn1c_defs/X2N_TABasedQMC.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TABasedQMC.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TABasedQMC_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TABasedQMC, tAListforQMC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAListforQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAListforQMC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TABasedQMC, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P204,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TABasedQMC_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_TABasedQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TABasedQMC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAListforQMC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedQMC_specs_1 = {
+	sizeof(struct X2N_TABasedQMC),
+	offsetof(struct X2N_TABasedQMC, _asn_ctx),
+	asn_MAP_X2N_TABasedQMC_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_TABasedQMC_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TABasedQMC = {
+	"TABasedQMC",
+	"TABasedQMC",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TABasedQMC_tags_1,
+	sizeof(asn_DEF_X2N_TABasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TABasedQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TABasedQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TABasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TABasedQMC_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TABasedQMC_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_TABasedQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TABasedQMC.h b/asn1c_defs/X2N_TABasedQMC.h
new file mode 100644
index 0000000..043f125
--- /dev/null
+++ b/asn1c_defs/X2N_TABasedQMC.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TABasedQMC_H_
+#define	_X2N_TABasedQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAListforQMC.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TABasedQMC */
+typedef struct X2N_TABasedQMC {
+	X2N_TAListforQMC_t	 tAListforQMC;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TABasedQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TABasedQMC;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TABasedQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TABasedQMC_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TABasedQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAC.c b/asn1c_defs/X2N_TAC.c
new file mode 100644
index 0000000..56f840d
--- /dev/null
+++ b/asn1c_defs/X2N_TAC.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAC.h"
+
+int
+X2N_TAC_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 2)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TAC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  2,  2 }	/* (SIZE(2..2)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAC = {
+	"TAC",
+	"TAC",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_TAC_tags_1,
+	sizeof(asn_DEF_X2N_TAC_tags_1)
+		/sizeof(asn_DEF_X2N_TAC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAC_tags_1)
+		/sizeof(asn_DEF_X2N_TAC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TAC_constr_1, X2N_TAC_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAC.h b/asn1c_defs/X2N_TAC.h
new file mode 100644
index 0000000..fe2e566
--- /dev/null
+++ b/asn1c_defs/X2N_TAC.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAC_H_
+#define	_X2N_TAC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TAC */
+typedef OCTET_STRING_t	 X2N_TAC_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TAC_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAC;
+asn_struct_free_f X2N_TAC_free;
+asn_struct_print_f X2N_TAC_print;
+asn_constr_check_f X2N_TAC_constraint;
+ber_type_decoder_f X2N_TAC_decode_ber;
+der_type_encoder_f X2N_TAC_encode_der;
+xer_type_decoder_f X2N_TAC_decode_xer;
+xer_type_encoder_f X2N_TAC_encode_xer;
+per_type_decoder_f X2N_TAC_decode_uper;
+per_type_encoder_f X2N_TAC_encode_uper;
+per_type_decoder_f X2N_TAC_decode_aper;
+per_type_encoder_f X2N_TAC_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAI-Item.c b/asn1c_defs/X2N_TAI-Item.c
new file mode 100644
index 0000000..283712a
--- /dev/null
+++ b/asn1c_defs/X2N_TAI-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAI-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TAI_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAI_Item, tAC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAC"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAI_Item, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TAI_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P203,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TAI_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_TAI_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAI_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAI_Item_specs_1 = {
+	sizeof(struct X2N_TAI_Item),
+	offsetof(struct X2N_TAI_Item, _asn_ctx),
+	asn_MAP_X2N_TAI_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_TAI_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAI_Item = {
+	"TAI-Item",
+	"TAI-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAI_Item_tags_1,
+	sizeof(asn_DEF_X2N_TAI_Item_tags_1)
+		/sizeof(asn_DEF_X2N_TAI_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAI_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAI_Item_tags_1)
+		/sizeof(asn_DEF_X2N_TAI_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAI_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TAI_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAI-Item.h b/asn1c_defs/X2N_TAI-Item.h
new file mode 100644
index 0000000..e3d8e8a
--- /dev/null
+++ b/asn1c_defs/X2N_TAI-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAI_Item_H_
+#define	_X2N_TAI_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAC.h"
+#include "X2N_PLMN-Identity.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TAI-Item */
+typedef struct X2N_TAI_Item {
+	X2N_TAC_t	 tAC;
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAI_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAI_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAI_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAI_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAI_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAIBasedMDT.c b/asn1c_defs/X2N_TAIBasedMDT.c
new file mode 100644
index 0000000..d346fda
--- /dev/null
+++ b/asn1c_defs/X2N_TAIBasedMDT.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAIBasedMDT.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TAIBasedMDT_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedMDT, tAIListforMDT),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAIListforMDT,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAIListforMDT"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TAIBasedMDT, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P202,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TAIBasedMDT_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_TAIBasedMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAIBasedMDT_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAIListforMDT */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedMDT_specs_1 = {
+	sizeof(struct X2N_TAIBasedMDT),
+	offsetof(struct X2N_TAIBasedMDT, _asn_ctx),
+	asn_MAP_X2N_TAIBasedMDT_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_TAIBasedMDT_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedMDT = {
+	"TAIBasedMDT",
+	"TAIBasedMDT",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAIBasedMDT_tags_1,
+	sizeof(asn_DEF_X2N_TAIBasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAIBasedMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAIBasedMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIBasedMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAIBasedMDT_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAIBasedMDT_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_TAIBasedMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAIBasedMDT.h b/asn1c_defs/X2N_TAIBasedMDT.h
new file mode 100644
index 0000000..622871b
--- /dev/null
+++ b/asn1c_defs/X2N_TAIBasedMDT.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAIBasedMDT_H_
+#define	_X2N_TAIBasedMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAIListforMDT.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TAIBasedMDT */
+typedef struct X2N_TAIBasedMDT {
+	X2N_TAIListforMDT_t	 tAIListforMDT;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIBasedMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedMDT;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIBasedMDT_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAIBasedMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAIBasedQMC.c b/asn1c_defs/X2N_TAIBasedQMC.c
new file mode 100644
index 0000000..dad6b4e
--- /dev/null
+++ b/asn1c_defs/X2N_TAIBasedQMC.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAIBasedQMC.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TAIBasedQMC_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TAIBasedQMC, tAIListforQMC),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TAIListforQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tAIListforQMC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TAIBasedQMC, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P205,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TAIBasedQMC_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_TAIBasedQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TAIBasedQMC_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tAIListforQMC */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedQMC_specs_1 = {
+	sizeof(struct X2N_TAIBasedQMC),
+	offsetof(struct X2N_TAIBasedQMC, _asn_ctx),
+	asn_MAP_X2N_TAIBasedQMC_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_TAIBasedQMC_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedQMC = {
+	"TAIBasedQMC",
+	"TAIBasedQMC",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TAIBasedQMC_tags_1,
+	sizeof(asn_DEF_X2N_TAIBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAIBasedQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAIBasedQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIBasedQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAIBasedQMC_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TAIBasedQMC_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_TAIBasedQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAIBasedQMC.h b/asn1c_defs/X2N_TAIBasedQMC.h
new file mode 100644
index 0000000..00ddb21
--- /dev/null
+++ b/asn1c_defs/X2N_TAIBasedQMC.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAIBasedQMC_H_
+#define	_X2N_TAIBasedQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAIListforQMC.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TAIBasedQMC */
+typedef struct X2N_TAIBasedQMC {
+	X2N_TAIListforQMC_t	 tAIListforQMC;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIBasedQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIBasedQMC;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TAIBasedQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIBasedQMC_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAIBasedQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAIListforMDT.c b/asn1c_defs/X2N_TAIListforMDT.c
new file mode 100644
index 0000000..8f5a05d
--- /dev/null
+++ b/asn1c_defs/X2N_TAIListforMDT.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAIListforMDT.h"
+
+#include "X2N_TAI-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_TAIListforMDT_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_TAIListforMDT_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TAI_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAIListforMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_TAIListforMDT_specs_1 = {
+	sizeof(struct X2N_TAIListforMDT),
+	offsetof(struct X2N_TAIListforMDT, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIListforMDT = {
+	"TAIListforMDT",
+	"TAIListforMDT",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_TAIListforMDT_tags_1,
+	sizeof(asn_DEF_X2N_TAIListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAIListforMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAIListforMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAIListforMDT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TAIListforMDT_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_TAIListforMDT_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_TAIListforMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAIListforMDT.h b/asn1c_defs/X2N_TAIListforMDT.h
new file mode 100644
index 0000000..70423f7
--- /dev/null
+++ b/asn1c_defs/X2N_TAIListforMDT.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAIListforMDT_H_
+#define	_X2N_TAIListforMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_TAI_Item;
+
+/* X2N_TAIListforMDT */
+typedef struct X2N_TAIListforMDT {
+	A_SEQUENCE_OF(struct X2N_TAI_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIListforMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIListforMDT;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_TAIListforMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIListforMDT_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_TAIListforMDT_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAIListforMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAIListforQMC.c b/asn1c_defs/X2N_TAIListforQMC.c
new file mode 100644
index 0000000..146942e
--- /dev/null
+++ b/asn1c_defs/X2N_TAIListforQMC.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAIListforQMC.h"
+
+#include "X2N_TAI-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_TAIListforQMC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_TAIListforQMC_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_TAI_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAIListforQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_TAIListforQMC_specs_1 = {
+	sizeof(struct X2N_TAIListforQMC),
+	offsetof(struct X2N_TAIListforQMC, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAIListforQMC = {
+	"TAIListforQMC",
+	"TAIListforQMC",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_TAIListforQMC_tags_1,
+	sizeof(asn_DEF_X2N_TAIListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAIListforQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAIListforQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAIListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAIListforQMC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TAIListforQMC_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_TAIListforQMC_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_TAIListforQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAIListforQMC.h b/asn1c_defs/X2N_TAIListforQMC.h
new file mode 100644
index 0000000..8ec84b0
--- /dev/null
+++ b/asn1c_defs/X2N_TAIListforQMC.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAIListforQMC_H_
+#define	_X2N_TAIListforQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_TAI_Item;
+
+/* X2N_TAIListforQMC */
+typedef struct X2N_TAIListforQMC {
+	A_SEQUENCE_OF(struct X2N_TAI_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAIListforQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAIListforQMC;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_TAIListforQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAIListforQMC_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_TAIListforQMC_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAIListforQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAListforMDT.c b/asn1c_defs/X2N_TAListforMDT.c
new file mode 100644
index 0000000..5be89b7
--- /dev/null
+++ b/asn1c_defs/X2N_TAListforMDT.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAListforMDT.h"
+
+asn_per_constraints_t asn_PER_type_X2N_TAListforMDT_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_TAListforMDT_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAListforMDT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_TAListforMDT_specs_1 = {
+	sizeof(struct X2N_TAListforMDT),
+	offsetof(struct X2N_TAListforMDT, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAListforMDT = {
+	"TAListforMDT",
+	"TAListforMDT",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_TAListforMDT_tags_1,
+	sizeof(asn_DEF_X2N_TAListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAListforMDT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAListforMDT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAListforMDT_tags_1)
+		/sizeof(asn_DEF_X2N_TAListforMDT_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TAListforMDT_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_TAListforMDT_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_TAListforMDT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAListforMDT.h b/asn1c_defs/X2N_TAListforMDT.h
new file mode 100644
index 0000000..d4c98cb
--- /dev/null
+++ b/asn1c_defs/X2N_TAListforMDT.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAListforMDT_H_
+#define	_X2N_TAListforMDT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAC.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TAListforMDT */
+typedef struct X2N_TAListforMDT {
+	A_SEQUENCE_OF(X2N_TAC_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAListforMDT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAListforMDT;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_TAListforMDT_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAListforMDT_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_TAListforMDT_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAListforMDT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TAListforQMC.c b/asn1c_defs/X2N_TAListforQMC.c
new file mode 100644
index 0000000..190ee67
--- /dev/null
+++ b/asn1c_defs/X2N_TAListforQMC.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TAListforQMC.h"
+
+asn_per_constraints_t asn_PER_type_X2N_TAListforQMC_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 3,  3,  1,  8 }	/* (SIZE(1..8)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_TAListforQMC_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_TAC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TAListforQMC_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_TAListforQMC_specs_1 = {
+	sizeof(struct X2N_TAListforQMC),
+	offsetof(struct X2N_TAListforQMC, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TAListforQMC = {
+	"TAListforQMC",
+	"TAListforQMC",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_TAListforQMC_tags_1,
+	sizeof(asn_DEF_X2N_TAListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAListforQMC_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TAListforQMC_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TAListforQMC_tags_1)
+		/sizeof(asn_DEF_X2N_TAListforQMC_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TAListforQMC_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_TAListforQMC_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_TAListforQMC_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TAListforQMC.h b/asn1c_defs/X2N_TAListforQMC.h
new file mode 100644
index 0000000..940c11d
--- /dev/null
+++ b/asn1c_defs/X2N_TAListforQMC.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TAListforQMC_H_
+#define	_X2N_TAListforQMC_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TAC.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TAListforQMC */
+typedef struct X2N_TAListforQMC {
+	A_SEQUENCE_OF(X2N_TAC_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TAListforQMC_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TAListforQMC;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_TAListforQMC_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TAListforQMC_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_TAListforQMC_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TAListforQMC_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TDD-Info.c b/asn1c_defs/X2N_TDD-Info.c
new file mode 100644
index 0000000..7628865
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-Info.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TDD-Info.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TDD_Info_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info, eARFCN),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EARFCN,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eARFCN"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info, transmission_Bandwidth),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Transmission_Bandwidth,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transmission-Bandwidth"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info, subframeAssignment),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubframeAssignment,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subframeAssignment"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_Info, specialSubframe_Info),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SpecialSubframe_Info,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"specialSubframe-Info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TDD_Info, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P206,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TDD_Info_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_Info_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_Info_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eARFCN */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transmission-Bandwidth */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subframeAssignment */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* specialSubframe-Info */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_Info_specs_1 = {
+	sizeof(struct X2N_TDD_Info),
+	offsetof(struct X2N_TDD_Info, _asn_ctx),
+	asn_MAP_X2N_TDD_Info_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_TDD_Info_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_Info = {
+	"TDD-Info",
+	"TDD-Info",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_Info_tags_1,
+	sizeof(asn_DEF_X2N_TDD_Info_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_Info_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TDD_Info_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_Info_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_Info_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_Info_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_TDD_Info_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TDD-Info.h b/asn1c_defs/X2N_TDD-Info.h
new file mode 100644
index 0000000..cbc9242
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-Info.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TDD_Info_H_
+#define	_X2N_TDD_Info_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_EARFCN.h"
+#include "X2N_Transmission-Bandwidth.h"
+#include "X2N_SubframeAssignment.h"
+#include "X2N_SpecialSubframe-Info.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TDD-Info */
+typedef struct X2N_TDD_Info {
+	X2N_EARFCN_t	 eARFCN;
+	X2N_Transmission_Bandwidth_t	 transmission_Bandwidth;
+	X2N_SubframeAssignment_t	 subframeAssignment;
+	X2N_SpecialSubframe_Info_t	 specialSubframe_Info;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_Info_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_Info;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_Info_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_Info_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TDD_Info_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.c b/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.c
new file mode 100644
index 0000000..796485d
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TDD-InfoNeighbourServedNRCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information, nRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRFreqInfo"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P96,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_specs_1 = {
+	sizeof(struct X2N_TDD_InfoNeighbourServedNRCell_Information),
+	offsetof(struct X2N_TDD_InfoNeighbourServedNRCell_Information, _asn_ctx),
+	asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_TDD_InfoNeighbourServedNRCell_Information_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information = {
+	"TDD-InfoNeighbourServedNRCell-Information",
+	"TDD-InfoNeighbourServedNRCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.h b/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.h
new file mode 100644
index 0000000..460c225
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-InfoNeighbourServedNRCell-Information.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TDD_InfoNeighbourServedNRCell_Information_H_
+#define	_X2N_TDD_InfoNeighbourServedNRCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRFreqInfo.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TDD-InfoNeighbourServedNRCell-Information */
+typedef struct X2N_TDD_InfoNeighbourServedNRCell_Information {
+	X2N_NRFreqInfo_t	 nRFreqInfo;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_InfoNeighbourServedNRCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoNeighbourServedNRCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoNeighbourServedNRCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_InfoNeighbourServedNRCell_Information_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TDD_InfoNeighbourServedNRCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.c b/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.c
new file mode 100644
index 0000000..6903892
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TDD-InfoServedNRCell-Information.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_TDD_InfoServedNRCell_Information_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoServedNRCell_Information, nRFreqInfo),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRFreqInfo,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRFreqInfo"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TDD_InfoServedNRCell_Information, nR_TxBW),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NR_TxBW,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nR-TxBW"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TDD_InfoServedNRCell_Information, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P95,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TDD_InfoServedNRCell_Information_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TDD_InfoServedNRCell_Information_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRFreqInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nR-TxBW */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoServedNRCell_Information_specs_1 = {
+	sizeof(struct X2N_TDD_InfoServedNRCell_Information),
+	offsetof(struct X2N_TDD_InfoServedNRCell_Information, _asn_ctx),
+	asn_MAP_X2N_TDD_InfoServedNRCell_Information_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_TDD_InfoServedNRCell_Information_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoServedNRCell_Information = {
+	"TDD-InfoServedNRCell-Information",
+	"TDD-InfoServedNRCell-Information",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1,
+	sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1)
+		/sizeof(asn_DEF_X2N_TDD_InfoServedNRCell_Information_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TDD_InfoServedNRCell_Information_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TDD_InfoServedNRCell_Information_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.h b/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.h
new file mode 100644
index 0000000..0538893
--- /dev/null
+++ b/asn1c_defs/X2N_TDD-InfoServedNRCell-Information.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TDD_InfoServedNRCell_Information_H_
+#define	_X2N_TDD_InfoServedNRCell_Information_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_NRFreqInfo.h"
+#include "X2N_NR-TxBW.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TDD-InfoServedNRCell-Information */
+typedef struct X2N_TDD_InfoServedNRCell_Information {
+	X2N_NRFreqInfo_t	 nRFreqInfo;
+	X2N_NR_TxBW_t	 nR_TxBW;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TDD_InfoServedNRCell_Information_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TDD_InfoServedNRCell_Information;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_TDD_InfoServedNRCell_Information_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_TDD_InfoServedNRCell_Information_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TDD_InfoServedNRCell_Information_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TargetCellInUTRAN.c b/asn1c_defs/X2N_TargetCellInUTRAN.c
new file mode 100644
index 0000000..650013e
--- /dev/null
+++ b/asn1c_defs/X2N_TargetCellInUTRAN.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TargetCellInUTRAN.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_TargetCellInUTRAN_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TargetCellInUTRAN = {
+	"TargetCellInUTRAN",
+	"TargetCellInUTRAN",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_TargetCellInUTRAN_tags_1,
+	sizeof(asn_DEF_X2N_TargetCellInUTRAN_tags_1)
+		/sizeof(asn_DEF_X2N_TargetCellInUTRAN_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TargetCellInUTRAN_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TargetCellInUTRAN_tags_1)
+		/sizeof(asn_DEF_X2N_TargetCellInUTRAN_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TargetCellInUTRAN.h b/asn1c_defs/X2N_TargetCellInUTRAN.h
new file mode 100644
index 0000000..72f6e79
--- /dev/null
+++ b/asn1c_defs/X2N_TargetCellInUTRAN.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TargetCellInUTRAN_H_
+#define	_X2N_TargetCellInUTRAN_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TargetCellInUTRAN */
+typedef OCTET_STRING_t	 X2N_TargetCellInUTRAN_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TargetCellInUTRAN;
+asn_struct_free_f X2N_TargetCellInUTRAN_free;
+asn_struct_print_f X2N_TargetCellInUTRAN_print;
+asn_constr_check_f X2N_TargetCellInUTRAN_constraint;
+ber_type_decoder_f X2N_TargetCellInUTRAN_decode_ber;
+der_type_encoder_f X2N_TargetCellInUTRAN_encode_der;
+xer_type_decoder_f X2N_TargetCellInUTRAN_decode_xer;
+xer_type_encoder_f X2N_TargetCellInUTRAN_encode_xer;
+per_type_decoder_f X2N_TargetCellInUTRAN_decode_uper;
+per_type_encoder_f X2N_TargetCellInUTRAN_encode_uper;
+per_type_decoder_f X2N_TargetCellInUTRAN_decode_aper;
+per_type_encoder_f X2N_TargetCellInUTRAN_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TargetCellInUTRAN_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.c b/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.c
new file mode 100644
index 0000000..af65276
--- /dev/null
+++ b/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TargeteNBtoSource-eNBTransparentContainer.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer = {
+	"TargeteNBtoSource-eNBTransparentContainer",
+	"TargeteNBtoSource-eNBTransparentContainer",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1,
+	sizeof(asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1)
+		/sizeof(asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1)
+		/sizeof(asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.h b/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.h
new file mode 100644
index 0000000..9c83746
--- /dev/null
+++ b/asn1c_defs/X2N_TargeteNBtoSource-eNBTransparentContainer.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TargeteNBtoSource_eNBTransparentContainer_H_
+#define	_X2N_TargeteNBtoSource_eNBTransparentContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TargeteNBtoSource-eNBTransparentContainer */
+typedef OCTET_STRING_t	 X2N_TargeteNBtoSource_eNBTransparentContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TargeteNBtoSource_eNBTransparentContainer;
+asn_struct_free_f X2N_TargeteNBtoSource_eNBTransparentContainer_free;
+asn_struct_print_f X2N_TargeteNBtoSource_eNBTransparentContainer_print;
+asn_constr_check_f X2N_TargeteNBtoSource_eNBTransparentContainer_constraint;
+ber_type_decoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_decode_ber;
+der_type_encoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_encode_der;
+xer_type_decoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_decode_xer;
+xer_type_encoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_encode_xer;
+per_type_decoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_decode_uper;
+per_type_encoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_encode_uper;
+per_type_decoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_decode_aper;
+per_type_encoder_f X2N_TargeteNBtoSource_eNBTransparentContainer_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TargeteNBtoSource_eNBTransparentContainer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Threshold-RSRP.c b/asn1c_defs/X2N_Threshold-RSRP.c
new file mode 100644
index 0000000..1fbee6f
--- /dev/null
+++ b/asn1c_defs/X2N_Threshold-RSRP.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Threshold-RSRP.h"
+
+int
+X2N_Threshold_RSRP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 97)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Threshold_RSRP_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  97 }	/* (0..97) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Threshold_RSRP_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Threshold_RSRP = {
+	"Threshold-RSRP",
+	"Threshold-RSRP",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Threshold_RSRP_tags_1,
+	sizeof(asn_DEF_X2N_Threshold_RSRP_tags_1)
+		/sizeof(asn_DEF_X2N_Threshold_RSRP_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Threshold_RSRP_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Threshold_RSRP_tags_1)
+		/sizeof(asn_DEF_X2N_Threshold_RSRP_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Threshold_RSRP_constr_1, X2N_Threshold_RSRP_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Threshold-RSRP.h b/asn1c_defs/X2N_Threshold-RSRP.h
new file mode 100644
index 0000000..fa567ae
--- /dev/null
+++ b/asn1c_defs/X2N_Threshold-RSRP.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Threshold_RSRP_H_
+#define	_X2N_Threshold_RSRP_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Threshold-RSRP */
+typedef long	 X2N_Threshold_RSRP_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Threshold_RSRP_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Threshold_RSRP;
+asn_struct_free_f X2N_Threshold_RSRP_free;
+asn_struct_print_f X2N_Threshold_RSRP_print;
+asn_constr_check_f X2N_Threshold_RSRP_constraint;
+ber_type_decoder_f X2N_Threshold_RSRP_decode_ber;
+der_type_encoder_f X2N_Threshold_RSRP_encode_der;
+xer_type_decoder_f X2N_Threshold_RSRP_decode_xer;
+xer_type_encoder_f X2N_Threshold_RSRP_encode_xer;
+per_type_decoder_f X2N_Threshold_RSRP_decode_uper;
+per_type_encoder_f X2N_Threshold_RSRP_encode_uper;
+per_type_decoder_f X2N_Threshold_RSRP_decode_aper;
+per_type_encoder_f X2N_Threshold_RSRP_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Threshold_RSRP_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Threshold-RSRQ.c b/asn1c_defs/X2N_Threshold-RSRQ.c
new file mode 100644
index 0000000..7a55944
--- /dev/null
+++ b/asn1c_defs/X2N_Threshold-RSRQ.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Threshold-RSRQ.h"
+
+int
+X2N_Threshold_RSRQ_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 34)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Threshold_RSRQ_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6,  0,  34 }	/* (0..34) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Threshold_RSRQ_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Threshold_RSRQ = {
+	"Threshold-RSRQ",
+	"Threshold-RSRQ",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Threshold_RSRQ_tags_1,
+	sizeof(asn_DEF_X2N_Threshold_RSRQ_tags_1)
+		/sizeof(asn_DEF_X2N_Threshold_RSRQ_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Threshold_RSRQ_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Threshold_RSRQ_tags_1)
+		/sizeof(asn_DEF_X2N_Threshold_RSRQ_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Threshold_RSRQ_constr_1, X2N_Threshold_RSRQ_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Threshold-RSRQ.h b/asn1c_defs/X2N_Threshold-RSRQ.h
new file mode 100644
index 0000000..32b1eb6
--- /dev/null
+++ b/asn1c_defs/X2N_Threshold-RSRQ.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Threshold_RSRQ_H_
+#define	_X2N_Threshold_RSRQ_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Threshold-RSRQ */
+typedef long	 X2N_Threshold_RSRQ_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Threshold_RSRQ_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Threshold_RSRQ;
+asn_struct_free_f X2N_Threshold_RSRQ_free;
+asn_struct_print_f X2N_Threshold_RSRQ_print;
+asn_constr_check_f X2N_Threshold_RSRQ_constraint;
+ber_type_decoder_f X2N_Threshold_RSRQ_decode_ber;
+der_type_encoder_f X2N_Threshold_RSRQ_encode_der;
+xer_type_decoder_f X2N_Threshold_RSRQ_decode_xer;
+xer_type_encoder_f X2N_Threshold_RSRQ_encode_xer;
+per_type_decoder_f X2N_Threshold_RSRQ_decode_uper;
+per_type_encoder_f X2N_Threshold_RSRQ_encode_uper;
+per_type_decoder_f X2N_Threshold_RSRQ_decode_aper;
+per_type_encoder_f X2N_Threshold_RSRQ_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Threshold_RSRQ_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.c b/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.c
new file mode 100644
index 0000000..62993ab
--- /dev/null
+++ b/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Time-UE-StayedInCell-EnhancedGranularity.h"
+
+int
+X2N_Time_UE_StayedInCell_EnhancedGranularity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 40950)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_Time_UE_StayedInCell_EnhancedGranularity_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  40950 }	/* (0..40950) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity = {
+	"Time-UE-StayedInCell-EnhancedGranularity",
+	"Time-UE-StayedInCell-EnhancedGranularity",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1,
+	sizeof(asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1)
+		/sizeof(asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1)
+		/sizeof(asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Time_UE_StayedInCell_EnhancedGranularity_constr_1, X2N_Time_UE_StayedInCell_EnhancedGranularity_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.h b/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.h
new file mode 100644
index 0000000..3f02a82
--- /dev/null
+++ b/asn1c_defs/X2N_Time-UE-StayedInCell-EnhancedGranularity.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Time_UE_StayedInCell_EnhancedGranularity_H_
+#define	_X2N_Time_UE_StayedInCell_EnhancedGranularity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Time-UE-StayedInCell-EnhancedGranularity */
+typedef long	 X2N_Time_UE_StayedInCell_EnhancedGranularity_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Time_UE_StayedInCell_EnhancedGranularity;
+asn_struct_free_f X2N_Time_UE_StayedInCell_EnhancedGranularity_free;
+asn_struct_print_f X2N_Time_UE_StayedInCell_EnhancedGranularity_print;
+asn_constr_check_f X2N_Time_UE_StayedInCell_EnhancedGranularity_constraint;
+ber_type_decoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_decode_ber;
+der_type_encoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_encode_der;
+xer_type_decoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_decode_xer;
+xer_type_encoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_encode_xer;
+per_type_decoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_decode_uper;
+per_type_encoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_encode_uper;
+per_type_decoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_decode_aper;
+per_type_encoder_f X2N_Time_UE_StayedInCell_EnhancedGranularity_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Time_UE_StayedInCell_EnhancedGranularity_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Time-UE-StayedInCell.c b/asn1c_defs/X2N_Time-UE-StayedInCell.c
new file mode 100644
index 0000000..37c1dcf
--- /dev/null
+++ b/asn1c_defs/X2N_Time-UE-StayedInCell.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Time-UE-StayedInCell.h"
+
+int
+X2N_Time_UE_StayedInCell_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Time_UE_StayedInCell_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Time_UE_StayedInCell_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Time_UE_StayedInCell = {
+	"Time-UE-StayedInCell",
+	"Time-UE-StayedInCell",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_Time_UE_StayedInCell_tags_1,
+	sizeof(asn_DEF_X2N_Time_UE_StayedInCell_tags_1)
+		/sizeof(asn_DEF_X2N_Time_UE_StayedInCell_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Time_UE_StayedInCell_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Time_UE_StayedInCell_tags_1)
+		/sizeof(asn_DEF_X2N_Time_UE_StayedInCell_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Time_UE_StayedInCell_constr_1, X2N_Time_UE_StayedInCell_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_Time-UE-StayedInCell.h b/asn1c_defs/X2N_Time-UE-StayedInCell.h
new file mode 100644
index 0000000..2f0d434
--- /dev/null
+++ b/asn1c_defs/X2N_Time-UE-StayedInCell.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Time_UE_StayedInCell_H_
+#define	_X2N_Time_UE_StayedInCell_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_Time-UE-StayedInCell */
+typedef long	 X2N_Time_UE_StayedInCell_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Time_UE_StayedInCell_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Time_UE_StayedInCell;
+asn_struct_free_f X2N_Time_UE_StayedInCell_free;
+asn_struct_print_f X2N_Time_UE_StayedInCell_print;
+asn_constr_check_f X2N_Time_UE_StayedInCell_constraint;
+ber_type_decoder_f X2N_Time_UE_StayedInCell_decode_ber;
+der_type_encoder_f X2N_Time_UE_StayedInCell_encode_der;
+xer_type_decoder_f X2N_Time_UE_StayedInCell_decode_xer;
+xer_type_encoder_f X2N_Time_UE_StayedInCell_encode_xer;
+per_type_decoder_f X2N_Time_UE_StayedInCell_decode_uper;
+per_type_encoder_f X2N_Time_UE_StayedInCell_encode_uper;
+per_type_decoder_f X2N_Time_UE_StayedInCell_decode_aper;
+per_type_encoder_f X2N_Time_UE_StayedInCell_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Time_UE_StayedInCell_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TimeToWait.c b/asn1c_defs/X2N_TimeToWait.c
new file mode 100644
index 0000000..c7c3040
--- /dev/null
+++ b/asn1c_defs/X2N_TimeToWait.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TimeToWait.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_TimeToWait_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_TimeToWait_value2enum_1[] = {
+	{ 0,	3,	"v1s" },
+	{ 1,	3,	"v2s" },
+	{ 2,	3,	"v5s" },
+	{ 3,	4,	"v10s" },
+	{ 4,	4,	"v20s" },
+	{ 5,	4,	"v60s" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_TimeToWait_enum2value_1[] = {
+	3,	/* v10s(3) */
+	0,	/* v1s(0) */
+	4,	/* v20s(4) */
+	1,	/* v2s(1) */
+	2,	/* v5s(2) */
+	5	/* v60s(5) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_TimeToWait_specs_1 = {
+	asn_MAP_X2N_TimeToWait_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_TimeToWait_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TimeToWait_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TimeToWait = {
+	"TimeToWait",
+	"TimeToWait",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_TimeToWait_tags_1,
+	sizeof(asn_DEF_X2N_TimeToWait_tags_1)
+		/sizeof(asn_DEF_X2N_TimeToWait_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TimeToWait_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TimeToWait_tags_1)
+		/sizeof(asn_DEF_X2N_TimeToWait_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TimeToWait_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_TimeToWait_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TimeToWait.h b/asn1c_defs/X2N_TimeToWait.h
new file mode 100644
index 0000000..f074c05
--- /dev/null
+++ b/asn1c_defs/X2N_TimeToWait.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TimeToWait_H_
+#define	_X2N_TimeToWait_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_TimeToWait {
+	X2N_TimeToWait_v1s	= 0,
+	X2N_TimeToWait_v2s	= 1,
+	X2N_TimeToWait_v5s	= 2,
+	X2N_TimeToWait_v10s	= 3,
+	X2N_TimeToWait_v20s	= 4,
+	X2N_TimeToWait_v60s	= 5
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_TimeToWait;
+
+/* X2N_TimeToWait */
+typedef long	 X2N_TimeToWait_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TimeToWait;
+asn_struct_free_f X2N_TimeToWait_free;
+asn_struct_print_f X2N_TimeToWait_print;
+asn_constr_check_f X2N_TimeToWait_constraint;
+ber_type_decoder_f X2N_TimeToWait_decode_ber;
+der_type_encoder_f X2N_TimeToWait_encode_der;
+xer_type_decoder_f X2N_TimeToWait_decode_xer;
+xer_type_encoder_f X2N_TimeToWait_encode_xer;
+per_type_decoder_f X2N_TimeToWait_decode_uper;
+per_type_encoder_f X2N_TimeToWait_encode_uper;
+per_type_decoder_f X2N_TimeToWait_decode_aper;
+per_type_encoder_f X2N_TimeToWait_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TimeToWait_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TraceActivation.c b/asn1c_defs/X2N_TraceActivation.c
new file mode 100644
index 0000000..7e3a043
--- /dev/null
+++ b/asn1c_defs/X2N_TraceActivation.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TraceActivation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_TraceActivation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation, eUTRANTraceID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EUTRANTraceID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"eUTRANTraceID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation, interfacesToTrace),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_InterfacesToTrace,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"interfacesToTrace"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation, traceDepth),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TraceDepth,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"traceDepth"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TraceActivation, traceCollectionEntityIPAddress),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TraceCollectionEntityIPAddress,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"traceCollectionEntityIPAddress"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TraceActivation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P207,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TraceActivation_oms_1[] = { 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_TraceActivation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TraceActivation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eUTRANTraceID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interfacesToTrace */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* traceDepth */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* traceCollectionEntityIPAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_TraceActivation_specs_1 = {
+	sizeof(struct X2N_TraceActivation),
+	offsetof(struct X2N_TraceActivation, _asn_ctx),
+	asn_MAP_X2N_TraceActivation_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_TraceActivation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TraceActivation = {
+	"TraceActivation",
+	"TraceActivation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TraceActivation_tags_1,
+	sizeof(asn_DEF_X2N_TraceActivation_tags_1)
+		/sizeof(asn_DEF_X2N_TraceActivation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TraceActivation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TraceActivation_tags_1)
+		/sizeof(asn_DEF_X2N_TraceActivation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TraceActivation_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_TraceActivation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TraceActivation.h b/asn1c_defs/X2N_TraceActivation.h
new file mode 100644
index 0000000..9de1261
--- /dev/null
+++ b/asn1c_defs/X2N_TraceActivation.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TraceActivation_H_
+#define	_X2N_TraceActivation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_EUTRANTraceID.h"
+#include "X2N_InterfacesToTrace.h"
+#include "X2N_TraceDepth.h"
+#include "X2N_TraceCollectionEntityIPAddress.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TraceActivation */
+typedef struct X2N_TraceActivation {
+	X2N_EUTRANTraceID_t	 eUTRANTraceID;
+	X2N_InterfacesToTrace_t	 interfacesToTrace;
+	X2N_TraceDepth_t	 traceDepth;
+	X2N_TraceCollectionEntityIPAddress_t	 traceCollectionEntityIPAddress;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TraceActivation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TraceActivation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TraceActivation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TraceCollectionEntityIPAddress.c b/asn1c_defs/X2N_TraceCollectionEntityIPAddress.c
new file mode 100644
index 0000000..84afc4d
--- /dev/null
+++ b/asn1c_defs/X2N_TraceCollectionEntityIPAddress.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TraceCollectionEntityIPAddress.h"
+
+int
+X2N_TraceCollectionEntityIPAddress_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 160)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TraceCollectionEntityIPAddress_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  160 }	/* (SIZE(1..160,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TraceCollectionEntityIPAddress = {
+	"TraceCollectionEntityIPAddress",
+	"TraceCollectionEntityIPAddress",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1,
+	sizeof(asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1)
+		/sizeof(asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1)
+		/sizeof(asn_DEF_X2N_TraceCollectionEntityIPAddress_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TraceCollectionEntityIPAddress_constr_1, X2N_TraceCollectionEntityIPAddress_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TraceCollectionEntityIPAddress.h b/asn1c_defs/X2N_TraceCollectionEntityIPAddress.h
new file mode 100644
index 0000000..de8b2ba
--- /dev/null
+++ b/asn1c_defs/X2N_TraceCollectionEntityIPAddress.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TraceCollectionEntityIPAddress_H_
+#define	_X2N_TraceCollectionEntityIPAddress_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TraceCollectionEntityIPAddress */
+typedef BIT_STRING_t	 X2N_TraceCollectionEntityIPAddress_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TraceCollectionEntityIPAddress_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TraceCollectionEntityIPAddress;
+asn_struct_free_f X2N_TraceCollectionEntityIPAddress_free;
+asn_struct_print_f X2N_TraceCollectionEntityIPAddress_print;
+asn_constr_check_f X2N_TraceCollectionEntityIPAddress_constraint;
+ber_type_decoder_f X2N_TraceCollectionEntityIPAddress_decode_ber;
+der_type_encoder_f X2N_TraceCollectionEntityIPAddress_encode_der;
+xer_type_decoder_f X2N_TraceCollectionEntityIPAddress_decode_xer;
+xer_type_encoder_f X2N_TraceCollectionEntityIPAddress_encode_xer;
+per_type_decoder_f X2N_TraceCollectionEntityIPAddress_decode_uper;
+per_type_encoder_f X2N_TraceCollectionEntityIPAddress_encode_uper;
+per_type_decoder_f X2N_TraceCollectionEntityIPAddress_decode_aper;
+per_type_encoder_f X2N_TraceCollectionEntityIPAddress_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TraceCollectionEntityIPAddress_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TraceDepth.c b/asn1c_defs/X2N_TraceDepth.c
new file mode 100644
index 0000000..9ca3c13
--- /dev/null
+++ b/asn1c_defs/X2N_TraceDepth.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TraceDepth.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TraceDepth_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_TraceDepth_value2enum_1[] = {
+	{ 0,	7,	"minimum" },
+	{ 1,	6,	"medium" },
+	{ 2,	7,	"maximum" },
+	{ 3,	37,	"minimumWithoutVendorSpecificExtension" },
+	{ 4,	36,	"mediumWithoutVendorSpecificExtension" },
+	{ 5,	37,	"maximumWithoutVendorSpecificExtension" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_TraceDepth_enum2value_1[] = {
+	2,	/* maximum(2) */
+	5,	/* maximumWithoutVendorSpecificExtension(5) */
+	1,	/* medium(1) */
+	4,	/* mediumWithoutVendorSpecificExtension(4) */
+	0,	/* minimum(0) */
+	3	/* minimumWithoutVendorSpecificExtension(3) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_TraceDepth_specs_1 = {
+	asn_MAP_X2N_TraceDepth_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_TraceDepth_enum2value_1,	/* N => "tag"; sorted by N */
+	6,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TraceDepth_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TraceDepth = {
+	"TraceDepth",
+	"TraceDepth",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_TraceDepth_tags_1,
+	sizeof(asn_DEF_X2N_TraceDepth_tags_1)
+		/sizeof(asn_DEF_X2N_TraceDepth_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TraceDepth_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TraceDepth_tags_1)
+		/sizeof(asn_DEF_X2N_TraceDepth_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TraceDepth_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_TraceDepth_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TraceDepth.h b/asn1c_defs/X2N_TraceDepth.h
new file mode 100644
index 0000000..d91e9d2
--- /dev/null
+++ b/asn1c_defs/X2N_TraceDepth.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TraceDepth_H_
+#define	_X2N_TraceDepth_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_TraceDepth {
+	X2N_TraceDepth_minimum	= 0,
+	X2N_TraceDepth_medium	= 1,
+	X2N_TraceDepth_maximum	= 2,
+	X2N_TraceDepth_minimumWithoutVendorSpecificExtension	= 3,
+	X2N_TraceDepth_mediumWithoutVendorSpecificExtension	= 4,
+	X2N_TraceDepth_maximumWithoutVendorSpecificExtension	= 5
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_TraceDepth;
+
+/* X2N_TraceDepth */
+typedef long	 X2N_TraceDepth_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TraceDepth_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TraceDepth;
+extern const asn_INTEGER_specifics_t asn_SPC_TraceDepth_specs_1;
+asn_struct_free_f TraceDepth_free;
+asn_struct_print_f TraceDepth_print;
+asn_constr_check_f TraceDepth_constraint;
+ber_type_decoder_f TraceDepth_decode_ber;
+der_type_encoder_f TraceDepth_encode_der;
+xer_type_decoder_f TraceDepth_decode_xer;
+xer_type_encoder_f TraceDepth_encode_xer;
+per_type_decoder_f TraceDepth_decode_uper;
+per_type_encoder_f TraceDepth_encode_uper;
+per_type_decoder_f TraceDepth_decode_aper;
+per_type_encoder_f TraceDepth_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TraceDepth_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_Transmission-Bandwidth.c b/asn1c_defs/X2N_Transmission-Bandwidth.c
new file mode 100644
index 0000000..cdd3bfe
--- /dev/null
+++ b/asn1c_defs/X2N_Transmission-Bandwidth.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_Transmission-Bandwidth.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_Transmission_Bandwidth_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  5 }	/* (0..5,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_Transmission_Bandwidth_value2enum_1[] = {
+	{ 0,	3,	"bw6" },
+	{ 1,	4,	"bw15" },
+	{ 2,	4,	"bw25" },
+	{ 3,	4,	"bw50" },
+	{ 4,	4,	"bw75" },
+	{ 5,	5,	"bw100" },
+	{ 6,	3,	"bw1" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_Transmission_Bandwidth_enum2value_1[] = {
+	6,	/* bw1(6) */
+	5,	/* bw100(5) */
+	1,	/* bw15(1) */
+	2,	/* bw25(2) */
+	3,	/* bw50(3) */
+	0,	/* bw6(0) */
+	4	/* bw75(4) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_Transmission_Bandwidth_specs_1 = {
+	asn_MAP_X2N_Transmission_Bandwidth_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_Transmission_Bandwidth_enum2value_1,	/* N => "tag"; sorted by N */
+	7,	/* Number of elements in the maps */
+	7,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_Transmission_Bandwidth_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_Transmission_Bandwidth = {
+	"Transmission-Bandwidth",
+	"Transmission-Bandwidth",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_Transmission_Bandwidth_tags_1,
+	sizeof(asn_DEF_X2N_Transmission_Bandwidth_tags_1)
+		/sizeof(asn_DEF_X2N_Transmission_Bandwidth_tags_1[0]), /* 1 */
+	asn_DEF_X2N_Transmission_Bandwidth_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_Transmission_Bandwidth_tags_1)
+		/sizeof(asn_DEF_X2N_Transmission_Bandwidth_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_Transmission_Bandwidth_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_Transmission_Bandwidth_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_Transmission-Bandwidth.h b/asn1c_defs/X2N_Transmission-Bandwidth.h
new file mode 100644
index 0000000..c004d75
--- /dev/null
+++ b/asn1c_defs/X2N_Transmission-Bandwidth.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_Transmission_Bandwidth_H_
+#define	_X2N_Transmission_Bandwidth_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_Transmission_Bandwidth {
+	X2N_Transmission_Bandwidth_bw6	= 0,
+	X2N_Transmission_Bandwidth_bw15	= 1,
+	X2N_Transmission_Bandwidth_bw25	= 2,
+	X2N_Transmission_Bandwidth_bw50	= 3,
+	X2N_Transmission_Bandwidth_bw75	= 4,
+	X2N_Transmission_Bandwidth_bw100	= 5,
+	/*
+	 * Enumeration is extensible
+	 */
+	X2N_Transmission_Bandwidth_bw1	= 6
+} e_X2N_Transmission_Bandwidth;
+
+/* X2N_Transmission-Bandwidth */
+typedef long	 X2N_Transmission_Bandwidth_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_Transmission_Bandwidth_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_Transmission_Bandwidth;
+extern const asn_INTEGER_specifics_t asn_SPC_Transmission_Bandwidth_specs_1;
+asn_struct_free_f Transmission_Bandwidth_free;
+asn_struct_print_f Transmission_Bandwidth_print;
+asn_constr_check_f Transmission_Bandwidth_constraint;
+ber_type_decoder_f Transmission_Bandwidth_decode_ber;
+der_type_encoder_f Transmission_Bandwidth_encode_der;
+xer_type_decoder_f Transmission_Bandwidth_decode_xer;
+xer_type_encoder_f Transmission_Bandwidth_encode_xer;
+per_type_decoder_f Transmission_Bandwidth_decode_uper;
+per_type_encoder_f Transmission_Bandwidth_encode_uper;
+per_type_decoder_f Transmission_Bandwidth_decode_aper;
+per_type_encoder_f Transmission_Bandwidth_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_Transmission_Bandwidth_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TransportLayerAddress.c b/asn1c_defs/X2N_TransportLayerAddress.c
new file mode 100644
index 0000000..b9baaa6
--- /dev/null
+++ b/asn1c_defs/X2N_TransportLayerAddress.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TransportLayerAddress.h"
+
+int
+X2N_TransportLayerAddress_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 160)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TransportLayerAddress_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  160 }	/* (SIZE(1..160,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TransportLayerAddress_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TransportLayerAddress = {
+	"TransportLayerAddress",
+	"TransportLayerAddress",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_TransportLayerAddress_tags_1,
+	sizeof(asn_DEF_X2N_TransportLayerAddress_tags_1)
+		/sizeof(asn_DEF_X2N_TransportLayerAddress_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TransportLayerAddress_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TransportLayerAddress_tags_1)
+		/sizeof(asn_DEF_X2N_TransportLayerAddress_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TransportLayerAddress_constr_1, X2N_TransportLayerAddress_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TransportLayerAddress.h b/asn1c_defs/X2N_TransportLayerAddress.h
new file mode 100644
index 0000000..8a77e4f
--- /dev/null
+++ b/asn1c_defs/X2N_TransportLayerAddress.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TransportLayerAddress_H_
+#define	_X2N_TransportLayerAddress_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_TransportLayerAddress */
+typedef BIT_STRING_t	 X2N_TransportLayerAddress_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TransportLayerAddress_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TransportLayerAddress;
+asn_struct_free_f X2N_TransportLayerAddress_free;
+asn_struct_print_f X2N_TransportLayerAddress_print;
+asn_constr_check_f X2N_TransportLayerAddress_constraint;
+ber_type_decoder_f X2N_TransportLayerAddress_decode_ber;
+der_type_encoder_f X2N_TransportLayerAddress_encode_der;
+xer_type_decoder_f X2N_TransportLayerAddress_decode_xer;
+xer_type_encoder_f X2N_TransportLayerAddress_encode_xer;
+per_type_decoder_f X2N_TransportLayerAddress_decode_uper;
+per_type_encoder_f X2N_TransportLayerAddress_encode_uper;
+per_type_decoder_f X2N_TransportLayerAddress_decode_aper;
+per_type_encoder_f X2N_TransportLayerAddress_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TransportLayerAddress_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TriggeringMessage.c b/asn1c_defs/X2N_TriggeringMessage.c
new file mode 100644
index 0000000..56a1d25
--- /dev/null
+++ b/asn1c_defs/X2N_TriggeringMessage.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TriggeringMessage.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TriggeringMessage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_TriggeringMessage_value2enum_1[] = {
+	{ 0,	18,	"initiating-message" },
+	{ 1,	18,	"successful-outcome" },
+	{ 2,	20,	"unsuccessful-outcome" }
+};
+static const unsigned int asn_MAP_X2N_TriggeringMessage_enum2value_1[] = {
+	0,	/* initiating-message(0) */
+	1,	/* successful-outcome(1) */
+	2	/* unsuccessful-outcome(2) */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_TriggeringMessage_specs_1 = {
+	asn_MAP_X2N_TriggeringMessage_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_TriggeringMessage_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	0,	/* Enumeration is not extensible */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TriggeringMessage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TriggeringMessage = {
+	"TriggeringMessage",
+	"TriggeringMessage",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_TriggeringMessage_tags_1,
+	sizeof(asn_DEF_X2N_TriggeringMessage_tags_1)
+		/sizeof(asn_DEF_X2N_TriggeringMessage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TriggeringMessage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TriggeringMessage_tags_1)
+		/sizeof(asn_DEF_X2N_TriggeringMessage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TriggeringMessage_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_TriggeringMessage_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TriggeringMessage.h b/asn1c_defs/X2N_TriggeringMessage.h
new file mode 100644
index 0000000..b0e7d21
--- /dev/null
+++ b/asn1c_defs/X2N_TriggeringMessage.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-CommonDataTypes"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TriggeringMessage_H_
+#define	_X2N_TriggeringMessage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_TriggeringMessage {
+	X2N_TriggeringMessage_initiating_message	= 0,
+	X2N_TriggeringMessage_successful_outcome	= 1,
+	X2N_TriggeringMessage_unsuccessful_outcome	= 2
+} e_X2N_TriggeringMessage;
+
+/* X2N_TriggeringMessage */
+typedef long	 X2N_TriggeringMessage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TriggeringMessage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TriggeringMessage;
+extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1;
+asn_struct_free_f TriggeringMessage_free;
+asn_struct_print_f TriggeringMessage_print;
+asn_constr_check_f TriggeringMessage_constraint;
+ber_type_decoder_f TriggeringMessage_decode_ber;
+der_type_encoder_f TriggeringMessage_encode_der;
+xer_type_decoder_f TriggeringMessage_decode_xer;
+xer_type_encoder_f TriggeringMessage_encode_xer;
+per_type_decoder_f TriggeringMessage_decode_uper;
+per_type_encoder_f TriggeringMessage_encode_uper;
+per_type_decoder_f TriggeringMessage_decode_aper;
+per_type_encoder_f TriggeringMessage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TriggeringMessage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TunnelInformation.c b/asn1c_defs/X2N_TunnelInformation.c
new file mode 100644
index 0000000..7d530f8
--- /dev/null
+++ b/asn1c_defs/X2N_TunnelInformation.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TunnelInformation.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_TunnelInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_TunnelInformation, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_TransportLayerAddress,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"transportLayerAddress"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_TunnelInformation, uDP_Port_Number),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Port_Number,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uDP-Port-Number"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_TunnelInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P208,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_TunnelInformation_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_TunnelInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_TunnelInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uDP-Port-Number */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_TunnelInformation_specs_1 = {
+	sizeof(struct X2N_TunnelInformation),
+	offsetof(struct X2N_TunnelInformation, _asn_ctx),
+	asn_MAP_X2N_TunnelInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_TunnelInformation_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TunnelInformation = {
+	"TunnelInformation",
+	"TunnelInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_TunnelInformation_tags_1,
+	sizeof(asn_DEF_X2N_TunnelInformation_tags_1)
+		/sizeof(asn_DEF_X2N_TunnelInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TunnelInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TunnelInformation_tags_1)
+		/sizeof(asn_DEF_X2N_TunnelInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_TunnelInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_TunnelInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TunnelInformation.h b/asn1c_defs/X2N_TunnelInformation.h
new file mode 100644
index 0000000..d027c45
--- /dev/null
+++ b/asn1c_defs/X2N_TunnelInformation.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TunnelInformation_H_
+#define	_X2N_TunnelInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_TransportLayerAddress.h"
+#include "X2N_Port-Number.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_TunnelInformation */
+typedef struct X2N_TunnelInformation {
+	X2N_TransportLayerAddress_t	 transportLayerAddress;
+	X2N_Port_Number_t	*uDP_Port_Number;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_TunnelInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TunnelInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TunnelInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_TypeOfError.c b/asn1c_defs/X2N_TypeOfError.c
new file mode 100644
index 0000000..57e54fd
--- /dev/null
+++ b/asn1c_defs/X2N_TypeOfError.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_TypeOfError.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_TypeOfError_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_TypeOfError_value2enum_1[] = {
+	{ 0,	14,	"not-understood" },
+	{ 1,	7,	"missing" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_TypeOfError_enum2value_1[] = {
+	1,	/* missing(1) */
+	0	/* not-understood(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_TypeOfError_specs_1 = {
+	asn_MAP_X2N_TypeOfError_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_TypeOfError_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_TypeOfError_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_TypeOfError = {
+	"TypeOfError",
+	"TypeOfError",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_TypeOfError_tags_1,
+	sizeof(asn_DEF_X2N_TypeOfError_tags_1)
+		/sizeof(asn_DEF_X2N_TypeOfError_tags_1[0]), /* 1 */
+	asn_DEF_X2N_TypeOfError_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_TypeOfError_tags_1)
+		/sizeof(asn_DEF_X2N_TypeOfError_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_TypeOfError_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_TypeOfError_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_TypeOfError.h b/asn1c_defs/X2N_TypeOfError.h
new file mode 100644
index 0000000..bbda038
--- /dev/null
+++ b/asn1c_defs/X2N_TypeOfError.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_TypeOfError_H_
+#define	_X2N_TypeOfError_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_TypeOfError {
+	X2N_TypeOfError_not_understood	= 0,
+	X2N_TypeOfError_missing	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_TypeOfError;
+
+/* X2N_TypeOfError */
+typedef long	 X2N_TypeOfError_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_TypeOfError_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_TypeOfError;
+extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1;
+asn_struct_free_f TypeOfError_free;
+asn_struct_print_f TypeOfError_print;
+asn_constr_check_f TypeOfError_constraint;
+ber_type_decoder_f TypeOfError_decode_ber;
+der_type_encoder_f TypeOfError_encode_der;
+xer_type_decoder_f TypeOfError_decode_xer;
+xer_type_encoder_f TypeOfError_encode_xer;
+per_type_decoder_f TypeOfError_decode_uper;
+per_type_encoder_f TypeOfError_encode_uper;
+per_type_decoder_f TypeOfError_decode_aper;
+per_type_encoder_f TypeOfError_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_TypeOfError_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.c b/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.c
new file mode 100644
index 0000000..3089762
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.c
@@ -0,0 +1,118 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextInformation-SgNBModReq.h"
+
+#include "X2N_NRUESecurityCapabilities.h"
+#include "X2N_UEAggregateMaximumBitRate.h"
+#include "X2N_E-RABs-ToBeAdded-SgNBModReq-List.h"
+#include "X2N_E-RABs-ToBeModified-SgNBModReq-List.h"
+#include "X2N_E-RABs-ToBeReleased-SgNBModReq-List.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformation_SgNBModReq_1[] = {
+	{ ATF_POINTER, 7, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, nRUE_SecurityCapabilities),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_NRUESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"nRUE-SecurityCapabilities"
+		},
+	{ ATF_POINTER, 6, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, sgNB_SecurityKey),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SgNBSecurityKey,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-SecurityKey"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, sgNBUEAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNBUEAggregateMaximumBitRate"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, e_RABs_ToBeAdded),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_SgNBModReq_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeAdded"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, e_RABs_ToBeModified),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_SgNBModReq_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeModified"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, e_RABs_ToBeReleased),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_SgNBModReq_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeReleased"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformation_SgNBModReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P52,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextInformation_SgNBModReq_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformation_SgNBModReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nRUE-SecurityCapabilities */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-SecurityKey */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNBUEAggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RABs-ToBeAdded */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* e-RABs-ToBeModified */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeReleased */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformation_SgNBModReq_specs_1 = {
+	sizeof(struct X2N_UE_ContextInformation_SgNBModReq),
+	offsetof(struct X2N_UE_ContextInformation_SgNBModReq, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformation_SgNBModReq_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextInformation_SgNBModReq_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation_SgNBModReq = {
+	"UE-ContextInformation-SgNBModReq",
+	"UE-ContextInformation-SgNBModReq",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_SgNBModReq_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformation_SgNBModReq_1,
+	7,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformation_SgNBModReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.h b/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.h
new file mode 100644
index 0000000..bde9d1e
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformation-SgNBModReq.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextInformation_SgNBModReq_H_
+#define	_X2N_UE_ContextInformation_SgNBModReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SgNBSecurityKey.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_NRUESecurityCapabilities;
+struct X2N_UEAggregateMaximumBitRate;
+struct X2N_E_RABs_ToBeAdded_SgNBModReq_List;
+struct X2N_E_RABs_ToBeModified_SgNBModReq_List;
+struct X2N_E_RABs_ToBeReleased_SgNBModReq_List;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextInformation-SgNBModReq */
+typedef struct X2N_UE_ContextInformation_SgNBModReq {
+	struct X2N_NRUESecurityCapabilities	*nRUE_SecurityCapabilities;	/* OPTIONAL */
+	X2N_SgNBSecurityKey_t	*sgNB_SecurityKey;	/* OPTIONAL */
+	struct X2N_UEAggregateMaximumBitRate	*sgNBUEAggregateMaximumBitRate;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeAdded_SgNBModReq_List	*e_RABs_ToBeAdded;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeModified_SgNBModReq_List	*e_RABs_ToBeModified;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeReleased_SgNBModReq_List	*e_RABs_ToBeReleased;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformation_SgNBModReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation_SgNBModReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextInformation_SgNBModReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextInformation.c b/asn1c_defs/X2N_UE-ContextInformation.c
new file mode 100644
index 0000000..00fa7fe
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformation.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextInformation.h"
+
+#include "X2N_HandoverRestrictionList.h"
+#include "X2N_LocationReportingInformation.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, mME_UE_S1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_S1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-UE-S1AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, uESecurityCapabilities),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uESecurityCapabilities"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, aS_SecurityInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_AS_SecurityInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"aS-SecurityInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, uEaggregateMaximumBitRate),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uEaggregateMaximumBitRate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformation, subscriberProfileIDforRFP),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubscriberProfileIDforRFP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subscriberProfileIDforRFP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, e_RABs_ToBeSetup_List),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeSetup_List,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeSetup-List"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformation, rRC_Context),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RRC_Context,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rRC-Context"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_UE_ContextInformation, handoverRestrictionList),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HandoverRestrictionList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"handoverRestrictionList"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_UE_ContextInformation, locationReportingInformation),
+		(ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LocationReportingInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"locationReportingInformation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P0,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextInformation_oms_1[] = { 4, 7, 8, 9 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uESecurityCapabilities */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aS-SecurityInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uEaggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* subscriberProfileIDforRFP */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeSetup-List */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rRC-Context */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* handoverRestrictionList */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* locationReportingInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformation_specs_1 = {
+	sizeof(struct X2N_UE_ContextInformation),
+	offsetof(struct X2N_UE_ContextInformation, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformation_tag2el_1,
+	10,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextInformation_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	10,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation = {
+	"UE-ContextInformation",
+	"UE-ContextInformation",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformation_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextInformation_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformation_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformation_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformation_1,
+	10,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextInformation.h b/asn1c_defs/X2N_UE-ContextInformation.h
new file mode 100644
index 0000000..62584f7
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformation.h
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextInformation_H_
+#define	_X2N_UE_ContextInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_UE-S1AP-ID.h"
+#include "X2N_UESecurityCapabilities.h"
+#include "X2N_AS-SecurityInformation.h"
+#include "X2N_UEAggregateMaximumBitRate.h"
+#include "X2N_SubscriberProfileIDforRFP.h"
+#include "X2N_E-RABs-ToBeSetup-List.h"
+#include "X2N_RRC-Context.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_HandoverRestrictionList;
+struct X2N_LocationReportingInformation;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextInformation */
+typedef struct X2N_UE_ContextInformation {
+	X2N_UE_S1AP_ID_t	 mME_UE_S1AP_ID;
+	X2N_UESecurityCapabilities_t	 uESecurityCapabilities;
+	X2N_AS_SecurityInformation_t	 aS_SecurityInformation;
+	X2N_UEAggregateMaximumBitRate_t	 uEaggregateMaximumBitRate;
+	X2N_SubscriberProfileIDforRFP_t	*subscriberProfileIDforRFP;	/* OPTIONAL */
+	X2N_E_RABs_ToBeSetup_List_t	 e_RABs_ToBeSetup_List;
+	X2N_RRC_Context_t	 rRC_Context;
+	struct X2N_HandoverRestrictionList	*handoverRestrictionList;	/* OPTIONAL */
+	struct X2N_LocationReportingInformation	*locationReportingInformation;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextInformationRetrieve.c b/asn1c_defs/X2N_UE-ContextInformationRetrieve.c
new file mode 100644
index 0000000..40023d5
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformationRetrieve.c
@@ -0,0 +1,166 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextInformationRetrieve.h"
+
+#include "X2N_HandoverRestrictionList.h"
+#include "X2N_LocationReportingInformation.h"
+#include "X2N_MDTPLMNList.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationRetrieve_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, mME_UE_S1AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_S1AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"mME-UE-S1AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, uESecurityCapabilities),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uESecurityCapabilities"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, aS_SecurityInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_AS_SecurityInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"aS-SecurityInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, uEaggregateMaximumBitRate),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uEaggregateMaximumBitRate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformationRetrieve, subscriberProfileIDforRFP),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SubscriberProfileIDforRFP,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"subscriberProfileIDforRFP"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, e_RABs_ToBeSetup_ListRetrieve),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeSetup_ListRetrieve,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeSetup-ListRetrieve"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextInformationRetrieve, rRC_Context),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RRC_Context,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"rRC-Context"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_UE_ContextInformationRetrieve, handoverRestrictionList),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_HandoverRestrictionList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"handoverRestrictionList"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_UE_ContextInformationRetrieve, locationReportingInformation),
+		(ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_LocationReportingInformation,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"locationReportingInformation"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_UE_ContextInformationRetrieve, managBasedMDTallowed),
+		(ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ManagementBasedMDTallowed,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"managBasedMDTallowed"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_UE_ContextInformationRetrieve, managBasedMDTPLMNList),
+		(ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_MDTPLMNList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"managBasedMDTPLMNList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformationRetrieve, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (11 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P42,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextInformationRetrieve_oms_1[] = { 4, 7, 8, 9, 10, 11 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformationRetrieve_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uESecurityCapabilities */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aS-SecurityInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uEaggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* subscriberProfileIDforRFP */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeSetup-ListRetrieve */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rRC-Context */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* handoverRestrictionList */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* locationReportingInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* managBasedMDTallowed */
+    { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* managBasedMDTPLMNList */
+    { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationRetrieve_specs_1 = {
+	sizeof(struct X2N_UE_ContextInformationRetrieve),
+	offsetof(struct X2N_UE_ContextInformationRetrieve, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformationRetrieve_tag2el_1,
+	12,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextInformationRetrieve_oms_1,	/* Optional members */
+	6, 0,	/* Root/Additions */
+	12,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationRetrieve = {
+	"UE-ContextInformationRetrieve",
+	"UE-ContextInformationRetrieve",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationRetrieve_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformationRetrieve_1,
+	12,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformationRetrieve_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextInformationRetrieve.h b/asn1c_defs/X2N_UE-ContextInformationRetrieve.h
new file mode 100644
index 0000000..55de604
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformationRetrieve.h
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextInformationRetrieve_H_
+#define	_X2N_UE_ContextInformationRetrieve_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_UE-S1AP-ID.h"
+#include "X2N_UESecurityCapabilities.h"
+#include "X2N_AS-SecurityInformation.h"
+#include "X2N_UEAggregateMaximumBitRate.h"
+#include "X2N_SubscriberProfileIDforRFP.h"
+#include "X2N_E-RABs-ToBeSetup-ListRetrieve.h"
+#include "X2N_RRC-Context.h"
+#include "X2N_ManagementBasedMDTallowed.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_HandoverRestrictionList;
+struct X2N_LocationReportingInformation;
+struct X2N_MDTPLMNList;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextInformationRetrieve */
+typedef struct X2N_UE_ContextInformationRetrieve {
+	X2N_UE_S1AP_ID_t	 mME_UE_S1AP_ID;
+	X2N_UESecurityCapabilities_t	 uESecurityCapabilities;
+	X2N_AS_SecurityInformation_t	 aS_SecurityInformation;
+	X2N_UEAggregateMaximumBitRate_t	 uEaggregateMaximumBitRate;
+	X2N_SubscriberProfileIDforRFP_t	*subscriberProfileIDforRFP;	/* OPTIONAL */
+	X2N_E_RABs_ToBeSetup_ListRetrieve_t	 e_RABs_ToBeSetup_ListRetrieve;
+	X2N_RRC_Context_t	 rRC_Context;
+	struct X2N_HandoverRestrictionList	*handoverRestrictionList;	/* OPTIONAL */
+	struct X2N_LocationReportingInformation	*locationReportingInformation;	/* OPTIONAL */
+	X2N_ManagementBasedMDTallowed_t	*managBasedMDTallowed;	/* OPTIONAL */
+	struct X2N_MDTPLMNList	*managBasedMDTPLMNList;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformationRetrieve_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationRetrieve;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextInformationRetrieve_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.c b/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.c
new file mode 100644
index 0000000..75d8469
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.c
@@ -0,0 +1,118 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextInformationSeNBModReq.h"
+
+#include "X2N_UESecurityCapabilities.h"
+#include "X2N_UEAggregateMaximumBitRate.h"
+#include "X2N_E-RABs-ToBeAdded-List-ModReq.h"
+#include "X2N_E-RABs-ToBeModified-List-ModReq.h"
+#include "X2N_E-RABs-ToBeReleased-List-ModReq.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextInformationSeNBModReq_1[] = {
+	{ ATF_POINTER, 7, offsetof(struct X2N_UE_ContextInformationSeNBModReq, uE_SecurityCapabilities),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UESecurityCapabilities,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uE-SecurityCapabilities"
+		},
+	{ ATF_POINTER, 6, offsetof(struct X2N_UE_ContextInformationSeNBModReq, seNB_SecurityKey),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SeNBSecurityKey,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-SecurityKey"
+		},
+	{ ATF_POINTER, 5, offsetof(struct X2N_UE_ContextInformationSeNBModReq, seNBUEAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UEAggregateMaximumBitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNBUEAggregateMaximumBitRate"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_UE_ContextInformationSeNBModReq, e_RABs_ToBeAdded),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeAdded_List_ModReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeAdded"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_UE_ContextInformationSeNBModReq, e_RABs_ToBeModified),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeModified_List_ModReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeModified"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_UE_ContextInformationSeNBModReq, e_RABs_ToBeReleased),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_E_RABs_ToBeReleased_List_ModReq,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"e-RABs-ToBeReleased"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextInformationSeNBModReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P23,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextInformationSeNBModReq_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextInformationSeNBModReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uE-SecurityCapabilities */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-SecurityKey */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seNBUEAggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e-RABs-ToBeAdded */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* e-RABs-ToBeModified */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* e-RABs-ToBeReleased */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextInformationSeNBModReq_specs_1 = {
+	sizeof(struct X2N_UE_ContextInformationSeNBModReq),
+	offsetof(struct X2N_UE_ContextInformationSeNBModReq, _asn_ctx),
+	asn_MAP_X2N_UE_ContextInformationSeNBModReq_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextInformationSeNBModReq_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	7,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSeNBModReq = {
+	"UE-ContextInformationSeNBModReq",
+	"UE-ContextInformationSeNBModReq",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextInformationSeNBModReq_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextInformationSeNBModReq_1,
+	7,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextInformationSeNBModReq_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.h b/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.h
new file mode 100644
index 0000000..710d3db
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextInformationSeNBModReq.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextInformationSeNBModReq_H_
+#define	_X2N_UE_ContextInformationSeNBModReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_SeNBSecurityKey.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_UESecurityCapabilities;
+struct X2N_UEAggregateMaximumBitRate;
+struct X2N_E_RABs_ToBeAdded_List_ModReq;
+struct X2N_E_RABs_ToBeModified_List_ModReq;
+struct X2N_E_RABs_ToBeReleased_List_ModReq;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextInformationSeNBModReq */
+typedef struct X2N_UE_ContextInformationSeNBModReq {
+	struct X2N_UESecurityCapabilities	*uE_SecurityCapabilities;	/* OPTIONAL */
+	X2N_SeNBSecurityKey_t	*seNB_SecurityKey;	/* OPTIONAL */
+	struct X2N_UEAggregateMaximumBitRate	*seNBUEAggregateMaximumBitRate;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeAdded_List_ModReq	*e_RABs_ToBeAdded;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeModified_List_ModReq	*e_RABs_ToBeModified;	/* OPTIONAL */
+	struct X2N_E_RABs_ToBeReleased_List_ModReq	*e_RABs_ToBeReleased;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextInformationSeNBModReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextInformationSeNBModReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextInformationSeNBModReq_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextKeptIndicator.c b/asn1c_defs/X2N_UE-ContextKeptIndicator.c
new file mode 100644
index 0000000..1dcc7fe
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextKeptIndicator.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextKeptIndicator.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_UE_ContextKeptIndicator_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_UE_ContextKeptIndicator_value2enum_1[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_UE_ContextKeptIndicator_enum2value_1[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_UE_ContextKeptIndicator_specs_1 = {
+	asn_MAP_X2N_UE_ContextKeptIndicator_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_UE_ContextKeptIndicator_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextKeptIndicator_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextKeptIndicator = {
+	"UE-ContextKeptIndicator",
+	"UE-ContextKeptIndicator",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_UE_ContextKeptIndicator_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextKeptIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextKeptIndicator_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextKeptIndicator_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextKeptIndicator_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextKeptIndicator_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UE_ContextKeptIndicator_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_UE_ContextKeptIndicator_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextKeptIndicator.h b/asn1c_defs/X2N_UE-ContextKeptIndicator.h
new file mode 100644
index 0000000..b582885
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextKeptIndicator.h
@@ -0,0 +1,51 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextKeptIndicator_H_
+#define	_X2N_UE_ContextKeptIndicator_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UE_ContextKeptIndicator {
+	X2N_UE_ContextKeptIndicator_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_UE_ContextKeptIndicator;
+
+/* X2N_UE-ContextKeptIndicator */
+typedef long	 X2N_UE_ContextKeptIndicator_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextKeptIndicator;
+asn_struct_free_f X2N_UE_ContextKeptIndicator_free;
+asn_struct_print_f X2N_UE_ContextKeptIndicator_print;
+asn_constr_check_f X2N_UE_ContextKeptIndicator_constraint;
+ber_type_decoder_f X2N_UE_ContextKeptIndicator_decode_ber;
+der_type_encoder_f X2N_UE_ContextKeptIndicator_encode_der;
+xer_type_decoder_f X2N_UE_ContextKeptIndicator_decode_xer;
+xer_type_encoder_f X2N_UE_ContextKeptIndicator_encode_xer;
+per_type_decoder_f X2N_UE_ContextKeptIndicator_decode_uper;
+per_type_encoder_f X2N_UE_ContextKeptIndicator_encode_uper;
+per_type_decoder_f X2N_UE_ContextKeptIndicator_decode_aper;
+per_type_encoder_f X2N_UE_ContextKeptIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextKeptIndicator_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.c b/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.c
new file mode 100644
index 0000000..e1f8b40
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextReferenceAtSeNB.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSeNB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB, source_GlobalSeNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GlobalENB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"source-GlobalSeNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB, seNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-UE-X2AP-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSeNB, seNB_UE_X2AP_ID_Extension),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"seNB-UE-X2AP-ID-Extension"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextReferenceAtSeNB, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextReferenceAtSeNB_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtSeNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalSeNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seNB-UE-X2AP-ID-Extension */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSeNB_specs_1 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSeNB),
+	offsetof(struct X2N_UE_ContextReferenceAtSeNB, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtSeNB_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextReferenceAtSeNB_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSeNB = {
+	"UE-ContextReferenceAtSeNB",
+	"UE-ContextReferenceAtSeNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSeNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtSeNB_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtSeNB_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.h b/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.h
new file mode 100644
index 0000000..134cf7f
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtSeNB.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextReferenceAtSeNB_H_
+#define	_X2N_UE_ContextReferenceAtSeNB_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GlobalENB-ID.h"
+#include "X2N_UE-X2AP-ID.h"
+#include "X2N_UE-X2AP-ID-Extension.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextReferenceAtSeNB */
+typedef struct X2N_UE_ContextReferenceAtSeNB {
+	X2N_GlobalENB_ID_t	 source_GlobalSeNB_ID;
+	X2N_UE_X2AP_ID_t	 seNB_UE_X2AP_ID;
+	X2N_UE_X2AP_ID_Extension_t	 seNB_UE_X2AP_ID_Extension;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtSeNB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSeNB;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextReferenceAtSeNB_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.c b/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.c
new file mode 100644
index 0000000..dfe2d69
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextReferenceAtSgNB.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtSgNB_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSgNB, source_GlobalSgNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_GlobalGNB_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"source-GlobalSgNB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtSgNB, sgNB_UE_X2AP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-UE-X2AP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextReferenceAtSgNB, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextReferenceAtSgNB_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtSgNB_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* source-GlobalSgNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sgNB-UE-X2AP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtSgNB_specs_1 = {
+	sizeof(struct X2N_UE_ContextReferenceAtSgNB),
+	offsetof(struct X2N_UE_ContextReferenceAtSgNB, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtSgNB_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextReferenceAtSgNB_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSgNB = {
+	"UE-ContextReferenceAtSgNB",
+	"UE-ContextReferenceAtSgNB",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtSgNB_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtSgNB_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtSgNB_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.h b/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.h
new file mode 100644
index 0000000..1d9e783
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtSgNB.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextReferenceAtSgNB_H_
+#define	_X2N_UE_ContextReferenceAtSgNB_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_GlobalGNB-ID.h"
+#include "X2N_SgNB-UE-X2AP-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextReferenceAtSgNB */
+typedef struct X2N_UE_ContextReferenceAtSgNB {
+	X2N_GlobalGNB_ID_t	 source_GlobalSgNB_ID;
+	X2N_SgNB_UE_X2AP_ID_t	 sgNB_UE_X2AP_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtSgNB_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtSgNB;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextReferenceAtSgNB_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtWT.c b/asn1c_defs/X2N_UE-ContextReferenceAtWT.c
new file mode 100644
index 0000000..6cc37c7
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtWT.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-ContextReferenceAtWT.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UE_ContextReferenceAtWT_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtWT, wTID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_WTID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wTID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UE_ContextReferenceAtWT, wT_UE_XwAP_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WT_UE_XwAP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wT-UE-XwAP-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UE_ContextReferenceAtWT, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P3,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UE_ContextReferenceAtWT_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UE_ContextReferenceAtWT_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wTID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* wT-UE-XwAP-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UE_ContextReferenceAtWT_specs_1 = {
+	sizeof(struct X2N_UE_ContextReferenceAtWT),
+	offsetof(struct X2N_UE_ContextReferenceAtWT, _asn_ctx),
+	asn_MAP_X2N_UE_ContextReferenceAtWT_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UE_ContextReferenceAtWT_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtWT = {
+	"UE-ContextReferenceAtWT",
+	"UE-ContextReferenceAtWT",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1,
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1)
+		/sizeof(asn_DEF_X2N_UE_ContextReferenceAtWT_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UE_ContextReferenceAtWT_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UE_ContextReferenceAtWT_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-ContextReferenceAtWT.h b/asn1c_defs/X2N_UE-ContextReferenceAtWT.h
new file mode 100644
index 0000000..6ca8d46
--- /dev/null
+++ b/asn1c_defs/X2N_UE-ContextReferenceAtWT.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_ContextReferenceAtWT_H_
+#define	_X2N_UE_ContextReferenceAtWT_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_WTID.h"
+#include "X2N_WT-UE-XwAP-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UE-ContextReferenceAtWT */
+typedef struct X2N_UE_ContextReferenceAtWT {
+	X2N_WTID_t	 wTID;
+	X2N_WT_UE_XwAP_ID_t	 wT_UE_XwAP_ID;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_ContextReferenceAtWT_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_ContextReferenceAtWT;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_ContextReferenceAtWT_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-HistoryInformation.c b/asn1c_defs/X2N_UE-HistoryInformation.c
new file mode 100644
index 0000000..77bc489
--- /dev/null
+++ b/asn1c_defs/X2N_UE-HistoryInformation.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-HistoryInformation.h"
+
+#include "X2N_LastVisitedCell-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_UE_HistoryInformation_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1,  16 }	/* (SIZE(1..16)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_UE_HistoryInformation_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_X2N_LastVisitedCell_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_HistoryInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_UE_HistoryInformation_specs_1 = {
+	sizeof(struct X2N_UE_HistoryInformation),
+	offsetof(struct X2N_UE_HistoryInformation, _asn_ctx),
+	2,	/* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_HistoryInformation = {
+	"UE-HistoryInformation",
+	"UE-HistoryInformation",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_UE_HistoryInformation_tags_1,
+	sizeof(asn_DEF_X2N_UE_HistoryInformation_tags_1)
+		/sizeof(asn_DEF_X2N_UE_HistoryInformation_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_HistoryInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_HistoryInformation_tags_1)
+		/sizeof(asn_DEF_X2N_UE_HistoryInformation_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UE_HistoryInformation_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_UE_HistoryInformation_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_UE_HistoryInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-HistoryInformation.h b/asn1c_defs/X2N_UE-HistoryInformation.h
new file mode 100644
index 0000000..b3a1a34
--- /dev/null
+++ b/asn1c_defs/X2N_UE-HistoryInformation.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_HistoryInformation_H_
+#define	_X2N_UE_HistoryInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_LastVisitedCell_Item;
+
+/* X2N_UE-HistoryInformation */
+typedef struct X2N_UE_HistoryInformation {
+	A_SEQUENCE_OF(struct X2N_LastVisitedCell_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UE_HistoryInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_HistoryInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_HistoryInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.c b/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.c
new file mode 100644
index 0000000..94215eb
--- /dev/null
+++ b/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-HistoryInformationFromTheUE.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_HistoryInformationFromTheUE = {
+	"UE-HistoryInformationFromTheUE",
+	"UE-HistoryInformationFromTheUE",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1,
+	sizeof(asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1)
+		/sizeof(asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1)
+		/sizeof(asn_DEF_X2N_UE_HistoryInformationFromTheUE_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.h b/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.h
new file mode 100644
index 0000000..051e179
--- /dev/null
+++ b/asn1c_defs/X2N_UE-HistoryInformationFromTheUE.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_HistoryInformationFromTheUE_H_
+#define	_X2N_UE_HistoryInformationFromTheUE_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-HistoryInformationFromTheUE */
+typedef OCTET_STRING_t	 X2N_UE_HistoryInformationFromTheUE_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_HistoryInformationFromTheUE;
+asn_struct_free_f X2N_UE_HistoryInformationFromTheUE_free;
+asn_struct_print_f X2N_UE_HistoryInformationFromTheUE_print;
+asn_constr_check_f X2N_UE_HistoryInformationFromTheUE_constraint;
+ber_type_decoder_f X2N_UE_HistoryInformationFromTheUE_decode_ber;
+der_type_encoder_f X2N_UE_HistoryInformationFromTheUE_encode_der;
+xer_type_decoder_f X2N_UE_HistoryInformationFromTheUE_decode_xer;
+xer_type_encoder_f X2N_UE_HistoryInformationFromTheUE_encode_xer;
+per_type_decoder_f X2N_UE_HistoryInformationFromTheUE_decode_uper;
+per_type_encoder_f X2N_UE_HistoryInformationFromTheUE_encode_uper;
+per_type_decoder_f X2N_UE_HistoryInformationFromTheUE_decode_aper;
+per_type_encoder_f X2N_UE_HistoryInformationFromTheUE_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_HistoryInformationFromTheUE_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.c b/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.c
new file mode 100644
index 0000000..dfe8a94
--- /dev/null
+++ b/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-RLF-Report-Container-for-extended-bands.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands = {
+	"UE-RLF-Report-Container-for-extended-bands",
+	"UE-RLF-Report-Container-for-extended-bands",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1,
+	sizeof(asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1)
+		/sizeof(asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1)
+		/sizeof(asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.h b/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.h
new file mode 100644
index 0000000..881a54e
--- /dev/null
+++ b/asn1c_defs/X2N_UE-RLF-Report-Container-for-extended-bands.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_RLF_Report_Container_for_extended_bands_H_
+#define	_X2N_UE_RLF_Report_Container_for_extended_bands_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-RLF-Report-Container-for-extended-bands */
+typedef OCTET_STRING_t	 X2N_UE_RLF_Report_Container_for_extended_bands_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_RLF_Report_Container_for_extended_bands;
+asn_struct_free_f X2N_UE_RLF_Report_Container_for_extended_bands_free;
+asn_struct_print_f X2N_UE_RLF_Report_Container_for_extended_bands_print;
+asn_constr_check_f X2N_UE_RLF_Report_Container_for_extended_bands_constraint;
+ber_type_decoder_f X2N_UE_RLF_Report_Container_for_extended_bands_decode_ber;
+der_type_encoder_f X2N_UE_RLF_Report_Container_for_extended_bands_encode_der;
+xer_type_decoder_f X2N_UE_RLF_Report_Container_for_extended_bands_decode_xer;
+xer_type_encoder_f X2N_UE_RLF_Report_Container_for_extended_bands_encode_xer;
+per_type_decoder_f X2N_UE_RLF_Report_Container_for_extended_bands_decode_uper;
+per_type_encoder_f X2N_UE_RLF_Report_Container_for_extended_bands_encode_uper;
+per_type_decoder_f X2N_UE_RLF_Report_Container_for_extended_bands_decode_aper;
+per_type_encoder_f X2N_UE_RLF_Report_Container_for_extended_bands_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_RLF_Report_Container_for_extended_bands_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-RLF-Report-Container.c b/asn1c_defs/X2N_UE-RLF-Report-Container.c
new file mode 100644
index 0000000..280ebde
--- /dev/null
+++ b/asn1c_defs/X2N_UE-RLF-Report-Container.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-RLF-Report-Container.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_UE_RLF_Report_Container_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_RLF_Report_Container = {
+	"UE-RLF-Report-Container",
+	"UE-RLF-Report-Container",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_UE_RLF_Report_Container_tags_1,
+	sizeof(asn_DEF_X2N_UE_RLF_Report_Container_tags_1)
+		/sizeof(asn_DEF_X2N_UE_RLF_Report_Container_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_RLF_Report_Container_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_RLF_Report_Container_tags_1)
+		/sizeof(asn_DEF_X2N_UE_RLF_Report_Container_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-RLF-Report-Container.h b/asn1c_defs/X2N_UE-RLF-Report-Container.h
new file mode 100644
index 0000000..6b597ae
--- /dev/null
+++ b/asn1c_defs/X2N_UE-RLF-Report-Container.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_RLF_Report_Container_H_
+#define	_X2N_UE_RLF_Report_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-RLF-Report-Container */
+typedef OCTET_STRING_t	 X2N_UE_RLF_Report_Container_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_RLF_Report_Container;
+asn_struct_free_f X2N_UE_RLF_Report_Container_free;
+asn_struct_print_f X2N_UE_RLF_Report_Container_print;
+asn_constr_check_f X2N_UE_RLF_Report_Container_constraint;
+ber_type_decoder_f X2N_UE_RLF_Report_Container_decode_ber;
+der_type_encoder_f X2N_UE_RLF_Report_Container_encode_der;
+xer_type_decoder_f X2N_UE_RLF_Report_Container_decode_xer;
+xer_type_encoder_f X2N_UE_RLF_Report_Container_encode_xer;
+per_type_decoder_f X2N_UE_RLF_Report_Container_decode_uper;
+per_type_encoder_f X2N_UE_RLF_Report_Container_encode_uper;
+per_type_decoder_f X2N_UE_RLF_Report_Container_decode_aper;
+per_type_encoder_f X2N_UE_RLF_Report_Container_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_RLF_Report_Container_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-S1AP-ID.c b/asn1c_defs/X2N_UE-S1AP-ID.c
new file mode 100644
index 0000000..8c9d252
--- /dev/null
+++ b/asn1c_defs/X2N_UE-S1AP-ID.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-S1AP-ID.h"
+
+int
+X2N_UE_S1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	/* Constraint check succeeded */
+	return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UE_S1AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 32, -1,  0,  4294967295 }	/* (0..4294967295) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_UE_S1AP_ID_specs_1 = {
+	0,	0,	0,	0,	0,
+	0,	/* Native long size */
+	1	/* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_S1AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_S1AP_ID = {
+	"UE-S1AP-ID",
+	"UE-S1AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UE_S1AP_ID_tags_1,
+	sizeof(asn_DEF_X2N_UE_S1AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_UE_S1AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_S1AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_S1AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_UE_S1AP_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UE_S1AP_ID_constr_1, X2N_UE_S1AP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_X2N_UE_S1AP_ID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UE-S1AP-ID.h b/asn1c_defs/X2N_UE-S1AP-ID.h
new file mode 100644
index 0000000..d920e77
--- /dev/null
+++ b/asn1c_defs/X2N_UE-S1AP-ID.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_S1AP_ID_H_
+#define	_X2N_UE_S1AP_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-S1AP-ID */
+typedef unsigned long	 X2N_UE_S1AP_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UE_S1AP_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_S1AP_ID;
+extern const asn_INTEGER_specifics_t asn_SPC_UE_S1AP_ID_specs_1;
+asn_struct_free_f UE_S1AP_ID_free;
+asn_struct_print_f UE_S1AP_ID_print;
+asn_constr_check_f UE_S1AP_ID_constraint;
+ber_type_decoder_f UE_S1AP_ID_decode_ber;
+der_type_encoder_f UE_S1AP_ID_encode_der;
+xer_type_decoder_f UE_S1AP_ID_decode_xer;
+xer_type_encoder_f UE_S1AP_ID_encode_xer;
+per_type_decoder_f UE_S1AP_ID_decode_uper;
+per_type_encoder_f UE_S1AP_ID_encode_uper;
+per_type_decoder_f UE_S1AP_ID_decode_aper;
+per_type_encoder_f UE_S1AP_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_S1AP_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-X2AP-ID-Extension.c b/asn1c_defs/X2N_UE-X2AP-ID-Extension.c
new file mode 100644
index 0000000..5327d52
--- /dev/null
+++ b/asn1c_defs/X2N_UE-X2AP-ID-Extension.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-X2AP-ID-Extension.h"
+
+int
+X2N_UE_X2AP_ID_Extension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UE_X2AP_ID_Extension_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  12,  12,  0,  4095 }	/* (0..4095,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_X2AP_ID_Extension = {
+	"UE-X2AP-ID-Extension",
+	"UE-X2AP-ID-Extension",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1,
+	sizeof(asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1)
+		/sizeof(asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1)
+		/sizeof(asn_DEF_X2N_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UE_X2AP_ID_Extension_constr_1, X2N_UE_X2AP_ID_Extension_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UE-X2AP-ID-Extension.h b/asn1c_defs/X2N_UE-X2AP-ID-Extension.h
new file mode 100644
index 0000000..3a04525
--- /dev/null
+++ b/asn1c_defs/X2N_UE-X2AP-ID-Extension.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_X2AP_ID_Extension_H_
+#define	_X2N_UE_X2AP_ID_Extension_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-X2AP-ID-Extension */
+typedef long	 X2N_UE_X2AP_ID_Extension_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UE_X2AP_ID_Extension_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_X2AP_ID_Extension;
+asn_struct_free_f X2N_UE_X2AP_ID_Extension_free;
+asn_struct_print_f X2N_UE_X2AP_ID_Extension_print;
+asn_constr_check_f X2N_UE_X2AP_ID_Extension_constraint;
+ber_type_decoder_f X2N_UE_X2AP_ID_Extension_decode_ber;
+der_type_encoder_f X2N_UE_X2AP_ID_Extension_encode_der;
+xer_type_decoder_f X2N_UE_X2AP_ID_Extension_decode_xer;
+xer_type_encoder_f X2N_UE_X2AP_ID_Extension_encode_xer;
+per_type_decoder_f X2N_UE_X2AP_ID_Extension_decode_uper;
+per_type_encoder_f X2N_UE_X2AP_ID_Extension_encode_uper;
+per_type_decoder_f X2N_UE_X2AP_ID_Extension_decode_aper;
+per_type_encoder_f X2N_UE_X2AP_ID_Extension_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_X2AP_ID_Extension_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UE-X2AP-ID.c b/asn1c_defs/X2N_UE-X2AP-ID.c
new file mode 100644
index 0000000..311e44f
--- /dev/null
+++ b/asn1c_defs/X2N_UE-X2AP-ID.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UE-X2AP-ID.h"
+
+int
+X2N_UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4095)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UE_X2AP_ID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 12,  12,  0,  4095 }	/* (0..4095) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UE_X2AP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UE_X2AP_ID = {
+	"UE-X2AP-ID",
+	"UE-X2AP-ID",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UE_X2AP_ID_tags_1,
+	sizeof(asn_DEF_X2N_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_UE_X2AP_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UE_X2AP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UE_X2AP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_UE_X2AP_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UE_X2AP_ID_constr_1, X2N_UE_X2AP_ID_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UE-X2AP-ID.h b/asn1c_defs/X2N_UE-X2AP-ID.h
new file mode 100644
index 0000000..a9a0b52
--- /dev/null
+++ b/asn1c_defs/X2N_UE-X2AP-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UE_X2AP_ID_H_
+#define	_X2N_UE_X2AP_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UE-X2AP-ID */
+typedef long	 X2N_UE_X2AP_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UE_X2AP_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UE_X2AP_ID;
+asn_struct_free_f X2N_UE_X2AP_ID_free;
+asn_struct_print_f X2N_UE_X2AP_ID_print;
+asn_constr_check_f X2N_UE_X2AP_ID_constraint;
+ber_type_decoder_f X2N_UE_X2AP_ID_decode_ber;
+der_type_encoder_f X2N_UE_X2AP_ID_encode_der;
+xer_type_decoder_f X2N_UE_X2AP_ID_decode_xer;
+xer_type_encoder_f X2N_UE_X2AP_ID_encode_xer;
+per_type_decoder_f X2N_UE_X2AP_ID_decode_uper;
+per_type_encoder_f X2N_UE_X2AP_ID_encode_uper;
+per_type_decoder_f X2N_UE_X2AP_ID_decode_aper;
+per_type_encoder_f X2N_UE_X2AP_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UE_X2AP_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEAggregateMaximumBitRate.c b/asn1c_defs/X2N_UEAggregateMaximumBitRate.c
new file mode 100644
index 0000000..1ce7b61
--- /dev/null
+++ b/asn1c_defs/X2N_UEAggregateMaximumBitRate.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEAggregateMaximumBitRate.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_UEAggregateMaximumBitRate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregateMaximumBitRate, uEaggregateMaximumBitRateDownlink),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uEaggregateMaximumBitRateDownlink"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAggregateMaximumBitRate, uEaggregateMaximumBitRateUplink),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uEaggregateMaximumBitRateUplink"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UEAggregateMaximumBitRate, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P209,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UEAggregateMaximumBitRate_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEAggregateMaximumBitRate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uEaggregateMaximumBitRateDownlink */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uEaggregateMaximumBitRateUplink */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAggregateMaximumBitRate_specs_1 = {
+	sizeof(struct X2N_UEAggregateMaximumBitRate),
+	offsetof(struct X2N_UEAggregateMaximumBitRate, _asn_ctx),
+	asn_MAP_X2N_UEAggregateMaximumBitRate_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UEAggregateMaximumBitRate_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEAggregateMaximumBitRate = {
+	"UEAggregateMaximumBitRate",
+	"UEAggregateMaximumBitRate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1,
+	sizeof(asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_UEAggregateMaximumBitRate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEAggregateMaximumBitRate_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEAggregateMaximumBitRate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEAggregateMaximumBitRate.h b/asn1c_defs/X2N_UEAggregateMaximumBitRate.h
new file mode 100644
index 0000000..752269a
--- /dev/null
+++ b/asn1c_defs/X2N_UEAggregateMaximumBitRate.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEAggregateMaximumBitRate_H_
+#define	_X2N_UEAggregateMaximumBitRate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_BitRate.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UEAggregateMaximumBitRate */
+typedef struct X2N_UEAggregateMaximumBitRate {
+	X2N_BitRate_t	 uEaggregateMaximumBitRateDownlink;
+	X2N_BitRate_t	 uEaggregateMaximumBitRateUplink;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEAggregateMaximumBitRate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEAggregateMaximumBitRate;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAggregateMaximumBitRate_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UEAggregateMaximumBitRate_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEAggregateMaximumBitRate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEAppLayerMeasConfig.c b/asn1c_defs/X2N_UEAppLayerMeasConfig.c
new file mode 100644
index 0000000..e39d9bf
--- /dev/null
+++ b/asn1c_defs/X2N_UEAppLayerMeasConfig.c
@@ -0,0 +1,104 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEAppLayerMeasConfig.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_containerForAppLayerMeasConfig_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 1000)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_containerForAppLayerMeasConfig_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 10,  10,  1,  1000 }	/* (SIZE(1..1000)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_UEAppLayerMeasConfig_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig, containerForAppLayerMeasConfig),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_OCTET_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_containerForAppLayerMeasConfig_constr_2,  memb_X2N_containerForAppLayerMeasConfig_constraint_1 },
+		0, 0, /* No default value */
+		"containerForAppLayerMeasConfig"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEAppLayerMeasConfig, areaScopeOfQMC),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_AreaScopeOfQMC,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"areaScopeOfQMC"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UEAppLayerMeasConfig, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P210,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UEAppLayerMeasConfig_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UEAppLayerMeasConfig_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEAppLayerMeasConfig_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* containerForAppLayerMeasConfig */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* areaScopeOfQMC */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UEAppLayerMeasConfig_specs_1 = {
+	sizeof(struct X2N_UEAppLayerMeasConfig),
+	offsetof(struct X2N_UEAppLayerMeasConfig, _asn_ctx),
+	asn_MAP_X2N_UEAppLayerMeasConfig_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UEAppLayerMeasConfig_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEAppLayerMeasConfig = {
+	"UEAppLayerMeasConfig",
+	"UEAppLayerMeasConfig",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEAppLayerMeasConfig_tags_1,
+	sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEAppLayerMeasConfig_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_UEAppLayerMeasConfig_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEAppLayerMeasConfig_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UEAppLayerMeasConfig_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEAppLayerMeasConfig.h b/asn1c_defs/X2N_UEAppLayerMeasConfig.h
new file mode 100644
index 0000000..22b4e3d
--- /dev/null
+++ b/asn1c_defs/X2N_UEAppLayerMeasConfig.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEAppLayerMeasConfig_H_
+#define	_X2N_UEAppLayerMeasConfig_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+#include "X2N_AreaScopeOfQMC.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UEAppLayerMeasConfig */
+typedef struct X2N_UEAppLayerMeasConfig {
+	OCTET_STRING_t	 containerForAppLayerMeasConfig;
+	X2N_AreaScopeOfQMC_t	 areaScopeOfQMC;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEAppLayerMeasConfig_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEAppLayerMeasConfig;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEAppLayerMeasConfig_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEContextRelease.c b/asn1c_defs/X2N_UEContextRelease.c
new file mode 100644
index 0000000..1deaad0
--- /dev/null
+++ b/asn1c_defs/X2N_UEContextRelease.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEContextRelease.h"
+
+asn_TYPE_member_t asn_MBR_X2N_UEContextRelease_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEContextRelease, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P5,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEContextRelease_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEContextRelease_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEContextRelease_specs_1 = {
+	sizeof(struct X2N_UEContextRelease),
+	offsetof(struct X2N_UEContextRelease, _asn_ctx),
+	asn_MAP_X2N_UEContextRelease_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEContextRelease = {
+	"UEContextRelease",
+	"UEContextRelease",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEContextRelease_tags_1,
+	sizeof(asn_DEF_X2N_UEContextRelease_tags_1)
+		/sizeof(asn_DEF_X2N_UEContextRelease_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEContextRelease_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEContextRelease_tags_1)
+		/sizeof(asn_DEF_X2N_UEContextRelease_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEContextRelease_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_UEContextRelease_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEContextRelease.h b/asn1c_defs/X2N_UEContextRelease.h
new file mode 100644
index 0000000..f6d6e69
--- /dev/null
+++ b/asn1c_defs/X2N_UEContextRelease.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEContextRelease_H_
+#define	_X2N_UEContextRelease_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UEContextRelease */
+typedef struct X2N_UEContextRelease {
+	X2N_ProtocolIE_Container_8180P5_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEContextRelease_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEContextRelease;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEContextRelease_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UEContextRelease_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEContextRelease_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEID.c b/asn1c_defs/X2N_UEID.c
new file mode 100644
index 0000000..3c16d7b
--- /dev/null
+++ b/asn1c_defs/X2N_UEID.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEID.h"
+
+int
+X2N_UEID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 16)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UEID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  16,  16 }	/* (SIZE(16..16)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEID = {
+	"UEID",
+	"UEID",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_UEID_tags_1,
+	sizeof(asn_DEF_X2N_UEID_tags_1)
+		/sizeof(asn_DEF_X2N_UEID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEID_tags_1)
+		/sizeof(asn_DEF_X2N_UEID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UEID_constr_1, X2N_UEID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEID.h b/asn1c_defs/X2N_UEID.h
new file mode 100644
index 0000000..b1cd0e5
--- /dev/null
+++ b/asn1c_defs/X2N_UEID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEID_H_
+#define	_X2N_UEID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UEID */
+typedef BIT_STRING_t	 X2N_UEID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UEID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEID;
+asn_struct_free_f X2N_UEID_free;
+asn_struct_print_f X2N_UEID_print;
+asn_constr_check_f X2N_UEID_constraint;
+ber_type_decoder_f X2N_UEID_decode_ber;
+der_type_encoder_f X2N_UEID_encode_der;
+xer_type_decoder_f X2N_UEID_decode_xer;
+xer_type_encoder_f X2N_UEID_encode_xer;
+per_type_decoder_f X2N_UEID_decode_uper;
+per_type_encoder_f X2N_UEID_encode_uper;
+per_type_decoder_f X2N_UEID_decode_aper;
+per_type_encoder_f X2N_UEID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UENRMeasurement.c b/asn1c_defs/X2N_UENRMeasurement.c
new file mode 100644
index 0000000..c2e5abf
--- /dev/null
+++ b/asn1c_defs/X2N_UENRMeasurement.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UENRMeasurement.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UENRMeasurement_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UENRMeasurement, uENRMeasurements),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_RRCContainer,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uENRMeasurements"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UENRMeasurement, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P171,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UENRMeasurement_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_UENRMeasurement_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UENRMeasurement_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uENRMeasurements */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UENRMeasurement_specs_1 = {
+	sizeof(struct X2N_UENRMeasurement),
+	offsetof(struct X2N_UENRMeasurement, _asn_ctx),
+	asn_MAP_X2N_UENRMeasurement_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_UENRMeasurement_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UENRMeasurement = {
+	"UENRMeasurement",
+	"UENRMeasurement",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UENRMeasurement_tags_1,
+	sizeof(asn_DEF_X2N_UENRMeasurement_tags_1)
+		/sizeof(asn_DEF_X2N_UENRMeasurement_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UENRMeasurement_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UENRMeasurement_tags_1)
+		/sizeof(asn_DEF_X2N_UENRMeasurement_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UENRMeasurement_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_UENRMeasurement_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UENRMeasurement.h b/asn1c_defs/X2N_UENRMeasurement.h
new file mode 100644
index 0000000..6871d78
--- /dev/null
+++ b/asn1c_defs/X2N_UENRMeasurement.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UENRMeasurement_H_
+#define	_X2N_UENRMeasurement_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_RRCContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UENRMeasurement */
+typedef struct X2N_UENRMeasurement {
+	X2N_RRCContainer_t	 uENRMeasurements;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UENRMeasurement_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UENRMeasurement;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UENRMeasurement_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UESecurityCapabilities.c b/asn1c_defs/X2N_UESecurityCapabilities.c
new file mode 100644
index 0000000..a6d9965
--- /dev/null
+++ b/asn1c_defs/X2N_UESecurityCapabilities.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UESecurityCapabilities.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_UESecurityCapabilities_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UESecurityCapabilities, encryptionAlgorithms),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_EncryptionAlgorithms,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"encryptionAlgorithms"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UESecurityCapabilities, integrityProtectionAlgorithms),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_IntegrityProtectionAlgorithms,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"integrityProtectionAlgorithms"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UESecurityCapabilities, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P211,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UESecurityCapabilities_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UESecurityCapabilities_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UESecurityCapabilities_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* encryptionAlgorithms */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* integrityProtectionAlgorithms */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UESecurityCapabilities_specs_1 = {
+	sizeof(struct X2N_UESecurityCapabilities),
+	offsetof(struct X2N_UESecurityCapabilities, _asn_ctx),
+	asn_MAP_X2N_UESecurityCapabilities_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UESecurityCapabilities_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UESecurityCapabilities = {
+	"UESecurityCapabilities",
+	"UESecurityCapabilities",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UESecurityCapabilities_tags_1,
+	sizeof(asn_DEF_X2N_UESecurityCapabilities_tags_1)
+		/sizeof(asn_DEF_X2N_UESecurityCapabilities_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UESecurityCapabilities_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UESecurityCapabilities_tags_1)
+		/sizeof(asn_DEF_X2N_UESecurityCapabilities_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UESecurityCapabilities_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UESecurityCapabilities_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UESecurityCapabilities.h b/asn1c_defs/X2N_UESecurityCapabilities.h
new file mode 100644
index 0000000..9f0ad98
--- /dev/null
+++ b/asn1c_defs/X2N_UESecurityCapabilities.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UESecurityCapabilities_H_
+#define	_X2N_UESecurityCapabilities_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_EncryptionAlgorithms.h"
+#include "X2N_IntegrityProtectionAlgorithms.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UESecurityCapabilities */
+typedef struct X2N_UESecurityCapabilities {
+	X2N_EncryptionAlgorithms_t	 encryptionAlgorithms;
+	X2N_IntegrityProtectionAlgorithms_t	 integrityProtectionAlgorithms;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UESecurityCapabilities_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UESecurityCapabilities;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UESecurityCapabilities_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UESecurityCapabilities_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UESecurityCapabilities_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.c b/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.c
new file mode 100644
index 0000000..f2c4f03
--- /dev/null
+++ b/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UESidelinkAggregateMaximumBitRate.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_UESidelinkAggregateMaximumBitRate_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UESidelinkAggregateMaximumBitRate, uESidelinkAggregateMaximumBitRate),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_BitRate,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uESidelinkAggregateMaximumBitRate"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UESidelinkAggregateMaximumBitRate, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P212,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UESidelinkAggregateMaximumBitRate_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UESidelinkAggregateMaximumBitRate_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uESidelinkAggregateMaximumBitRate */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_UESidelinkAggregateMaximumBitRate_specs_1 = {
+	sizeof(struct X2N_UESidelinkAggregateMaximumBitRate),
+	offsetof(struct X2N_UESidelinkAggregateMaximumBitRate, _asn_ctx),
+	asn_MAP_X2N_UESidelinkAggregateMaximumBitRate_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_UESidelinkAggregateMaximumBitRate_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UESidelinkAggregateMaximumBitRate = {
+	"UESidelinkAggregateMaximumBitRate",
+	"UESidelinkAggregateMaximumBitRate",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1,
+	sizeof(asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1)
+		/sizeof(asn_DEF_X2N_UESidelinkAggregateMaximumBitRate_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UESidelinkAggregateMaximumBitRate_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_UESidelinkAggregateMaximumBitRate_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.h b/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.h
new file mode 100644
index 0000000..706152c
--- /dev/null
+++ b/asn1c_defs/X2N_UESidelinkAggregateMaximumBitRate.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UESidelinkAggregateMaximumBitRate_H_
+#define	_X2N_UESidelinkAggregateMaximumBitRate_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_BitRate.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UESidelinkAggregateMaximumBitRate */
+typedef struct X2N_UESidelinkAggregateMaximumBitRate {
+	X2N_BitRate_t	 uESidelinkAggregateMaximumBitRate;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UESidelinkAggregateMaximumBitRate_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UESidelinkAggregateMaximumBitRate;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UESidelinkAggregateMaximumBitRate_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEsToBeResetList-Item.c b/asn1c_defs/X2N_UEsToBeResetList-Item.c
new file mode 100644
index 0000000..bbca487
--- /dev/null
+++ b/asn1c_defs/X2N_UEsToBeResetList-Item.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEsToBeResetList-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_UEsToBeResetList_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UEsToBeResetList_Item, meNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_UEsToBeResetList_Item, meNB_ID_ext),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UE_X2AP_ID_Extension,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"meNB-ID-ext"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_UEsToBeResetList_Item, sgNB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SgNB_UE_X2AP_ID,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"sgNB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UEsToBeResetList_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P213,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UEsToBeResetList_Item_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_X2N_UEsToBeResetList_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UEsToBeResetList_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* meNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meNB-ID-ext */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sgNB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UEsToBeResetList_Item_specs_1 = {
+	sizeof(struct X2N_UEsToBeResetList_Item),
+	offsetof(struct X2N_UEsToBeResetList_Item, _asn_ctx),
+	asn_MAP_X2N_UEsToBeResetList_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_X2N_UEsToBeResetList_Item_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList_Item = {
+	"UEsToBeResetList-Item",
+	"UEsToBeResetList-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UEsToBeResetList_Item_tags_1,
+	sizeof(asn_DEF_X2N_UEsToBeResetList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEsToBeResetList_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEsToBeResetList_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UEsToBeResetList_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_X2N_UEsToBeResetList_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEsToBeResetList-Item.h b/asn1c_defs/X2N_UEsToBeResetList-Item.h
new file mode 100644
index 0000000..414dfcf
--- /dev/null
+++ b/asn1c_defs/X2N_UEsToBeResetList-Item.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEsToBeResetList_Item_H_
+#define	_X2N_UEsToBeResetList_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_UE-X2AP-ID.h"
+#include "X2N_UE-X2AP-ID-Extension.h"
+#include "X2N_SgNB-UE-X2AP-ID.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UEsToBeResetList-Item */
+typedef struct X2N_UEsToBeResetList_Item {
+	X2N_UE_X2AP_ID_t	 meNB_ID;
+	X2N_UE_X2AP_ID_Extension_t	*meNB_ID_ext;	/* OPTIONAL */
+	X2N_SgNB_UE_X2AP_ID_t	*sgNB_ID;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEsToBeResetList_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UEsToBeResetList_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UEsToBeResetList_Item_1[4];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEsToBeResetList_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UEsToBeResetList.c b/asn1c_defs/X2N_UEsToBeResetList.c
new file mode 100644
index 0000000..a073cc7
--- /dev/null
+++ b/asn1c_defs/X2N_UEsToBeResetList.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UEsToBeResetList.h"
+
+#include "X2N_UEsToBeResetList-Item.h"
+static asn_per_constraints_t asn_PER_type_X2N_UEsToBeResetList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 13,  13,  1,  8192 }	/* (SIZE(1..8192)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_UEsToBeResetList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UEsToBeResetList_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UEsToBeResetList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_X2N_UEsToBeResetList_specs_1 = {
+	sizeof(struct X2N_UEsToBeResetList),
+	offsetof(struct X2N_UEsToBeResetList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList = {
+	"UEsToBeResetList",
+	"UEsToBeResetList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_UEsToBeResetList_tags_1,
+	sizeof(asn_DEF_X2N_UEsToBeResetList_tags_1)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UEsToBeResetList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UEsToBeResetList_tags_1)
+		/sizeof(asn_DEF_X2N_UEsToBeResetList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UEsToBeResetList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_UEsToBeResetList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_UEsToBeResetList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UEsToBeResetList.h b/asn1c_defs/X2N_UEsToBeResetList.h
new file mode 100644
index 0000000..a1de328
--- /dev/null
+++ b/asn1c_defs/X2N_UEsToBeResetList.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UEsToBeResetList_H_
+#define	_X2N_UEsToBeResetList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_UEsToBeResetList_Item;
+
+/* X2N_UEsToBeResetList */
+typedef struct X2N_UEsToBeResetList {
+	A_SEQUENCE_OF(struct X2N_UEsToBeResetList_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UEsToBeResetList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UEsToBeResetList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UEsToBeResetList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-GBR-PRB-usage.c b/asn1c_defs/X2N_UL-GBR-PRB-usage.c
new file mode 100644
index 0000000..6788cb0
--- /dev/null
+++ b/asn1c_defs/X2N_UL-GBR-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-GBR-PRB-usage.h"
+
+int
+X2N_UL_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_GBR_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_GBR_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_GBR_PRB_usage = {
+	"UL-GBR-PRB-usage",
+	"UL-GBR-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UL_GBR_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_UL_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_GBR_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_GBR_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_GBR_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_GBR_PRB_usage_constr_1, X2N_UL_GBR_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UL-GBR-PRB-usage.h b/asn1c_defs/X2N_UL-GBR-PRB-usage.h
new file mode 100644
index 0000000..780695e
--- /dev/null
+++ b/asn1c_defs/X2N_UL-GBR-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_GBR_PRB_usage_H_
+#define	_X2N_UL_GBR_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-GBR-PRB-usage */
+typedef long	 X2N_UL_GBR_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_GBR_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_GBR_PRB_usage;
+asn_struct_free_f X2N_UL_GBR_PRB_usage_free;
+asn_struct_print_f X2N_UL_GBR_PRB_usage_print;
+asn_constr_check_f X2N_UL_GBR_PRB_usage_constraint;
+ber_type_decoder_f X2N_UL_GBR_PRB_usage_decode_ber;
+der_type_encoder_f X2N_UL_GBR_PRB_usage_encode_der;
+xer_type_decoder_f X2N_UL_GBR_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_UL_GBR_PRB_usage_encode_xer;
+per_type_decoder_f X2N_UL_GBR_PRB_usage_decode_uper;
+per_type_encoder_f X2N_UL_GBR_PRB_usage_encode_uper;
+per_type_decoder_f X2N_UL_GBR_PRB_usage_decode_aper;
+per_type_encoder_f X2N_UL_GBR_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_GBR_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndication.c b/asn1c_defs/X2N_UL-HighInterferenceIndication.c
new file mode 100644
index 0000000..1159660
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndication.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-HighInterferenceIndication.h"
+
+int
+X2N_UL_HighInterferenceIndication_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 110)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_HighInterferenceIndication_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  1,  110 }	/* (SIZE(1..110,...)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_HighInterferenceIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndication = {
+	"UL-HighInterferenceIndication",
+	"UL-HighInterferenceIndication",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_UL_HighInterferenceIndication_tags_1,
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_HighInterferenceIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndication_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_HighInterferenceIndication_constr_1, X2N_UL_HighInterferenceIndication_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndication.h b/asn1c_defs/X2N_UL-HighInterferenceIndication.h
new file mode 100644
index 0000000..ad1a56a
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndication.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_HighInterferenceIndication_H_
+#define	_X2N_UL_HighInterferenceIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-HighInterferenceIndication */
+typedef BIT_STRING_t	 X2N_UL_HighInterferenceIndication_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_HighInterferenceIndication_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndication;
+asn_struct_free_f X2N_UL_HighInterferenceIndication_free;
+asn_struct_print_f X2N_UL_HighInterferenceIndication_print;
+asn_constr_check_f X2N_UL_HighInterferenceIndication_constraint;
+ber_type_decoder_f X2N_UL_HighInterferenceIndication_decode_ber;
+der_type_encoder_f X2N_UL_HighInterferenceIndication_encode_der;
+xer_type_decoder_f X2N_UL_HighInterferenceIndication_decode_xer;
+xer_type_encoder_f X2N_UL_HighInterferenceIndication_encode_xer;
+per_type_decoder_f X2N_UL_HighInterferenceIndication_decode_uper;
+per_type_encoder_f X2N_UL_HighInterferenceIndication_encode_uper;
+per_type_decoder_f X2N_UL_HighInterferenceIndication_decode_aper;
+per_type_encoder_f X2N_UL_HighInterferenceIndication_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_HighInterferenceIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.c b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.c
new file mode 100644
index 0000000..60805c0
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-HighInterferenceIndicationInfo-Item.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item, target_Cell_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ECGI,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"target-Cell-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item, ul_interferenceindication),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_HighInterferenceIndication,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ul-interferenceindication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P216,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* target-Cell-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-interferenceindication */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_specs_1 = {
+	sizeof(struct X2N_UL_HighInterferenceIndicationInfo_Item),
+	offsetof(struct X2N_UL_HighInterferenceIndicationInfo_Item, _asn_ctx),
+	asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_UL_HighInterferenceIndicationInfo_Item_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item = {
+	"UL-HighInterferenceIndicationInfo-Item",
+	"UL-HighInterferenceIndicationInfo-Item",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1,
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.h b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.h
new file mode 100644
index 0000000..e81a86b
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo-Item.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_HighInterferenceIndicationInfo_Item_H_
+#define	_X2N_UL_HighInterferenceIndicationInfo_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ECGI.h"
+#include "X2N_UL-HighInterferenceIndication.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UL-HighInterferenceIndicationInfo-Item */
+typedef struct X2N_UL_HighInterferenceIndicationInfo_Item {
+	X2N_ECGI_t	 target_Cell_ID;
+	X2N_UL_HighInterferenceIndication_t	 ul_interferenceindication;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UL_HighInterferenceIndicationInfo_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_Item_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_Item_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_HighInterferenceIndicationInfo_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.c b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.c
new file mode 100644
index 0000000..236eca1
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-HighInterferenceIndicationInfo.h"
+
+#include "X2N_UL-HighInterferenceIndicationInfo-Item.h"
+asn_per_constraints_t asn_PER_type_X2N_UL_HighInterferenceIndicationInfo_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1,  256 }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_UL_HighInterferenceIndicationInfo_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_specs_1 = {
+	sizeof(struct X2N_UL_HighInterferenceIndicationInfo),
+	offsetof(struct X2N_UL_HighInterferenceIndicationInfo, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo = {
+	"UL-HighInterferenceIndicationInfo",
+	"UL-HighInterferenceIndicationInfo",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1,
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1)
+		/sizeof(asn_DEF_X2N_UL_HighInterferenceIndicationInfo_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_HighInterferenceIndicationInfo_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_UL_HighInterferenceIndicationInfo_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_UL_HighInterferenceIndicationInfo_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.h b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.h
new file mode 100644
index 0000000..a8ceb4a
--- /dev/null
+++ b/asn1c_defs/X2N_UL-HighInterferenceIndicationInfo.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_HighInterferenceIndicationInfo_H_
+#define	_X2N_UL_HighInterferenceIndicationInfo_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_UL_HighInterferenceIndicationInfo_Item;
+
+/* X2N_UL-HighInterferenceIndicationInfo */
+typedef struct X2N_UL_HighInterferenceIndicationInfo {
+	A_SEQUENCE_OF(struct X2N_UL_HighInterferenceIndicationInfo_Item) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UL_HighInterferenceIndicationInfo_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_HighInterferenceIndicationInfo;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_UL_HighInterferenceIndicationInfo_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UL_HighInterferenceIndicationInfo_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_UL_HighInterferenceIndicationInfo_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_HighInterferenceIndicationInfo_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.c b/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.c
new file mode 100644
index 0000000..cf4dc4b
--- /dev/null
+++ b/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-InterferenceOverloadIndication-Item.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_InterferenceOverloadIndication_Item_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_UL_InterferenceOverloadIndication_Item_value2enum_1[] = {
+	{ 0,	17,	"high-interference" },
+	{ 1,	19,	"medium-interference" },
+	{ 2,	16,	"low-interference" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_UL_InterferenceOverloadIndication_Item_enum2value_1[] = {
+	0,	/* high-interference(0) */
+	2,	/* low-interference(2) */
+	1	/* medium-interference(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_UL_InterferenceOverloadIndication_Item_specs_1 = {
+	asn_MAP_X2N_UL_InterferenceOverloadIndication_Item_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_UL_InterferenceOverloadIndication_Item_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_InterferenceOverloadIndication_Item = {
+	"UL-InterferenceOverloadIndication-Item",
+	"UL-InterferenceOverloadIndication-Item",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1,
+	sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1)
+		/sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_Item_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_InterferenceOverloadIndication_Item_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_UL_InterferenceOverloadIndication_Item_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.h b/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.h
new file mode 100644
index 0000000..28347af
--- /dev/null
+++ b/asn1c_defs/X2N_UL-InterferenceOverloadIndication-Item.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_InterferenceOverloadIndication_Item_H_
+#define	_X2N_UL_InterferenceOverloadIndication_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UL_InterferenceOverloadIndication_Item {
+	X2N_UL_InterferenceOverloadIndication_Item_high_interference	= 0,
+	X2N_UL_InterferenceOverloadIndication_Item_medium_interference	= 1,
+	X2N_UL_InterferenceOverloadIndication_Item_low_interference	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_UL_InterferenceOverloadIndication_Item;
+
+/* X2N_UL-InterferenceOverloadIndication-Item */
+typedef long	 X2N_UL_InterferenceOverloadIndication_Item_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_InterferenceOverloadIndication_Item_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_InterferenceOverloadIndication_Item;
+extern const asn_INTEGER_specifics_t asn_SPC_UL_InterferenceOverloadIndication_Item_specs_1;
+asn_struct_free_f UL_InterferenceOverloadIndication_Item_free;
+asn_struct_print_f UL_InterferenceOverloadIndication_Item_print;
+asn_constr_check_f UL_InterferenceOverloadIndication_Item_constraint;
+ber_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_ber;
+der_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_der;
+xer_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_xer;
+xer_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_xer;
+per_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_uper;
+per_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_uper;
+per_type_decoder_f UL_InterferenceOverloadIndication_Item_decode_aper;
+per_type_encoder_f UL_InterferenceOverloadIndication_Item_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_InterferenceOverloadIndication_Item_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-InterferenceOverloadIndication.c b/asn1c_defs/X2N_UL-InterferenceOverloadIndication.c
new file mode 100644
index 0000000..faf75e5
--- /dev/null
+++ b/asn1c_defs/X2N_UL-InterferenceOverloadIndication.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-InterferenceOverloadIndication.h"
+
+asn_per_constraints_t asn_PER_type_X2N_UL_InterferenceOverloadIndication_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1,  110 }	/* (SIZE(1..110)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_UL_InterferenceOverloadIndication_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		0,
+		&asn_DEF_X2N_UL_InterferenceOverloadIndication_Item,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_UL_InterferenceOverloadIndication_specs_1 = {
+	sizeof(struct X2N_UL_InterferenceOverloadIndication),
+	offsetof(struct X2N_UL_InterferenceOverloadIndication, _asn_ctx),
+	1,	/* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_InterferenceOverloadIndication = {
+	"UL-InterferenceOverloadIndication",
+	"UL-InterferenceOverloadIndication",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1,
+	sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1)
+		/sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1)
+		/sizeof(asn_DEF_X2N_UL_InterferenceOverloadIndication_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_InterferenceOverloadIndication_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_UL_InterferenceOverloadIndication_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_UL_InterferenceOverloadIndication_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-InterferenceOverloadIndication.h b/asn1c_defs/X2N_UL-InterferenceOverloadIndication.h
new file mode 100644
index 0000000..8bb4dcf
--- /dev/null
+++ b/asn1c_defs/X2N_UL-InterferenceOverloadIndication.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_InterferenceOverloadIndication_H_
+#define	_X2N_UL_InterferenceOverloadIndication_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_UL-InterferenceOverloadIndication-Item.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-InterferenceOverloadIndication */
+typedef struct X2N_UL_InterferenceOverloadIndication {
+	A_SEQUENCE_OF(X2N_UL_InterferenceOverloadIndication_Item_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UL_InterferenceOverloadIndication_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_InterferenceOverloadIndication;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_UL_InterferenceOverloadIndication_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UL_InterferenceOverloadIndication_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_UL_InterferenceOverloadIndication_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_InterferenceOverloadIndication_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-Total-PRB-usage.c b/asn1c_defs/X2N_UL-Total-PRB-usage.c
new file mode 100644
index 0000000..a2fcf88
--- /dev/null
+++ b/asn1c_defs/X2N_UL-Total-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-Total-PRB-usage.h"
+
+int
+X2N_UL_Total_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_Total_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_Total_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_Total_PRB_usage = {
+	"UL-Total-PRB-usage",
+	"UL-Total-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UL_Total_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_UL_Total_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_Total_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_Total_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_Total_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_Total_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_Total_PRB_usage_constr_1, X2N_UL_Total_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UL-Total-PRB-usage.h b/asn1c_defs/X2N_UL-Total-PRB-usage.h
new file mode 100644
index 0000000..56a6588
--- /dev/null
+++ b/asn1c_defs/X2N_UL-Total-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_Total_PRB_usage_H_
+#define	_X2N_UL_Total_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-Total-PRB-usage */
+typedef long	 X2N_UL_Total_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_Total_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_Total_PRB_usage;
+asn_struct_free_f X2N_UL_Total_PRB_usage_free;
+asn_struct_print_f X2N_UL_Total_PRB_usage_print;
+asn_constr_check_f X2N_UL_Total_PRB_usage_constraint;
+ber_type_decoder_f X2N_UL_Total_PRB_usage_decode_ber;
+der_type_encoder_f X2N_UL_Total_PRB_usage_encode_der;
+xer_type_decoder_f X2N_UL_Total_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_UL_Total_PRB_usage_encode_xer;
+per_type_decoder_f X2N_UL_Total_PRB_usage_decode_uper;
+per_type_encoder_f X2N_UL_Total_PRB_usage_encode_uper;
+per_type_decoder_f X2N_UL_Total_PRB_usage_decode_aper;
+per_type_encoder_f X2N_UL_Total_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_Total_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-UE-Configuration.c b/asn1c_defs/X2N_UL-UE-Configuration.c
new file mode 100644
index 0000000..22a3b62
--- /dev/null
+++ b/asn1c_defs/X2N_UL-UE-Configuration.c
@@ -0,0 +1,57 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-UE-Configuration.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_UE_Configuration_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_UL_UE_Configuration_value2enum_1[] = {
+	{ 0,	7,	"no-data" },
+	{ 1,	6,	"shared" },
+	{ 2,	4,	"only" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_UL_UE_Configuration_enum2value_1[] = {
+	0,	/* no-data(0) */
+	2,	/* only(2) */
+	1	/* shared(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_UL_UE_Configuration_specs_1 = {
+	asn_MAP_X2N_UL_UE_Configuration_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_UL_UE_Configuration_enum2value_1,	/* N => "tag"; sorted by N */
+	3,	/* Number of elements in the maps */
+	4,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_UE_Configuration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_UE_Configuration = {
+	"UL-UE-Configuration",
+	"UL-UE-Configuration",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_UL_UE_Configuration_tags_1,
+	sizeof(asn_DEF_X2N_UL_UE_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_UL_UE_Configuration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_UE_Configuration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_UE_Configuration_tags_1)
+		/sizeof(asn_DEF_X2N_UL_UE_Configuration_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_UE_Configuration_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_UL_UE_Configuration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UL-UE-Configuration.h b/asn1c_defs/X2N_UL-UE-Configuration.h
new file mode 100644
index 0000000..ad34a29
--- /dev/null
+++ b/asn1c_defs/X2N_UL-UE-Configuration.h
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_UE_Configuration_H_
+#define	_X2N_UL_UE_Configuration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UL_UE_Configuration {
+	X2N_UL_UE_Configuration_no_data	= 0,
+	X2N_UL_UE_Configuration_shared	= 1,
+	X2N_UL_UE_Configuration_only	= 2
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_UL_UE_Configuration;
+
+/* X2N_UL-UE-Configuration */
+typedef long	 X2N_UL_UE_Configuration_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_UE_Configuration_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_UE_Configuration;
+extern const asn_INTEGER_specifics_t asn_SPC_UL_UE_Configuration_specs_1;
+asn_struct_free_f UL_UE_Configuration_free;
+asn_struct_print_f UL_UE_Configuration_print;
+asn_constr_check_f UL_UE_Configuration_constraint;
+ber_type_decoder_f UL_UE_Configuration_decode_ber;
+der_type_encoder_f UL_UE_Configuration_encode_der;
+xer_type_decoder_f UL_UE_Configuration_decode_xer;
+xer_type_encoder_f UL_UE_Configuration_encode_xer;
+per_type_decoder_f UL_UE_Configuration_decode_uper;
+per_type_encoder_f UL_UE_Configuration_encode_uper;
+per_type_decoder_f UL_UE_Configuration_decode_aper;
+per_type_encoder_f UL_UE_Configuration_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_UE_Configuration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-non-GBR-PRB-usage.c b/asn1c_defs/X2N_UL-non-GBR-PRB-usage.c
new file mode 100644
index 0000000..c17dbe3
--- /dev/null
+++ b/asn1c_defs/X2N_UL-non-GBR-PRB-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-non-GBR-PRB-usage.h"
+
+int
+X2N_UL_non_GBR_PRB_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UL_non_GBR_PRB_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_non_GBR_PRB_usage = {
+	"UL-non-GBR-PRB-usage",
+	"UL-non-GBR-PRB-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1,
+	sizeof(asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_non_GBR_PRB_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_non_GBR_PRB_usage_constr_1, X2N_UL_non_GBR_PRB_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UL-non-GBR-PRB-usage.h b/asn1c_defs/X2N_UL-non-GBR-PRB-usage.h
new file mode 100644
index 0000000..ebeb067
--- /dev/null
+++ b/asn1c_defs/X2N_UL-non-GBR-PRB-usage.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_non_GBR_PRB_usage_H_
+#define	_X2N_UL_non_GBR_PRB_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-non-GBR-PRB-usage */
+typedef long	 X2N_UL_non_GBR_PRB_usage_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UL_non_GBR_PRB_usage_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_non_GBR_PRB_usage;
+asn_struct_free_f X2N_UL_non_GBR_PRB_usage_free;
+asn_struct_print_f X2N_UL_non_GBR_PRB_usage_print;
+asn_constr_check_f X2N_UL_non_GBR_PRB_usage_constraint;
+ber_type_decoder_f X2N_UL_non_GBR_PRB_usage_decode_ber;
+der_type_encoder_f X2N_UL_non_GBR_PRB_usage_encode_der;
+xer_type_decoder_f X2N_UL_non_GBR_PRB_usage_decode_xer;
+xer_type_encoder_f X2N_UL_non_GBR_PRB_usage_encode_xer;
+per_type_decoder_f X2N_UL_non_GBR_PRB_usage_decode_uper;
+per_type_encoder_f X2N_UL_non_GBR_PRB_usage_encode_uper;
+per_type_decoder_f X2N_UL_non_GBR_PRB_usage_decode_aper;
+per_type_encoder_f X2N_UL_non_GBR_PRB_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_non_GBR_PRB_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.c b/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.c
new file mode 100644
index 0000000..f8a6445
--- /dev/null
+++ b/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UL-scheduling-PDCCH-CCE-usage.h"
+
+int
+X2N_UL_scheduling_PDCCH_CCE_usage_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 100)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_UL_scheduling_PDCCH_CCE_usage_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 7,  7,  0,  100 }	/* (0..100) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage = {
+	"UL-scheduling-PDCCH-CCE-usage",
+	"UL-scheduling-PDCCH-CCE-usage",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1,
+	sizeof(asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1)
+		/sizeof(asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UL_scheduling_PDCCH_CCE_usage_constr_1, X2N_UL_scheduling_PDCCH_CCE_usage_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.h b/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.h
new file mode 100644
index 0000000..8396c7d
--- /dev/null
+++ b/asn1c_defs/X2N_UL-scheduling-PDCCH-CCE-usage.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UL_scheduling_PDCCH_CCE_usage_H_
+#define	_X2N_UL_scheduling_PDCCH_CCE_usage_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_UL-scheduling-PDCCH-CCE-usage */
+typedef long	 X2N_UL_scheduling_PDCCH_CCE_usage_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UL_scheduling_PDCCH_CCE_usage;
+asn_struct_free_f X2N_UL_scheduling_PDCCH_CCE_usage_free;
+asn_struct_print_f X2N_UL_scheduling_PDCCH_CCE_usage_print;
+asn_constr_check_f X2N_UL_scheduling_PDCCH_CCE_usage_constraint;
+ber_type_decoder_f X2N_UL_scheduling_PDCCH_CCE_usage_decode_ber;
+der_type_encoder_f X2N_UL_scheduling_PDCCH_CCE_usage_encode_der;
+xer_type_decoder_f X2N_UL_scheduling_PDCCH_CCE_usage_decode_xer;
+xer_type_encoder_f X2N_UL_scheduling_PDCCH_CCE_usage_encode_xer;
+per_type_decoder_f X2N_UL_scheduling_PDCCH_CCE_usage_decode_uper;
+per_type_encoder_f X2N_UL_scheduling_PDCCH_CCE_usage_encode_uper;
+per_type_decoder_f X2N_UL_scheduling_PDCCH_CCE_usage_decode_aper;
+per_type_encoder_f X2N_UL_scheduling_PDCCH_CCE_usage_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UL_scheduling_PDCCH_CCE_usage_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ULConfiguration.c b/asn1c_defs/X2N_ULConfiguration.c
new file mode 100644
index 0000000..f2bba3f
--- /dev/null
+++ b/asn1c_defs/X2N_ULConfiguration.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ULConfiguration.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ULConfiguration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULConfiguration, uL_PDCP),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UL_UE_Configuration,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uL-PDCP"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ULConfiguration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P215,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ULConfiguration_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ULConfiguration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULConfiguration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uL-PDCP */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULConfiguration_specs_1 = {
+	sizeof(struct X2N_ULConfiguration),
+	offsetof(struct X2N_ULConfiguration, _asn_ctx),
+	asn_MAP_X2N_ULConfiguration_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ULConfiguration_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULConfiguration = {
+	"ULConfiguration",
+	"ULConfiguration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULConfiguration_tags_1,
+	sizeof(asn_DEF_X2N_ULConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_ULConfiguration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ULConfiguration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_ULConfiguration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULConfiguration_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ULConfiguration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ULConfiguration.h b/asn1c_defs/X2N_ULConfiguration.h
new file mode 100644
index 0000000..bb90a32
--- /dev/null
+++ b/asn1c_defs/X2N_ULConfiguration.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ULConfiguration_H_
+#define	_X2N_ULConfiguration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_UL-UE-Configuration.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ULConfiguration */
+typedef struct X2N_ULConfiguration {
+	X2N_UL_UE_Configuration_t	 uL_PDCP;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULConfiguration_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULConfiguration;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULConfiguration_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ULConfiguration_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ULConfiguration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ULOnlySharing.c b/asn1c_defs/X2N_ULOnlySharing.c
new file mode 100644
index 0000000..1bfe3c9
--- /dev/null
+++ b/asn1c_defs/X2N_ULOnlySharing.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ULOnlySharing.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ULOnlySharing_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULOnlySharing, uLResourceBitmapULOnlySharing),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_DataTrafficResources,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLResourceBitmapULOnlySharing"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ULOnlySharing, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P217,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ULOnlySharing_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_ULOnlySharing_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULOnlySharing_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLResourceBitmapULOnlySharing */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULOnlySharing_specs_1 = {
+	sizeof(struct X2N_ULOnlySharing),
+	offsetof(struct X2N_ULOnlySharing, _asn_ctx),
+	asn_MAP_X2N_ULOnlySharing_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_ULOnlySharing_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULOnlySharing = {
+	"ULOnlySharing",
+	"ULOnlySharing",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULOnlySharing_tags_1,
+	sizeof(asn_DEF_X2N_ULOnlySharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULOnlySharing_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ULOnlySharing_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULOnlySharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULOnlySharing_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULOnlySharing_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ULOnlySharing_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ULOnlySharing.h b/asn1c_defs/X2N_ULOnlySharing.h
new file mode 100644
index 0000000..345ebc7
--- /dev/null
+++ b/asn1c_defs/X2N_ULOnlySharing.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ULOnlySharing_H_
+#define	_X2N_ULOnlySharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_DataTrafficResources.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ULOnlySharing */
+typedef struct X2N_ULOnlySharing {
+	X2N_DataTrafficResources_t	 uLResourceBitmapULOnlySharing;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULOnlySharing_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULOnlySharing;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULOnlySharing_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ULOnlySharing_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ULOnlySharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.c b/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.c
new file mode 100644
index 0000000..e44aa5f
--- /dev/null
+++ b/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ULResourceBitmapULandDLSharing.h"
+
+int
+X2N_ULResourceBitmapULandDLSharing_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const X2N_DataTrafficResources_t *st = (const X2N_DataTrafficResources_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 6 && size <= 17600)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using X2N_DataTrafficResources,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_ULResourceBitmapULandDLSharing_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 15,  15,  6,  17600 }	/* (SIZE(6..17600)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULResourceBitmapULandDLSharing = {
+	"ULResourceBitmapULandDLSharing",
+	"ULResourceBitmapULandDLSharing",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1,
+	sizeof(asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULResourceBitmapULandDLSharing_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_ULResourceBitmapULandDLSharing_constr_1, X2N_ULResourceBitmapULandDLSharing_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.h b/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.h
new file mode 100644
index 0000000..41a44a6
--- /dev/null
+++ b/asn1c_defs/X2N_ULResourceBitmapULandDLSharing.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ULResourceBitmapULandDLSharing_H_
+#define	_X2N_ULResourceBitmapULandDLSharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_DataTrafficResources.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_ULResourceBitmapULandDLSharing */
+typedef X2N_DataTrafficResources_t	 X2N_ULResourceBitmapULandDLSharing_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_ULResourceBitmapULandDLSharing_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULResourceBitmapULandDLSharing;
+asn_struct_free_f X2N_ULResourceBitmapULandDLSharing_free;
+asn_struct_print_f X2N_ULResourceBitmapULandDLSharing_print;
+asn_constr_check_f X2N_ULResourceBitmapULandDLSharing_constraint;
+ber_type_decoder_f X2N_ULResourceBitmapULandDLSharing_decode_ber;
+der_type_encoder_f X2N_ULResourceBitmapULandDLSharing_encode_der;
+xer_type_decoder_f X2N_ULResourceBitmapULandDLSharing_decode_xer;
+xer_type_encoder_f X2N_ULResourceBitmapULandDLSharing_encode_xer;
+per_type_decoder_f X2N_ULResourceBitmapULandDLSharing_decode_uper;
+per_type_encoder_f X2N_ULResourceBitmapULandDLSharing_encode_uper;
+per_type_decoder_f X2N_ULResourceBitmapULandDLSharing_decode_aper;
+per_type_encoder_f X2N_ULResourceBitmapULandDLSharing_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ULResourceBitmapULandDLSharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ULResourcesULandDLSharing.c b/asn1c_defs/X2N_ULResourcesULandDLSharing.c
new file mode 100644
index 0000000..e98c621
--- /dev/null
+++ b/asn1c_defs/X2N_ULResourcesULandDLSharing.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ULResourcesULandDLSharing.h"
+
+asn_per_constraints_t asn_PER_type_X2N_ULResourcesULandDLSharing_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_ULResourcesULandDLSharing_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULResourcesULandDLSharing, choice.unchanged),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NULL,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"unchanged"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULResourcesULandDLSharing, choice.changed),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ULResourceBitmapULandDLSharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"changed"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULResourcesULandDLSharing_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unchanged */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* changed */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_ULResourcesULandDLSharing_specs_1 = {
+	sizeof(struct X2N_ULResourcesULandDLSharing),
+	offsetof(struct X2N_ULResourcesULandDLSharing, _asn_ctx),
+	offsetof(struct X2N_ULResourcesULandDLSharing, present),
+	sizeof(((struct X2N_ULResourcesULandDLSharing *)0)->present),
+	asn_MAP_X2N_ULResourcesULandDLSharing_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULResourcesULandDLSharing = {
+	"ULResourcesULandDLSharing",
+	"ULResourcesULandDLSharing",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_ULResourcesULandDLSharing_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_ULResourcesULandDLSharing_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_ULResourcesULandDLSharing_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ULResourcesULandDLSharing.h b/asn1c_defs/X2N_ULResourcesULandDLSharing.h
new file mode 100644
index 0000000..040af4d
--- /dev/null
+++ b/asn1c_defs/X2N_ULResourcesULandDLSharing.h
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ULResourcesULandDLSharing_H_
+#define	_X2N_ULResourcesULandDLSharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NULL.h>
+#include "X2N_ULResourceBitmapULandDLSharing.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_ULResourcesULandDLSharing_PR {
+	X2N_ULResourcesULandDLSharing_PR_NOTHING,	/* No components present */
+	X2N_ULResourcesULandDLSharing_PR_unchanged,
+	X2N_ULResourcesULandDLSharing_PR_changed
+	/* Extensions may appear below */
+	
+} X2N_ULResourcesULandDLSharing_PR;
+
+/* X2N_ULResourcesULandDLSharing */
+typedef struct X2N_ULResourcesULandDLSharing {
+	X2N_ULResourcesULandDLSharing_PR present;
+	union X2N_ULResourcesULandDLSharing_u {
+		NULL_t	 unchanged;
+		X2N_ULResourceBitmapULandDLSharing_t	 changed;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULResourcesULandDLSharing_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULResourcesULandDLSharing;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_ULResourcesULandDLSharing_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ULResourcesULandDLSharing_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_ULResourcesULandDLSharing_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ULResourcesULandDLSharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_ULandDLSharing.c b/asn1c_defs/X2N_ULandDLSharing.c
new file mode 100644
index 0000000..e189b88
--- /dev/null
+++ b/asn1c_defs/X2N_ULandDLSharing.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_ULandDLSharing.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+asn_TYPE_member_t asn_MBR_X2N_ULandDLSharing_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULandDLSharing, uLResourcesULandDLSharing),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_ULResourcesULandDLSharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"uLResourcesULandDLSharing"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_ULandDLSharing, dLResourcesULandDLSharing),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_DLResourcesULandDLSharing,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"dLResourcesULandDLSharing"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_ULandDLSharing, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P214,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_ULandDLSharing_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_ULandDLSharing_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_ULandDLSharing_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uLResourcesULandDLSharing */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dLResourcesULandDLSharing */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_ULandDLSharing_specs_1 = {
+	sizeof(struct X2N_ULandDLSharing),
+	offsetof(struct X2N_ULandDLSharing, _asn_ctx),
+	asn_MAP_X2N_ULandDLSharing_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_ULandDLSharing_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_ULandDLSharing = {
+	"ULandDLSharing",
+	"ULandDLSharing",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_ULandDLSharing_tags_1,
+	sizeof(asn_DEF_X2N_ULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULandDLSharing_tags_1[0]), /* 1 */
+	asn_DEF_X2N_ULandDLSharing_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_ULandDLSharing_tags_1)
+		/sizeof(asn_DEF_X2N_ULandDLSharing_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_ULandDLSharing_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_ULandDLSharing_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_ULandDLSharing.h b/asn1c_defs/X2N_ULandDLSharing.h
new file mode 100644
index 0000000..40738fc
--- /dev/null
+++ b/asn1c_defs/X2N_ULandDLSharing.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_ULandDLSharing_H_
+#define	_X2N_ULandDLSharing_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ULResourcesULandDLSharing.h"
+#include "X2N_DLResourcesULandDLSharing.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_ULandDLSharing */
+typedef struct X2N_ULandDLSharing {
+	X2N_ULResourcesULandDLSharing_t	 uLResourcesULandDLSharing;
+	X2N_DLResourcesULandDLSharing_t	 dLResourcesULandDLSharing;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_ULandDLSharing_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_ULandDLSharing;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_ULandDLSharing_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_ULandDLSharing_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_ULandDLSharing_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UnsuccessfulOutcome.c b/asn1c_defs/X2N_UnsuccessfulOutcome.c
new file mode 100644
index 0000000..f795290
--- /dev/null
+++ b/asn1c_defs/X2N_UnsuccessfulOutcome.c
@@ -0,0 +1,758 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UnsuccessfulOutcome.h"
+
+static const long asn_VAL_1_X2N_id_handoverPreparation = 0;
+static const long asn_VAL_1_X2N_reject = 0;
+static const long asn_VAL_2_X2N_id_reset = 7;
+static const long asn_VAL_2_X2N_reject = 0;
+static const long asn_VAL_3_X2N_id_x2Setup = 6;
+static const long asn_VAL_3_X2N_reject = 0;
+static const long asn_VAL_4_X2N_id_resourceStatusReportingInitiation = 9;
+static const long asn_VAL_4_X2N_reject = 0;
+static const long asn_VAL_5_X2N_id_eNBConfigurationUpdate = 8;
+static const long asn_VAL_5_X2N_reject = 0;
+static const long asn_VAL_6_X2N_id_mobilitySettingsChange = 12;
+static const long asn_VAL_6_X2N_reject = 0;
+static const long asn_VAL_7_X2N_id_cellActivation = 15;
+static const long asn_VAL_7_X2N_reject = 0;
+static const long asn_VAL_8_X2N_id_seNBAdditionPreparation = 19;
+static const long asn_VAL_8_X2N_reject = 0;
+static const long asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation = 21;
+static const long asn_VAL_9_X2N_reject = 0;
+static const long asn_VAL_10_X2N_id_seNBinitiatedSeNBModification = 22;
+static const long asn_VAL_10_X2N_reject = 0;
+static const long asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease = 24;
+static const long asn_VAL_11_X2N_reject = 0;
+static const long asn_VAL_12_X2N_id_x2Removal = 18;
+static const long asn_VAL_12_X2N_reject = 0;
+static const long asn_VAL_13_X2N_id_retrieveUEContext = 26;
+static const long asn_VAL_13_X2N_reject = 0;
+static const long asn_VAL_14_X2N_id_sgNBAdditionPreparation = 27;
+static const long asn_VAL_14_X2N_reject = 0;
+static const long asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation = 29;
+static const long asn_VAL_15_X2N_reject = 0;
+static const long asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification = 30;
+static const long asn_VAL_16_X2N_reject = 0;
+static const long asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease = 31;
+static const long asn_VAL_17_X2N_ignore = 1;
+static const long asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease = 32;
+static const long asn_VAL_18_X2N_reject = 0;
+static const long asn_VAL_19_X2N_id_sgNBChange = 34;
+static const long asn_VAL_19_X2N_reject = 0;
+static const long asn_VAL_20_X2N_id_endcX2Setup = 36;
+static const long asn_VAL_20_X2N_reject = 0;
+static const long asn_VAL_21_X2N_id_endcConfigurationUpdate = 37;
+static const long asn_VAL_21_X2N_reject = 0;
+static const long asn_VAL_22_X2N_id_endcCellActivation = 39;
+static const long asn_VAL_22_X2N_reject = 0;
+static const long asn_VAL_23_X2N_id_endcPartialReset = 40;
+static const long asn_VAL_23_X2N_reject = 0;
+static const long asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination = 41;
+static const long asn_VAL_24_X2N_reject = 0;
+static const long asn_VAL_25_X2N_id_endcX2Removal = 43;
+static const long asn_VAL_25_X2N_reject = 0;
+static const long asn_VAL_26_X2N_id_snStatusTransfer = 4;
+static const long asn_VAL_26_X2N_ignore = 1;
+static const long asn_VAL_27_X2N_id_uEContextRelease = 5;
+static const long asn_VAL_27_X2N_ignore = 1;
+static const long asn_VAL_28_X2N_id_handoverCancel = 1;
+static const long asn_VAL_28_X2N_ignore = 1;
+static const long asn_VAL_29_X2N_id_errorIndication = 3;
+static const long asn_VAL_29_X2N_ignore = 1;
+static const long asn_VAL_30_X2N_id_resourceStatusReporting = 10;
+static const long asn_VAL_30_X2N_ignore = 1;
+static const long asn_VAL_31_X2N_id_loadIndication = 2;
+static const long asn_VAL_31_X2N_ignore = 1;
+static const long asn_VAL_32_X2N_id_privateMessage = 11;
+static const long asn_VAL_32_X2N_ignore = 1;
+static const long asn_VAL_33_X2N_id_rLFIndication = 13;
+static const long asn_VAL_33_X2N_ignore = 1;
+static const long asn_VAL_34_X2N_id_handoverReport = 14;
+static const long asn_VAL_34_X2N_ignore = 1;
+static const long asn_VAL_35_X2N_id_x2Release = 16;
+static const long asn_VAL_35_X2N_reject = 0;
+static const long asn_VAL_36_X2N_id_x2APMessageTransfer = 17;
+static const long asn_VAL_36_X2N_reject = 0;
+static const long asn_VAL_37_X2N_id_seNBReconfigurationCompletion = 20;
+static const long asn_VAL_37_X2N_ignore = 1;
+static const long asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease = 23;
+static const long asn_VAL_38_X2N_ignore = 1;
+static const long asn_VAL_39_X2N_id_seNBCounterCheck = 25;
+static const long asn_VAL_39_X2N_reject = 0;
+static const long asn_VAL_40_X2N_id_sgNBReconfigurationCompletion = 28;
+static const long asn_VAL_40_X2N_ignore = 1;
+static const long asn_VAL_41_X2N_id_sgNBCounterCheck = 33;
+static const long asn_VAL_41_X2N_reject = 0;
+static const long asn_VAL_42_X2N_id_rRCTransfer = 35;
+static const long asn_VAL_42_X2N_reject = 0;
+static const long asn_VAL_43_X2N_id_secondaryRATDataUsageReport = 38;
+static const long asn_VAL_43_X2N_reject = 0;
+static const long asn_VAL_44_X2N_id_SgNBActivityNotification = 42;
+static const long asn_VAL_44_X2N_reject = 0;
+static const long asn_VAL_45_X2N_id_dataForwardingAddressIndication = 44;
+static const long asn_VAL_45_X2N_ignore = 1;
+static const long asn_VAL_46_X2N_id_gNBStatusIndication = 45;
+static const long asn_VAL_46_X2N_ignore = 1;
+static const asn_ioc_cell_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows[] = {
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_HandoverPreparationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_1_X2N_id_handoverPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_1_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResetRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResetResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_2_X2N_id_reset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_2_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_3_X2N_id_x2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_3_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ResourceStatusFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_4_X2N_id_resourceStatusReportingInitiation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_4_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENBConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_5_X2N_id_eNBConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_5_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_MobilityChangeRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_MobilityChangeFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_6_X2N_id_mobilitySettingsChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_6_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_CellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_CellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_7_X2N_id_cellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_7_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_8_X2N_id_seNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_8_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_9_X2N_id_meNBinitiatedSeNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_9_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_10_X2N_id_seNBinitiatedSeNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_10_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SeNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_11_X2N_id_seNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_11_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_X2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_12_X2N_id_x2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_12_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RetrieveUEContextRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_RetrieveUEContextFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_13_X2N_id_retrieveUEContext },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_13_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBAdditionRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBAdditionRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_14_X2N_id_sgNBAdditionPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_14_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_15_X2N_id_meNBinitiatedSgNBModificationPreparation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_15_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBModificationRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBModificationRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_16_X2N_id_sgNBinitiatedSgNBModification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_16_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseRequestReject },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_17_X2N_id_meNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_17_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReleaseRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBReleaseConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_18_X2N_id_sgNBinitiatedSgNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_18_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBChangeRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeConfirm },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_SgNBChangeRefuse },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_19_X2N_id_sgNBChange },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_19_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2SetupRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2SetupFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_20_X2N_id_endcX2Setup },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_20_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdate },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateAcknowledge },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCConfigurationUpdateFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_21_X2N_id_endcConfigurationUpdate },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_21_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCCellActivationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCCellActivationFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_22_X2N_id_endcCellActivation },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_22_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCPartialResetRequired },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCPartialResetConfirm },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_23_X2N_id_endcPartialReset },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_23_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_EUTRANRCellResourceCoordinationResponse },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_24_X2N_id_eUTRANRCellResourceCoordination },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_24_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ENDCX2RemovalRequest },
+	{ "&SuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalResponse },
+	{ "&UnsuccessfulOutcome", aioc__type, &asn_DEF_X2N_ENDCX2RemovalFailure },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_25_X2N_id_endcX2Removal },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_25_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SNStatusTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_26_X2N_id_snStatusTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_26_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_UEContextRelease },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_27_X2N_id_uEContextRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_27_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverCancel },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_28_X2N_id_handoverCancel },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_28_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ErrorIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_29_X2N_id_errorIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_29_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_ResourceStatusUpdate },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_30_X2N_id_resourceStatusReporting },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_30_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_LoadInformation },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_31_X2N_id_loadIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_31_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_PrivateMessage },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_32_X2N_id_privateMessage },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_32_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RLFIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_33_X2N_id_rLFIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_33_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_HandoverReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_34_X2N_id_handoverReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_34_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2Release },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_35_X2N_id_x2Release },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_35_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_X2APMessageTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_36_X2N_id_x2APMessageTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_36_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_37_X2N_id_seNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_37_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBReleaseRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_38_X2N_id_meNBinitiatedSeNBRelease },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_38_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SeNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_39_X2N_id_seNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_39_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBReconfigurationComplete },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_40_X2N_id_sgNBReconfigurationCompletion },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_40_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBCounterCheckRequest },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_41_X2N_id_sgNBCounterCheck },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_41_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_RRCTransfer },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_42_X2N_id_rRCTransfer },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_42_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SecondaryRATDataUsageReport },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_43_X2N_id_secondaryRATDataUsageReport },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_43_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_SgNBActivityNotification },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_44_X2N_id_SgNBActivityNotification },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_44_X2N_reject },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_DataForwardingAddressIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_45_X2N_id_dataForwardingAddressIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_45_X2N_ignore },
+	{ "&InitiatingMessage", aioc__type, &asn_DEF_X2N_GNBStatusIndication },
+	{ "&SuccessfulOutcome",  },
+	{ "&UnsuccessfulOutcome",  },
+	{ "&procedureCode", aioc__value, &asn_DEF_X2N_ProcedureCode, &asn_VAL_46_X2N_id_gNBStatusIndication },
+	{ "&criticality", aioc__value, &asn_DEF_X2N_Criticality, &asn_VAL_46_X2N_ignore }
+};
+static const asn_ioc_set_t asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1[] = {
+	{ 46, 5, asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1_rows }
+};
+static int
+memb_X2N_procedureCode_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 255)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_type_selector_result_t
+select_UnsuccessfulOutcome_X2N_criticality_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 4; /* &criticality */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UnsuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_criticality_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_UnsuccessfulOutcome_X2N_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+	asn_type_selector_result_t result = {0, 0};
+	const asn_ioc_set_t *itable = asn_IOS_X2N_X2AP_ELEMENTARY_PROCEDURES_1;
+	size_t constraining_column = 3; /* &procedureCode */
+	size_t for_column = 2; /* &UnsuccessfulOutcome */
+	size_t row, presence_index = 0;
+	const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct X2N_UnsuccessfulOutcome, procedureCode));
+	
+	for(row=0; row < itable->rows_count; row++) {
+	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+	
+	    if(type_cell->cell_kind == aioc__undefined)
+	        continue;
+	
+	    presence_index++;
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	        result.type_descriptor = type_cell->type_descriptor;
+	        result.presence_index = presence_index;
+	        break;
+	    }
+	}
+	
+	return result;
+}
+
+static int
+memb_X2N_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_procedureCode_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 8,  8,  0,  255 }	/* (0..255) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_criticality_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED,	 2,  2,  0,  2 }	/* (0..2) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_value_constr_4 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_value_4[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.HandoverPreparationFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_HandoverPreparationFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"HandoverPreparationFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.X2SetupFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2SetupFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2SetupFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ResourceStatusFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ResourceStatusFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ResourceStatusFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ENBConfigurationUpdateFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENBConfigurationUpdateFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENBConfigurationUpdateFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.MobilityChangeFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_MobilityChangeFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"MobilityChangeFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.CellActivationFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_CellActivationFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"CellActivationFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SeNBAdditionRequestReject),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBAdditionRequestReject,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBAdditionRequestReject"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SeNBModificationRequestReject),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRequestReject,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationRequestReject"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SeNBModificationRefuse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SeNBModificationRefuse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SeNBModificationRefuse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.X2RemovalFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_X2RemovalFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"X2RemovalFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.RetrieveUEContextFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_RetrieveUEContextFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"RetrieveUEContextFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SgNBAdditionRequestReject),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBAdditionRequestReject,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBAdditionRequestReject"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SgNBModificationRequestReject),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRequestReject,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationRequestReject"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SgNBModificationRefuse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBModificationRefuse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBModificationRefuse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SgNBReleaseRequestReject),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBReleaseRequestReject,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBReleaseRequestReject"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.SgNBChangeRefuse),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_SgNBChangeRefuse,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"SgNBChangeRefuse"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ENDCX2SetupFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2SetupFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2SetupFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ENDCConfigurationUpdateFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCConfigurationUpdateFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCConfigurationUpdateFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ENDCCellActivationFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCCellActivationFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCCellActivationFailure"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome__value, choice.ENDCX2RemovalFailure),
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_X2N_ENDCX2RemovalFailure,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"ENDCX2RemovalFailure"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 19 }, /* HandoverPreparationFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 18 }, /* X2SetupFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 17 }, /* ResourceStatusFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 3, -3, 16 }, /* ENBConfigurationUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 4, -4, 15 }, /* MobilityChangeFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 5, -5, 14 }, /* CellActivationFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 6, -6, 13 }, /* SeNBAdditionRequestReject */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 7, -7, 12 }, /* SeNBModificationRequestReject */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 8, -8, 11 }, /* SeNBModificationRefuse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 9, -9, 10 }, /* X2RemovalFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 10, -10, 9 }, /* RetrieveUEContextFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 11, -11, 8 }, /* SgNBAdditionRequestReject */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 12, -12, 7 }, /* SgNBModificationRequestReject */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 13, -13, 6 }, /* SgNBModificationRefuse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 14, -14, 5 }, /* SgNBReleaseRequestReject */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 15, -15, 4 }, /* SgNBChangeRefuse */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 16, -16, 3 }, /* ENDCX2SetupFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 17, -17, 2 }, /* ENDCConfigurationUpdateFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 18, -18, 1 }, /* ENDCCellActivationFailure */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 19, -19, 0 } /* ENDCX2RemovalFailure */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_value_specs_4 = {
+	sizeof(struct X2N_UnsuccessfulOutcome__value),
+	offsetof(struct X2N_UnsuccessfulOutcome__value, _asn_ctx),
+	offsetof(struct X2N_UnsuccessfulOutcome__value, present),
+	sizeof(((struct X2N_UnsuccessfulOutcome__value *)0)->present),
+	asn_MAP_X2N_value_tag2el_4,
+	20,	/* Count of tags in the map */
+	0, 0,
+	-1	/* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_value_4 = {
+	"value",
+	"value",
+	&asn_OP_OPEN_TYPE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, 0, OPEN_TYPE_constraint },
+	asn_MBR_X2N_value_4,
+	20,	/* Elements count */
+	&asn_SPC_X2N_value_specs_4	/* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_X2N_UnsuccessfulOutcome_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome, procedureCode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProcedureCode,
+		0,
+		{ 0, &asn_PER_memb_X2N_procedureCode_constr_2,  memb_X2N_procedureCode_constraint_1 },
+		0, 0, /* No default value */
+		"procedureCode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_Criticality,
+		select_UnsuccessfulOutcome_X2N_criticality_type,
+		{ 0, &asn_PER_memb_X2N_criticality_constr_3,  memb_X2N_criticality_constraint_1 },
+		0, 0, /* No default value */
+		"criticality"
+		},
+	{ ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct X2N_UnsuccessfulOutcome, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_value_4,
+		select_UnsuccessfulOutcome_X2N_value_type,
+		{ 0, &asn_PER_memb_X2N_value_constr_4,  memb_X2N_value_constraint_1 },
+		0, 0, /* No default value */
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UnsuccessfulOutcome_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UnsuccessfulOutcome_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* procedureCode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UnsuccessfulOutcome_specs_1 = {
+	sizeof(struct X2N_UnsuccessfulOutcome),
+	offsetof(struct X2N_UnsuccessfulOutcome, _asn_ctx),
+	asn_MAP_X2N_UnsuccessfulOutcome_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UnsuccessfulOutcome = {
+	"UnsuccessfulOutcome",
+	"UnsuccessfulOutcome",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UnsuccessfulOutcome_tags_1,
+	sizeof(asn_DEF_X2N_UnsuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_X2N_UnsuccessfulOutcome_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UnsuccessfulOutcome_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UnsuccessfulOutcome_tags_1)
+		/sizeof(asn_DEF_X2N_UnsuccessfulOutcome_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UnsuccessfulOutcome_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_UnsuccessfulOutcome_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UnsuccessfulOutcome.h b/asn1c_defs/X2N_UnsuccessfulOutcome.h
new file mode 100644
index 0000000..2ddd6c3
--- /dev/null
+++ b/asn1c_defs/X2N_UnsuccessfulOutcome.h
@@ -0,0 +1,190 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UnsuccessfulOutcome_H_
+#define	_X2N_UnsuccessfulOutcome_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProcedureCode.h"
+#include "X2N_Criticality.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "X2N_HandoverRequest.h"
+#include "X2N_HandoverRequestAcknowledge.h"
+#include "X2N_HandoverPreparationFailure.h"
+#include "X2N_ResetRequest.h"
+#include "X2N_ResetResponse.h"
+#include "X2N_X2SetupRequest.h"
+#include "X2N_X2SetupResponse.h"
+#include "X2N_X2SetupFailure.h"
+#include "X2N_ResourceStatusRequest.h"
+#include "X2N_ResourceStatusResponse.h"
+#include "X2N_ResourceStatusFailure.h"
+#include "X2N_ENBConfigurationUpdate.h"
+#include "X2N_ENBConfigurationUpdateAcknowledge.h"
+#include "X2N_ENBConfigurationUpdateFailure.h"
+#include "X2N_MobilityChangeRequest.h"
+#include "X2N_MobilityChangeAcknowledge.h"
+#include "X2N_MobilityChangeFailure.h"
+#include "X2N_CellActivationRequest.h"
+#include "X2N_CellActivationResponse.h"
+#include "X2N_CellActivationFailure.h"
+#include "X2N_SeNBAdditionRequest.h"
+#include "X2N_SeNBAdditionRequestAcknowledge.h"
+#include "X2N_SeNBAdditionRequestReject.h"
+#include "X2N_SeNBModificationRequest.h"
+#include "X2N_SeNBModificationRequestAcknowledge.h"
+#include "X2N_SeNBModificationRequestReject.h"
+#include "X2N_SeNBModificationRequired.h"
+#include "X2N_SeNBModificationConfirm.h"
+#include "X2N_SeNBModificationRefuse.h"
+#include "X2N_SeNBReleaseRequired.h"
+#include "X2N_SeNBReleaseConfirm.h"
+#include "X2N_X2RemovalRequest.h"
+#include "X2N_X2RemovalResponse.h"
+#include "X2N_X2RemovalFailure.h"
+#include "X2N_RetrieveUEContextRequest.h"
+#include "X2N_RetrieveUEContextResponse.h"
+#include "X2N_RetrieveUEContextFailure.h"
+#include "X2N_SgNBAdditionRequest.h"
+#include "X2N_SgNBAdditionRequestAcknowledge.h"
+#include "X2N_SgNBAdditionRequestReject.h"
+#include "X2N_SgNBModificationRequest.h"
+#include "X2N_SgNBModificationRequestAcknowledge.h"
+#include "X2N_SgNBModificationRequestReject.h"
+#include "X2N_SgNBModificationRequired.h"
+#include "X2N_SgNBModificationConfirm.h"
+#include "X2N_SgNBModificationRefuse.h"
+#include "X2N_SgNBReleaseRequest.h"
+#include "X2N_SgNBReleaseRequestAcknowledge.h"
+#include "X2N_SgNBReleaseRequestReject.h"
+#include "X2N_SgNBReleaseRequired.h"
+#include "X2N_SgNBReleaseConfirm.h"
+#include "X2N_SgNBChangeRequired.h"
+#include "X2N_SgNBChangeConfirm.h"
+#include "X2N_SgNBChangeRefuse.h"
+#include "X2N_ENDCX2SetupRequest.h"
+#include "X2N_ENDCX2SetupResponse.h"
+#include "X2N_ENDCX2SetupFailure.h"
+#include "X2N_ENDCConfigurationUpdate.h"
+#include "X2N_ENDCConfigurationUpdateAcknowledge.h"
+#include "X2N_ENDCConfigurationUpdateFailure.h"
+#include "X2N_ENDCCellActivationRequest.h"
+#include "X2N_ENDCCellActivationResponse.h"
+#include "X2N_ENDCCellActivationFailure.h"
+#include "X2N_ENDCPartialResetRequired.h"
+#include "X2N_ENDCPartialResetConfirm.h"
+#include "X2N_EUTRANRCellResourceCoordinationRequest.h"
+#include "X2N_EUTRANRCellResourceCoordinationResponse.h"
+#include "X2N_ENDCX2RemovalRequest.h"
+#include "X2N_ENDCX2RemovalResponse.h"
+#include "X2N_ENDCX2RemovalFailure.h"
+#include "X2N_SNStatusTransfer.h"
+#include "X2N_UEContextRelease.h"
+#include "X2N_HandoverCancel.h"
+#include "X2N_ErrorIndication.h"
+#include "X2N_ResourceStatusUpdate.h"
+#include "X2N_LoadInformation.h"
+#include "X2N_PrivateMessage.h"
+#include "X2N_RLFIndication.h"
+#include "X2N_HandoverReport.h"
+#include "X2N_X2Release.h"
+#include "X2N_X2APMessageTransfer.h"
+#include "X2N_SeNBReconfigurationComplete.h"
+#include "X2N_SeNBReleaseRequest.h"
+#include "X2N_SeNBCounterCheckRequest.h"
+#include "X2N_SgNBReconfigurationComplete.h"
+#include "X2N_SgNBCounterCheckRequest.h"
+#include "X2N_RRCTransfer.h"
+#include "X2N_SecondaryRATDataUsageReport.h"
+#include "X2N_SgNBActivityNotification.h"
+#include "X2N_DataForwardingAddressIndication.h"
+#include "X2N_GNBStatusIndication.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UnsuccessfulOutcome__value_PR {
+	X2N_UnsuccessfulOutcome__value_PR_NOTHING,	/* No components present */
+	X2N_UnsuccessfulOutcome__value_PR_HandoverPreparationFailure,
+	X2N_UnsuccessfulOutcome__value_PR_X2SetupFailure,
+	X2N_UnsuccessfulOutcome__value_PR_ResourceStatusFailure,
+	X2N_UnsuccessfulOutcome__value_PR_ENBConfigurationUpdateFailure,
+	X2N_UnsuccessfulOutcome__value_PR_MobilityChangeFailure,
+	X2N_UnsuccessfulOutcome__value_PR_CellActivationFailure,
+	X2N_UnsuccessfulOutcome__value_PR_SeNBAdditionRequestReject,
+	X2N_UnsuccessfulOutcome__value_PR_SeNBModificationRequestReject,
+	X2N_UnsuccessfulOutcome__value_PR_SeNBModificationRefuse,
+	X2N_UnsuccessfulOutcome__value_PR_X2RemovalFailure,
+	X2N_UnsuccessfulOutcome__value_PR_RetrieveUEContextFailure,
+	X2N_UnsuccessfulOutcome__value_PR_SgNBAdditionRequestReject,
+	X2N_UnsuccessfulOutcome__value_PR_SgNBModificationRequestReject,
+	X2N_UnsuccessfulOutcome__value_PR_SgNBModificationRefuse,
+	X2N_UnsuccessfulOutcome__value_PR_SgNBReleaseRequestReject,
+	X2N_UnsuccessfulOutcome__value_PR_SgNBChangeRefuse,
+	X2N_UnsuccessfulOutcome__value_PR_ENDCX2SetupFailure,
+	X2N_UnsuccessfulOutcome__value_PR_ENDCConfigurationUpdateFailure,
+	X2N_UnsuccessfulOutcome__value_PR_ENDCCellActivationFailure,
+	X2N_UnsuccessfulOutcome__value_PR_ENDCX2RemovalFailure
+} X2N_UnsuccessfulOutcome__value_PR;
+
+/* X2N_UnsuccessfulOutcome */
+typedef struct X2N_UnsuccessfulOutcome {
+	X2N_ProcedureCode_t	 procedureCode;
+	X2N_Criticality_t	 criticality;
+	struct X2N_UnsuccessfulOutcome__value {
+		X2N_UnsuccessfulOutcome__value_PR present;
+		union X2N_UnsuccessfulOutcome__X2N_value_u {
+			X2N_HandoverPreparationFailure_t	 HandoverPreparationFailure;
+			X2N_X2SetupFailure_t	 X2SetupFailure;
+			X2N_ResourceStatusFailure_t	 ResourceStatusFailure;
+			X2N_ENBConfigurationUpdateFailure_t	 ENBConfigurationUpdateFailure;
+			X2N_MobilityChangeFailure_t	 MobilityChangeFailure;
+			X2N_CellActivationFailure_t	 CellActivationFailure;
+			X2N_SeNBAdditionRequestReject_t	 SeNBAdditionRequestReject;
+			X2N_SeNBModificationRequestReject_t	 SeNBModificationRequestReject;
+			X2N_SeNBModificationRefuse_t	 SeNBModificationRefuse;
+			X2N_X2RemovalFailure_t	 X2RemovalFailure;
+			X2N_RetrieveUEContextFailure_t	 RetrieveUEContextFailure;
+			X2N_SgNBAdditionRequestReject_t	 SgNBAdditionRequestReject;
+			X2N_SgNBModificationRequestReject_t	 SgNBModificationRequestReject;
+			X2N_SgNBModificationRefuse_t	 SgNBModificationRefuse;
+			X2N_SgNBReleaseRequestReject_t	 SgNBReleaseRequestReject;
+			X2N_SgNBChangeRefuse_t	 SgNBChangeRefuse;
+			X2N_ENDCX2SetupFailure_t	 ENDCX2SetupFailure;
+			X2N_ENDCConfigurationUpdateFailure_t	 ENDCConfigurationUpdateFailure;
+			X2N_ENDCCellActivationFailure_t	 ENDCCellActivationFailure;
+			X2N_ENDCX2RemovalFailure_t	 ENDCX2RemovalFailure;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UnsuccessfulOutcome_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UnsuccessfulOutcome;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UnsuccessfulOutcome_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UnsuccessfulOutcome_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UnsuccessfulOutcome_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UsableABSInformation.c b/asn1c_defs/X2N_UsableABSInformation.c
new file mode 100644
index 0000000..41735bf
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformation.c
@@ -0,0 +1,64 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UsableABSInformation.h"
+
+#include "X2N_UsableABSInformationFDD.h"
+#include "X2N_UsableABSInformationTDD.h"
+asn_per_constraints_t asn_PER_type_X2N_UsableABSInformation_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_UsableABSInformation_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_UsableABSInformation, choice.fdd),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UsableABSInformationFDD,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"fdd"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_UsableABSInformation, choice.tdd),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UsableABSInformationTDD,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"tdd"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UsableABSInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_UsableABSInformation_specs_1 = {
+	sizeof(struct X2N_UsableABSInformation),
+	offsetof(struct X2N_UsableABSInformation, _asn_ctx),
+	offsetof(struct X2N_UsableABSInformation, present),
+	sizeof(((struct X2N_UsableABSInformation *)0)->present),
+	asn_MAP_X2N_UsableABSInformation_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformation = {
+	"UsableABSInformation",
+	"UsableABSInformation",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_UsableABSInformation_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_UsableABSInformation_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_UsableABSInformation_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UsableABSInformation.h b/asn1c_defs/X2N_UsableABSInformation.h
new file mode 100644
index 0000000..ba2db72
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformation.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UsableABSInformation_H_
+#define	_X2N_UsableABSInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UsableABSInformation_PR {
+	X2N_UsableABSInformation_PR_NOTHING,	/* No components present */
+	X2N_UsableABSInformation_PR_fdd,
+	X2N_UsableABSInformation_PR_tdd
+	/* Extensions may appear below */
+	
+} X2N_UsableABSInformation_PR;
+
+/* Forward declarations */
+struct X2N_UsableABSInformationFDD;
+struct X2N_UsableABSInformationTDD;
+
+/* X2N_UsableABSInformation */
+typedef struct X2N_UsableABSInformation {
+	X2N_UsableABSInformation_PR present;
+	union X2N_UsableABSInformation_u {
+		struct X2N_UsableABSInformationFDD	*fdd;
+		struct X2N_UsableABSInformationTDD	*tdd;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UsableABSInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformation;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_UsableABSInformation_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UsableABSInformation_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_UsableABSInformation_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UsableABSInformation_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UsableABSInformationFDD.c b/asn1c_defs/X2N_UsableABSInformationFDD.c
new file mode 100644
index 0000000..26c2967
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformationFDD.c
@@ -0,0 +1,99 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UsableABSInformationFDD.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_usable_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 40)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_usable_abs_pattern_info_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  40,  40 }	/* (SIZE(40..40)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationFDD_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationFDD, usable_abs_pattern_info),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_usable_abs_pattern_info_constr_2,  memb_X2N_usable_abs_pattern_info_constraint_1 },
+		0, 0, /* No default value */
+		"usable-abs-pattern-info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UsableABSInformationFDD, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P218,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UsableABSInformationFDD_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_UsableABSInformationFDD_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UsableABSInformationFDD_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* usable-abs-pattern-info */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationFDD_specs_1 = {
+	sizeof(struct X2N_UsableABSInformationFDD),
+	offsetof(struct X2N_UsableABSInformationFDD, _asn_ctx),
+	asn_MAP_X2N_UsableABSInformationFDD_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_UsableABSInformationFDD_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationFDD = {
+	"UsableABSInformationFDD",
+	"UsableABSInformationFDD",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UsableABSInformationFDD_tags_1,
+	sizeof(asn_DEF_X2N_UsableABSInformationFDD_tags_1)
+		/sizeof(asn_DEF_X2N_UsableABSInformationFDD_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UsableABSInformationFDD_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UsableABSInformationFDD_tags_1)
+		/sizeof(asn_DEF_X2N_UsableABSInformationFDD_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UsableABSInformationFDD_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_UsableABSInformationFDD_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UsableABSInformationFDD.h b/asn1c_defs/X2N_UsableABSInformationFDD.h
new file mode 100644
index 0000000..2f2e46b
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformationFDD.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UsableABSInformationFDD_H_
+#define	_X2N_UsableABSInformationFDD_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UsableABSInformationFDD */
+typedef struct X2N_UsableABSInformationFDD {
+	BIT_STRING_t	 usable_abs_pattern_info;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UsableABSInformationFDD_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationFDD;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationFDD_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationFDD_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UsableABSInformationFDD_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UsableABSInformationTDD.c b/asn1c_defs/X2N_UsableABSInformationTDD.c
new file mode 100644
index 0000000..6219636
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformationTDD.c
@@ -0,0 +1,99 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UsableABSInformationTDD.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_usaable_abs_pattern_info_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size >= 1 && size <= 70)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_usaable_abs_pattern_info_constr_2 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  7,  7,  1,  70 }	/* (SIZE(1..70,...)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationTDD_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_UsableABSInformationTDD, usaable_abs_pattern_info),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_usaable_abs_pattern_info_constr_2,  memb_X2N_usaable_abs_pattern_info_constraint_1 },
+		0, 0, /* No default value */
+		"usaable-abs-pattern-info"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_UsableABSInformationTDD, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P219,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_UsableABSInformationTDD_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_X2N_UsableABSInformationTDD_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_UsableABSInformationTDD_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* usaable-abs-pattern-info */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationTDD_specs_1 = {
+	sizeof(struct X2N_UsableABSInformationTDD),
+	offsetof(struct X2N_UsableABSInformationTDD, _asn_ctx),
+	asn_MAP_X2N_UsableABSInformationTDD_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_X2N_UsableABSInformationTDD_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationTDD = {
+	"UsableABSInformationTDD",
+	"UsableABSInformationTDD",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_UsableABSInformationTDD_tags_1,
+	sizeof(asn_DEF_X2N_UsableABSInformationTDD_tags_1)
+		/sizeof(asn_DEF_X2N_UsableABSInformationTDD_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UsableABSInformationTDD_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UsableABSInformationTDD_tags_1)
+		/sizeof(asn_DEF_X2N_UsableABSInformationTDD_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_UsableABSInformationTDD_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_UsableABSInformationTDD_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UsableABSInformationTDD.h b/asn1c_defs/X2N_UsableABSInformationTDD.h
new file mode 100644
index 0000000..7b0cb8d
--- /dev/null
+++ b/asn1c_defs/X2N_UsableABSInformationTDD.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UsableABSInformationTDD_H_
+#define	_X2N_UsableABSInformationTDD_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_UsableABSInformationTDD */
+typedef struct X2N_UsableABSInformationTDD {
+	BIT_STRING_t	 usaable_abs_pattern_info;
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_UsableABSInformationTDD_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UsableABSInformationTDD;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_UsableABSInformationTDD_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_UsableABSInformationTDD_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UsableABSInformationTDD_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_UserPlaneTrafficActivityReport.c b/asn1c_defs/X2N_UserPlaneTrafficActivityReport.c
new file mode 100644
index 0000000..c9b483f
--- /dev/null
+++ b/asn1c_defs/X2N_UserPlaneTrafficActivityReport.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_UserPlaneTrafficActivityReport.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_UserPlaneTrafficActivityReport_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_UserPlaneTrafficActivityReport_value2enum_1[] = {
+	{ 0,	8,	"inactive" },
+	{ 1,	12,	"re-activated" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_UserPlaneTrafficActivityReport_enum2value_1[] = {
+	0,	/* inactive(0) */
+	1	/* re-activated(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_UserPlaneTrafficActivityReport_specs_1 = {
+	asn_MAP_X2N_UserPlaneTrafficActivityReport_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_UserPlaneTrafficActivityReport_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_UserPlaneTrafficActivityReport = {
+	"UserPlaneTrafficActivityReport",
+	"UserPlaneTrafficActivityReport",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1,
+	sizeof(asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1)
+		/sizeof(asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1[0]), /* 1 */
+	asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1)
+		/sizeof(asn_DEF_X2N_UserPlaneTrafficActivityReport_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_UserPlaneTrafficActivityReport_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_UserPlaneTrafficActivityReport_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_UserPlaneTrafficActivityReport.h b/asn1c_defs/X2N_UserPlaneTrafficActivityReport.h
new file mode 100644
index 0000000..ca47b3e
--- /dev/null
+++ b/asn1c_defs/X2N_UserPlaneTrafficActivityReport.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_UserPlaneTrafficActivityReport_H_
+#define	_X2N_UserPlaneTrafficActivityReport_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_UserPlaneTrafficActivityReport {
+	X2N_UserPlaneTrafficActivityReport_inactive	= 0,
+	X2N_UserPlaneTrafficActivityReport_re_activated	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_UserPlaneTrafficActivityReport;
+
+/* X2N_UserPlaneTrafficActivityReport */
+typedef long	 X2N_UserPlaneTrafficActivityReport_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_UserPlaneTrafficActivityReport_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_UserPlaneTrafficActivityReport;
+extern const asn_INTEGER_specifics_t asn_SPC_UserPlaneTrafficActivityReport_specs_1;
+asn_struct_free_f UserPlaneTrafficActivityReport_free;
+asn_struct_print_f UserPlaneTrafficActivityReport_print;
+asn_constr_check_f UserPlaneTrafficActivityReport_constraint;
+ber_type_decoder_f UserPlaneTrafficActivityReport_decode_ber;
+der_type_encoder_f UserPlaneTrafficActivityReport_encode_der;
+xer_type_decoder_f UserPlaneTrafficActivityReport_decode_xer;
+xer_type_encoder_f UserPlaneTrafficActivityReport_encode_xer;
+per_type_decoder_f UserPlaneTrafficActivityReport_decode_uper;
+per_type_encoder_f UserPlaneTrafficActivityReport_encode_uper;
+per_type_decoder_f UserPlaneTrafficActivityReport_decode_aper;
+per_type_encoder_f UserPlaneTrafficActivityReport_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_UserPlaneTrafficActivityReport_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_V2XServicesAuthorized.c b/asn1c_defs/X2N_V2XServicesAuthorized.c
new file mode 100644
index 0000000..45000ae
--- /dev/null
+++ b/asn1c_defs/X2N_V2XServicesAuthorized.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_V2XServicesAuthorized.h"
+
+#include "X2N_ProtocolExtensionContainer.h"
+static asn_TYPE_member_t asn_MBR_X2N_V2XServicesAuthorized_1[] = {
+	{ ATF_POINTER, 3, offsetof(struct X2N_V2XServicesAuthorized, vehicleUE),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_VehicleUE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"vehicleUE"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_V2XServicesAuthorized, pedestrianUE),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PedestrianUE,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pedestrianUE"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_V2XServicesAuthorized, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P220,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_V2XServicesAuthorized_oms_1[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_V2XServicesAuthorized_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_V2XServicesAuthorized_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* vehicleUE */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pedestrianUE */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_V2XServicesAuthorized_specs_1 = {
+	sizeof(struct X2N_V2XServicesAuthorized),
+	offsetof(struct X2N_V2XServicesAuthorized, _asn_ctx),
+	asn_MAP_X2N_V2XServicesAuthorized_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_V2XServicesAuthorized_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_V2XServicesAuthorized = {
+	"V2XServicesAuthorized",
+	"V2XServicesAuthorized",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_V2XServicesAuthorized_tags_1,
+	sizeof(asn_DEF_X2N_V2XServicesAuthorized_tags_1)
+		/sizeof(asn_DEF_X2N_V2XServicesAuthorized_tags_1[0]), /* 1 */
+	asn_DEF_X2N_V2XServicesAuthorized_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_V2XServicesAuthorized_tags_1)
+		/sizeof(asn_DEF_X2N_V2XServicesAuthorized_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_V2XServicesAuthorized_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_V2XServicesAuthorized_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_V2XServicesAuthorized.h b/asn1c_defs/X2N_V2XServicesAuthorized.h
new file mode 100644
index 0000000..e4cb184
--- /dev/null
+++ b/asn1c_defs/X2N_V2XServicesAuthorized.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_V2XServicesAuthorized_H_
+#define	_X2N_V2XServicesAuthorized_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_VehicleUE.h"
+#include "X2N_PedestrianUE.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_V2XServicesAuthorized */
+typedef struct X2N_V2XServicesAuthorized {
+	X2N_VehicleUE_t	*vehicleUE;	/* OPTIONAL */
+	X2N_PedestrianUE_t	*pedestrianUE;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_V2XServicesAuthorized_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_V2XServicesAuthorized;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_V2XServicesAuthorized_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_VehicleUE.c b/asn1c_defs/X2N_VehicleUE.c
new file mode 100644
index 0000000..7d02508
--- /dev/null
+++ b/asn1c_defs/X2N_VehicleUE.c
@@ -0,0 +1,55 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_VehicleUE.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_VehicleUE_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_VehicleUE_value2enum_1[] = {
+	{ 0,	10,	"authorized" },
+	{ 1,	14,	"not-authorized" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_VehicleUE_enum2value_1[] = {
+	0,	/* authorized(0) */
+	1	/* not-authorized(1) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_VehicleUE_specs_1 = {
+	asn_MAP_X2N_VehicleUE_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_VehicleUE_enum2value_1,	/* N => "tag"; sorted by N */
+	2,	/* Number of elements in the maps */
+	3,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_VehicleUE_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_VehicleUE = {
+	"VehicleUE",
+	"VehicleUE",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_VehicleUE_tags_1,
+	sizeof(asn_DEF_X2N_VehicleUE_tags_1)
+		/sizeof(asn_DEF_X2N_VehicleUE_tags_1[0]), /* 1 */
+	asn_DEF_X2N_VehicleUE_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_VehicleUE_tags_1)
+		/sizeof(asn_DEF_X2N_VehicleUE_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_VehicleUE_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_VehicleUE_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_VehicleUE.h b/asn1c_defs/X2N_VehicleUE.h
new file mode 100644
index 0000000..d576ca4
--- /dev/null
+++ b/asn1c_defs/X2N_VehicleUE.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_VehicleUE_H_
+#define	_X2N_VehicleUE_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_VehicleUE {
+	X2N_VehicleUE_authorized	= 0,
+	X2N_VehicleUE_not_authorized	= 1
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_VehicleUE;
+
+/* X2N_VehicleUE */
+typedef long	 X2N_VehicleUE_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_VehicleUE_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_VehicleUE;
+extern const asn_INTEGER_specifics_t asn_SPC_VehicleUE_specs_1;
+asn_struct_free_f VehicleUE_free;
+asn_struct_print_f VehicleUE_print;
+asn_constr_check_f VehicleUE_constraint;
+ber_type_decoder_f VehicleUE_decode_ber;
+der_type_encoder_f VehicleUE_encode_der;
+xer_type_decoder_f VehicleUE_decode_xer;
+xer_type_encoder_f VehicleUE_encode_xer;
+per_type_decoder_f VehicleUE_decode_uper;
+per_type_encoder_f VehicleUE_encode_uper;
+per_type_decoder_f VehicleUE_decode_aper;
+per_type_encoder_f VehicleUE_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_VehicleUE_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WLANMeasConfig.c b/asn1c_defs/X2N_WLANMeasConfig.c
new file mode 100644
index 0000000..9991257
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasConfig.c
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WLANMeasConfig.h"
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_WLANMeasConfig_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_WLANMeasConfig_value2enum_1[] = {
+	{ 0,	5,	"setup" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_WLANMeasConfig_enum2value_1[] = {
+	0	/* setup(0) */
+	/* This list is extensible */
+};
+const asn_INTEGER_specifics_t asn_SPC_X2N_WLANMeasConfig_specs_1 = {
+	asn_MAP_X2N_WLANMeasConfig_value2enum_1,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_WLANMeasConfig_enum2value_1,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WLANMeasConfig_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasConfig = {
+	"WLANMeasConfig",
+	"WLANMeasConfig",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_WLANMeasConfig_tags_1,
+	sizeof(asn_DEF_X2N_WLANMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasConfig_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WLANMeasConfig_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WLANMeasConfig_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasConfig_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_WLANMeasConfig_constr_1, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_WLANMeasConfig_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WLANMeasConfig.h b/asn1c_defs/X2N_WLANMeasConfig.h
new file mode 100644
index 0000000..a54921c
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasConfig.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WLANMeasConfig_H_
+#define	_X2N_WLANMeasConfig_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_WLANMeasConfig {
+	X2N_WLANMeasConfig_setup	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_WLANMeasConfig;
+
+/* X2N_WLANMeasConfig */
+typedef long	 X2N_WLANMeasConfig_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_WLANMeasConfig_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasConfig;
+extern const asn_INTEGER_specifics_t asn_SPC_WLANMeasConfig_specs_1;
+asn_struct_free_f WLANMeasConfig_free;
+asn_struct_print_f WLANMeasConfig_print;
+asn_constr_check_f WLANMeasConfig_constraint;
+ber_type_decoder_f WLANMeasConfig_decode_ber;
+der_type_encoder_f WLANMeasConfig_encode_der;
+xer_type_decoder_f WLANMeasConfig_decode_xer;
+xer_type_encoder_f WLANMeasConfig_encode_xer;
+per_type_decoder_f WLANMeasConfig_decode_uper;
+per_type_encoder_f WLANMeasConfig_encode_uper;
+per_type_decoder_f WLANMeasConfig_decode_aper;
+per_type_encoder_f WLANMeasConfig_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WLANMeasConfig_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WLANMeasConfigNameList.c b/asn1c_defs/X2N_WLANMeasConfigNameList.c
new file mode 100644
index 0000000..2994e13
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasConfigNameList.c
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WLANMeasConfigNameList.h"
+
+asn_per_constraints_t asn_PER_type_X2N_WLANMeasConfigNameList_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 2,  2,  1,  4 }	/* (SIZE(1..4)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_WLANMeasConfigNameList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		0,
+		&asn_DEF_X2N_WLANName,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WLANMeasConfigNameList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_X2N_WLANMeasConfigNameList_specs_1 = {
+	sizeof(struct X2N_WLANMeasConfigNameList),
+	offsetof(struct X2N_WLANMeasConfigNameList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasConfigNameList = {
+	"WLANMeasConfigNameList",
+	"WLANMeasConfigNameList",
+	&asn_OP_SEQUENCE_OF,
+	asn_DEF_X2N_WLANMeasConfigNameList_tags_1,
+	sizeof(asn_DEF_X2N_WLANMeasConfigNameList_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasConfigNameList_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WLANMeasConfigNameList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WLANMeasConfigNameList_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasConfigNameList_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_WLANMeasConfigNameList_constr_1, SEQUENCE_OF_constraint },
+	asn_MBR_X2N_WLANMeasConfigNameList_1,
+	1,	/* Single element */
+	&asn_SPC_X2N_WLANMeasConfigNameList_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WLANMeasConfigNameList.h b/asn1c_defs/X2N_WLANMeasConfigNameList.h
new file mode 100644
index 0000000..55e4008
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasConfigNameList.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WLANMeasConfigNameList_H_
+#define	_X2N_WLANMeasConfigNameList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_WLANName.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_WLANMeasConfigNameList */
+typedef struct X2N_WLANMeasConfigNameList {
+	A_SEQUENCE_OF(X2N_WLANName_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WLANMeasConfigNameList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasConfigNameList;
+extern asn_SET_OF_specifics_t asn_SPC_X2N_WLANMeasConfigNameList_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_WLANMeasConfigNameList_1[1];
+extern asn_per_constraints_t asn_PER_type_X2N_WLANMeasConfigNameList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WLANMeasConfigNameList_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WLANMeasurementConfiguration.c b/asn1c_defs/X2N_WLANMeasurementConfiguration.c
new file mode 100644
index 0000000..4435b33
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasurementConfiguration.c
@@ -0,0 +1,186 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WLANMeasurementConfiguration.h"
+
+#include "X2N_WLANMeasConfigNameList.h"
+#include "X2N_ProtocolExtensionContainer.h"
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_wlan_rssi_constr_4 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_X2N_wlan_rtt_constr_7 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }	/* (0..0,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_wlan_rssi_value2enum_4[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_wlan_rssi_enum2value_4[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_wlan_rssi_specs_4 = {
+	asn_MAP_X2N_wlan_rssi_value2enum_4,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_wlan_rssi_enum2value_4,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_wlan_rssi_tags_4[] = {
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_wlan_rssi_4 = {
+	"wlan-rssi",
+	"wlan-rssi",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_wlan_rssi_tags_4,
+	sizeof(asn_DEF_X2N_wlan_rssi_tags_4)
+		/sizeof(asn_DEF_X2N_wlan_rssi_tags_4[0]) - 1, /* 1 */
+	asn_DEF_X2N_wlan_rssi_tags_4,	/* Same as above */
+	sizeof(asn_DEF_X2N_wlan_rssi_tags_4)
+		/sizeof(asn_DEF_X2N_wlan_rssi_tags_4[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_wlan_rssi_constr_4, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_wlan_rssi_specs_4	/* Additional specs */
+};
+
+static const asn_INTEGER_enum_map_t asn_MAP_X2N_wlan_rtt_value2enum_7[] = {
+	{ 0,	4,	"true" }
+	/* This list is extensible */
+};
+static const unsigned int asn_MAP_X2N_wlan_rtt_enum2value_7[] = {
+	0	/* true(0) */
+	/* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_X2N_wlan_rtt_specs_7 = {
+	asn_MAP_X2N_wlan_rtt_value2enum_7,	/* "tag" => N; sorted by tag */
+	asn_MAP_X2N_wlan_rtt_enum2value_7,	/* N => "tag"; sorted by N */
+	1,	/* Number of elements in the maps */
+	2,	/* Extensions before this member */
+	1,	/* Strict enumeration */
+	0,	/* Native long size */
+	0
+};
+static const ber_tlv_tag_t asn_DEF_X2N_wlan_rtt_tags_7[] = {
+	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_X2N_wlan_rtt_7 = {
+	"wlan-rtt",
+	"wlan-rtt",
+	&asn_OP_NativeEnumerated,
+	asn_DEF_X2N_wlan_rtt_tags_7,
+	sizeof(asn_DEF_X2N_wlan_rtt_tags_7)
+		/sizeof(asn_DEF_X2N_wlan_rtt_tags_7[0]) - 1, /* 1 */
+	asn_DEF_X2N_wlan_rtt_tags_7,	/* Same as above */
+	sizeof(asn_DEF_X2N_wlan_rtt_tags_7)
+		/sizeof(asn_DEF_X2N_wlan_rtt_tags_7[0]), /* 2 */
+	{ 0, &asn_PER_type_X2N_wlan_rtt_constr_7, NativeEnumerated_constraint },
+	0, 0,	/* Defined elsewhere */
+	&asn_SPC_X2N_wlan_rtt_specs_7	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_X2N_WLANMeasurementConfiguration_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WLANMeasurementConfiguration, wlanMeasConfig),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WLANMeasConfig,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wlanMeasConfig"
+		},
+	{ ATF_POINTER, 4, offsetof(struct X2N_WLANMeasurementConfiguration, wlanMeasConfigNameList),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WLANMeasConfigNameList,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wlanMeasConfigNameList"
+		},
+	{ ATF_POINTER, 3, offsetof(struct X2N_WLANMeasurementConfiguration, wlan_rssi),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_wlan_rssi_4,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wlan-rssi"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_WLANMeasurementConfiguration, wlan_rtt),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_wlan_rtt_7,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wlan-rtt"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_WLANMeasurementConfiguration, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P222,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_WLANMeasurementConfiguration_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_X2N_WLANMeasurementConfiguration_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WLANMeasurementConfiguration_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wlanMeasConfig */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* wlanMeasConfigNameList */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* wlan-rssi */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* wlan-rtt */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_X2N_WLANMeasurementConfiguration_specs_1 = {
+	sizeof(struct X2N_WLANMeasurementConfiguration),
+	offsetof(struct X2N_WLANMeasurementConfiguration, _asn_ctx),
+	asn_MAP_X2N_WLANMeasurementConfiguration_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_X2N_WLANMeasurementConfiguration_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	5,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasurementConfiguration = {
+	"WLANMeasurementConfiguration",
+	"WLANMeasurementConfiguration",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_WLANMeasurementConfiguration_tags_1,
+	sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WLANMeasurementConfiguration_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_tags_1)
+		/sizeof(asn_DEF_X2N_WLANMeasurementConfiguration_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_WLANMeasurementConfiguration_1,
+	5,	/* Elements count */
+	&asn_SPC_X2N_WLANMeasurementConfiguration_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WLANMeasurementConfiguration.h b/asn1c_defs/X2N_WLANMeasurementConfiguration.h
new file mode 100644
index 0000000..562fa7e
--- /dev/null
+++ b/asn1c_defs/X2N_WLANMeasurementConfiguration.h
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WLANMeasurementConfiguration_H_
+#define	_X2N_WLANMeasurementConfiguration_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_WLANMeasConfig.h"
+#include <NativeEnumerated.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_WLANMeasurementConfiguration__wlan_rssi {
+	X2N_WLANMeasurementConfiguration__wlan_rssi_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_WLANMeasurementConfiguration__wlan_rssi;
+typedef enum X2N_WLANMeasurementConfiguration__wlan_rtt {
+	X2N_WLANMeasurementConfiguration__wlan_rtt_true	= 0
+	/*
+	 * Enumeration is extensible
+	 */
+} e_X2N_WLANMeasurementConfiguration__wlan_rtt;
+
+/* Forward declarations */
+struct X2N_WLANMeasConfigNameList;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_WLANMeasurementConfiguration */
+typedef struct X2N_WLANMeasurementConfiguration {
+	X2N_WLANMeasConfig_t	 wlanMeasConfig;
+	struct X2N_WLANMeasConfigNameList	*wlanMeasConfigNameList;	/* OPTIONAL */
+	long	*wlan_rssi;	/* OPTIONAL */
+	long	*wlan_rtt;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WLANMeasurementConfiguration_t;
+
+/* Implementation */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_wlan_rssi_4;	// (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_X2N_wlan_rtt_7;	// (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WLANMeasurementConfiguration;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WLANMeasurementConfiguration_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WLANName.c b/asn1c_defs/X2N_WLANName.c
new file mode 100644
index 0000000..a15fc05
--- /dev/null
+++ b/asn1c_defs/X2N_WLANName.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WLANName.h"
+
+int
+X2N_WLANName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size >= 1 && size <= 32)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_WLANName_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WLANName_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WLANName = {
+	"WLANName",
+	"WLANName",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_WLANName_tags_1,
+	sizeof(asn_DEF_X2N_WLANName_tags_1)
+		/sizeof(asn_DEF_X2N_WLANName_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WLANName_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WLANName_tags_1)
+		/sizeof(asn_DEF_X2N_WLANName_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_WLANName_constr_1, X2N_WLANName_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WLANName.h b/asn1c_defs/X2N_WLANName.h
new file mode 100644
index 0000000..39ffb5c
--- /dev/null
+++ b/asn1c_defs/X2N_WLANName.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WLANName_H_
+#define	_X2N_WLANName_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_WLANName */
+typedef OCTET_STRING_t	 X2N_WLANName_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_WLANName_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WLANName;
+asn_struct_free_f X2N_WLANName_free;
+asn_struct_print_f X2N_WLANName_print;
+asn_constr_check_f X2N_WLANName_constraint;
+ber_type_decoder_f X2N_WLANName_decode_ber;
+der_type_encoder_f X2N_WLANName_encode_der;
+xer_type_decoder_f X2N_WLANName_decode_xer;
+xer_type_encoder_f X2N_WLANName_encode_xer;
+per_type_decoder_f X2N_WLANName_decode_uper;
+per_type_encoder_f X2N_WLANName_encode_uper;
+per_type_decoder_f X2N_WLANName_decode_aper;
+per_type_encoder_f X2N_WLANName_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WLANName_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WT-UE-XwAP-ID.c b/asn1c_defs/X2N_WT-UE-XwAP-ID.c
new file mode 100644
index 0000000..086a9a6
--- /dev/null
+++ b/asn1c_defs/X2N_WT-UE-XwAP-ID.c
@@ -0,0 +1,62 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WT-UE-XwAP-ID.h"
+
+int
+X2N_WT_UE_XwAP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 3)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_WT_UE_XwAP_ID_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  3,  3 }	/* (SIZE(3..3)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WT_UE_XwAP_ID_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WT_UE_XwAP_ID = {
+	"WT-UE-XwAP-ID",
+	"WT-UE-XwAP-ID",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_WT_UE_XwAP_ID_tags_1,
+	sizeof(asn_DEF_X2N_WT_UE_XwAP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_WT_UE_XwAP_ID_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WT_UE_XwAP_ID_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WT_UE_XwAP_ID_tags_1)
+		/sizeof(asn_DEF_X2N_WT_UE_XwAP_ID_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_WT_UE_XwAP_ID_constr_1, X2N_WT_UE_XwAP_ID_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WT-UE-XwAP-ID.h b/asn1c_defs/X2N_WT-UE-XwAP-ID.h
new file mode 100644
index 0000000..e9be453
--- /dev/null
+++ b/asn1c_defs/X2N_WT-UE-XwAP-ID.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WT_UE_XwAP_ID_H_
+#define	_X2N_WT_UE_XwAP_ID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_WT-UE-XwAP-ID */
+typedef OCTET_STRING_t	 X2N_WT_UE_XwAP_ID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_WT_UE_XwAP_ID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WT_UE_XwAP_ID;
+asn_struct_free_f X2N_WT_UE_XwAP_ID_free;
+asn_struct_print_f X2N_WT_UE_XwAP_ID_print;
+asn_constr_check_f X2N_WT_UE_XwAP_ID_constraint;
+ber_type_decoder_f X2N_WT_UE_XwAP_ID_decode_ber;
+der_type_encoder_f X2N_WT_UE_XwAP_ID_encode_der;
+xer_type_decoder_f X2N_WT_UE_XwAP_ID_decode_xer;
+xer_type_encoder_f X2N_WT_UE_XwAP_ID_encode_xer;
+per_type_decoder_f X2N_WT_UE_XwAP_ID_decode_uper;
+per_type_encoder_f X2N_WT_UE_XwAP_ID_encode_uper;
+per_type_decoder_f X2N_WT_UE_XwAP_ID_decode_aper;
+per_type_encoder_f X2N_WT_UE_XwAP_ID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WT_UE_XwAP_ID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WTID-Long-Type2.c b/asn1c_defs/X2N_WTID-Long-Type2.c
new file mode 100644
index 0000000..96d2d6a
--- /dev/null
+++ b/asn1c_defs/X2N_WTID-Long-Type2.c
@@ -0,0 +1,67 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WTID-Long-Type2.h"
+
+int
+X2N_WTID_Long_Type2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 48)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+asn_per_constraints_t asn_PER_type_X2N_WTID_Long_Type2_constr_1 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  48,  48 }	/* (SIZE(48..48)) */,
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WTID_Long_Type2_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WTID_Long_Type2 = {
+	"WTID-Long-Type2",
+	"WTID-Long-Type2",
+	&asn_OP_BIT_STRING,
+	asn_DEF_X2N_WTID_Long_Type2_tags_1,
+	sizeof(asn_DEF_X2N_WTID_Long_Type2_tags_1)
+		/sizeof(asn_DEF_X2N_WTID_Long_Type2_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WTID_Long_Type2_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WTID_Long_Type2_tags_1)
+		/sizeof(asn_DEF_X2N_WTID_Long_Type2_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_WTID_Long_Type2_constr_1, X2N_WTID_Long_Type2_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_BIT_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WTID-Long-Type2.h b/asn1c_defs/X2N_WTID-Long-Type2.h
new file mode 100644
index 0000000..19e28ac
--- /dev/null
+++ b/asn1c_defs/X2N_WTID-Long-Type2.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WTID_Long_Type2_H_
+#define	_X2N_WTID_Long_Type2_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BIT_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_WTID-Long-Type2 */
+typedef BIT_STRING_t	 X2N_WTID_Long_Type2_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_X2N_WTID_Long_Type2_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WTID_Long_Type2;
+asn_struct_free_f X2N_WTID_Long_Type2_free;
+asn_struct_print_f X2N_WTID_Long_Type2_print;
+asn_constr_check_f X2N_WTID_Long_Type2_constraint;
+ber_type_decoder_f X2N_WTID_Long_Type2_decode_ber;
+der_type_encoder_f X2N_WTID_Long_Type2_encode_der;
+xer_type_decoder_f X2N_WTID_Long_Type2_decode_xer;
+xer_type_encoder_f X2N_WTID_Long_Type2_encode_xer;
+per_type_decoder_f X2N_WTID_Long_Type2_decode_uper;
+per_type_encoder_f X2N_WTID_Long_Type2_encode_uper;
+per_type_decoder_f X2N_WTID_Long_Type2_decode_aper;
+per_type_encoder_f X2N_WTID_Long_Type2_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WTID_Long_Type2_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WTID-Type1.c b/asn1c_defs/X2N_WTID-Type1.c
new file mode 100644
index 0000000..fc90b12
--- /dev/null
+++ b/asn1c_defs/X2N_WTID-Type1.c
@@ -0,0 +1,96 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WTID-Type1.h"
+
+static int
+memb_X2N_shortWTID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+	size_t size;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	if(st->size > 0) {
+		/* Size in bits */
+		size = 8 * st->size - (st->bits_unused & 0x07);
+	} else {
+		size = 0;
+	}
+	
+	if((size == 24)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_shortWTID_constr_3 CC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 0,  0,  24,  24 }	/* (SIZE(24..24)) */,
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_WTID_Type1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WTID_Type1, pLMN_Identity),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_PLMN_Identity,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"pLMN-Identity"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WTID_Type1, shortWTID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_BIT_STRING,
+		0,
+		{ 0, &asn_PER_memb_X2N_shortWTID_constr_3,  memb_X2N_shortWTID_constraint_1 },
+		0, 0, /* No default value */
+		"shortWTID"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_WTID_Type1_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WTID_Type1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* shortWTID */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_WTID_Type1_specs_1 = {
+	sizeof(struct X2N_WTID_Type1),
+	offsetof(struct X2N_WTID_Type1, _asn_ctx),
+	asn_MAP_X2N_WTID_Type1_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	2,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WTID_Type1 = {
+	"WTID-Type1",
+	"WTID-Type1",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_WTID_Type1_tags_1,
+	sizeof(asn_DEF_X2N_WTID_Type1_tags_1)
+		/sizeof(asn_DEF_X2N_WTID_Type1_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WTID_Type1_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WTID_Type1_tags_1)
+		/sizeof(asn_DEF_X2N_WTID_Type1_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_WTID_Type1_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_WTID_Type1_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WTID-Type1.h b/asn1c_defs/X2N_WTID-Type1.h
new file mode 100644
index 0000000..b66f8e3
--- /dev/null
+++ b/asn1c_defs/X2N_WTID-Type1.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WTID_Type1_H_
+#define	_X2N_WTID_Type1_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_PLMN-Identity.h"
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_WTID-Type1 */
+typedef struct X2N_WTID_Type1 {
+	X2N_PLMN_Identity_t	 pLMN_Identity;
+	BIT_STRING_t	 shortWTID;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WTID_Type1_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WTID_Type1;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_WTID_Type1_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_WTID_Type1_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WTID_Type1_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WTID.c b/asn1c_defs/X2N_WTID.c
new file mode 100644
index 0000000..730ca2e
--- /dev/null
+++ b/asn1c_defs/X2N_WTID.c
@@ -0,0 +1,63 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WTID.h"
+
+#include "X2N_WTID-Type1.h"
+asn_per_constraints_t asn_PER_type_X2N_WTID_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_WTID_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_WTID, choice.wTID_Type1),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WTID_Type1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wTID-Type1"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WTID, choice.wTID_Type2),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_WTID_Long_Type2,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"wTID-Type2"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WTID_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* wTID-Type1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* wTID-Type2 */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_WTID_specs_1 = {
+	sizeof(struct X2N_WTID),
+	offsetof(struct X2N_WTID, _asn_ctx),
+	offsetof(struct X2N_WTID, present),
+	sizeof(((struct X2N_WTID *)0)->present),
+	asn_MAP_X2N_WTID_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WTID = {
+	"WTID",
+	"WTID",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_WTID_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_WTID_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_WTID_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WTID.h b/asn1c_defs/X2N_WTID.h
new file mode 100644
index 0000000..5a5eabe
--- /dev/null
+++ b/asn1c_defs/X2N_WTID.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WTID_H_
+#define	_X2N_WTID_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_WTID-Long-Type2.h"
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_WTID_PR {
+	X2N_WTID_PR_NOTHING,	/* No components present */
+	X2N_WTID_PR_wTID_Type1,
+	X2N_WTID_PR_wTID_Type2
+	/* Extensions may appear below */
+	
+} X2N_WTID_PR;
+
+/* Forward declarations */
+struct X2N_WTID_Type1;
+
+/* X2N_WTID */
+typedef struct X2N_WTID {
+	X2N_WTID_PR present;
+	union X2N_WTID_u {
+		struct X2N_WTID_Type1	*wTID_Type1;
+		X2N_WTID_Long_Type2_t	 wTID_Type2;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WTID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WTID;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_WTID_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_WTID_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_WTID_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WTID_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WidebandCQI.c b/asn1c_defs/X2N_WidebandCQI.c
new file mode 100644
index 0000000..4e819b4
--- /dev/null
+++ b/asn1c_defs/X2N_WidebandCQI.c
@@ -0,0 +1,104 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WidebandCQI.h"
+
+#include "X2N_WidebandCQICodeword1.h"
+#include "X2N_ProtocolExtensionContainer.h"
+static int
+memb_X2N_widebandCQICodeword0_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_widebandCQICodeword0_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_WidebandCQI_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQI, widebandCQICodeword0),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_widebandCQICodeword0_constr_2,  memb_X2N_widebandCQICodeword0_constraint_1 },
+		0, 0, /* No default value */
+		"widebandCQICodeword0"
+		},
+	{ ATF_POINTER, 2, offsetof(struct X2N_WidebandCQI, widebandCQICodeword1),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_X2N_WidebandCQICodeword1,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"widebandCQICodeword1"
+		},
+	{ ATF_POINTER, 1, offsetof(struct X2N_WidebandCQI, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolExtensionContainer_8231P221,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_X2N_WidebandCQI_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_X2N_WidebandCQI_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WidebandCQI_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* widebandCQICodeword0 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* widebandCQICodeword1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_WidebandCQI_specs_1 = {
+	sizeof(struct X2N_WidebandCQI),
+	offsetof(struct X2N_WidebandCQI, _asn_ctx),
+	asn_MAP_X2N_WidebandCQI_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_X2N_WidebandCQI_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQI = {
+	"WidebandCQI",
+	"WidebandCQI",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_WidebandCQI_tags_1,
+	sizeof(asn_DEF_X2N_WidebandCQI_tags_1)
+		/sizeof(asn_DEF_X2N_WidebandCQI_tags_1[0]), /* 1 */
+	asn_DEF_X2N_WidebandCQI_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_WidebandCQI_tags_1)
+		/sizeof(asn_DEF_X2N_WidebandCQI_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_WidebandCQI_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_WidebandCQI_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WidebandCQI.h b/asn1c_defs/X2N_WidebandCQI.h
new file mode 100644
index 0000000..8870f2f
--- /dev/null
+++ b/asn1c_defs/X2N_WidebandCQI.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WidebandCQI_H_
+#define	_X2N_WidebandCQI_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct X2N_WidebandCQICodeword1;
+struct X2N_ProtocolExtensionContainer;
+
+/* X2N_WidebandCQI */
+typedef struct X2N_WidebandCQI {
+	long	 widebandCQICodeword0;
+	struct X2N_WidebandCQICodeword1	*widebandCQICodeword1;	/* OPTIONAL */
+	struct X2N_ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WidebandCQI_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQI;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_WidebandCQI_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_WidebandCQI_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WidebandCQI_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_WidebandCQICodeword1.c b/asn1c_defs/X2N_WidebandCQICodeword1.c
new file mode 100644
index 0000000..6ceaeb6
--- /dev/null
+++ b/asn1c_defs/X2N_WidebandCQICodeword1.c
@@ -0,0 +1,122 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_WidebandCQICodeword1.h"
+
+static int
+memb_X2N_four_bitCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 15)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static int
+memb_X2N_three_bitSpatialDifferentialCQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 7)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_memb_X2N_four_bitCQI_constr_2 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  0,  15 }	/* (0..15,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_X2N_three_bitSpatialDifferentialCQI_constr_3 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  0,  7 }	/* (0..7,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_per_constraints_t asn_PER_type_X2N_WidebandCQICodeword1_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }	/* (0..1,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+asn_TYPE_member_t asn_MBR_X2N_WidebandCQICodeword1_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQICodeword1, choice.four_bitCQI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_four_bitCQI_constr_2,  memb_X2N_four_bitCQI_constraint_1 },
+		0, 0, /* No default value */
+		"four-bitCQI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_WidebandCQICodeword1, choice.three_bitSpatialDifferentialCQI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_NativeInteger,
+		0,
+		{ 0, &asn_PER_memb_X2N_three_bitSpatialDifferentialCQI_constr_3,  memb_X2N_three_bitSpatialDifferentialCQI_constraint_1 },
+		0, 0, /* No default value */
+		"three-bitSpatialDifferentialCQI"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_WidebandCQICodeword1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* four-bitCQI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* three-bitSpatialDifferentialCQI */
+};
+asn_CHOICE_specifics_t asn_SPC_X2N_WidebandCQICodeword1_specs_1 = {
+	sizeof(struct X2N_WidebandCQICodeword1),
+	offsetof(struct X2N_WidebandCQICodeword1, _asn_ctx),
+	offsetof(struct X2N_WidebandCQICodeword1, present),
+	sizeof(((struct X2N_WidebandCQICodeword1 *)0)->present),
+	asn_MAP_X2N_WidebandCQICodeword1_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0,
+	2	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQICodeword1 = {
+	"WidebandCQICodeword1",
+	"WidebandCQICodeword1",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_WidebandCQICodeword1_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_WidebandCQICodeword1_1,
+	2,	/* Elements count */
+	&asn_SPC_X2N_WidebandCQICodeword1_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_WidebandCQICodeword1.h b/asn1c_defs/X2N_WidebandCQICodeword1.h
new file mode 100644
index 0000000..4861d40
--- /dev/null
+++ b/asn1c_defs/X2N_WidebandCQICodeword1.h
@@ -0,0 +1,58 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_WidebandCQICodeword1_H_
+#define	_X2N_WidebandCQICodeword1_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_WidebandCQICodeword1_PR {
+	X2N_WidebandCQICodeword1_PR_NOTHING,	/* No components present */
+	X2N_WidebandCQICodeword1_PR_four_bitCQI,
+	X2N_WidebandCQICodeword1_PR_three_bitSpatialDifferentialCQI
+	/* Extensions may appear below */
+	
+} X2N_WidebandCQICodeword1_PR;
+
+/* X2N_WidebandCQICodeword1 */
+typedef struct X2N_WidebandCQICodeword1 {
+	X2N_WidebandCQICodeword1_PR present;
+	union X2N_WidebandCQICodeword1_u {
+		long	 four_bitCQI;
+		long	 three_bitSpatialDifferentialCQI;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_WidebandCQICodeword1_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_WidebandCQICodeword1;
+extern asn_CHOICE_specifics_t asn_SPC_X2N_WidebandCQICodeword1_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_WidebandCQICodeword1_1[2];
+extern asn_per_constraints_t asn_PER_type_X2N_WidebandCQICodeword1_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_WidebandCQICodeword1_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2AP-Message.c b/asn1c_defs/X2N_X2AP-Message.c
new file mode 100644
index 0000000..7f107ee
--- /dev/null
+++ b/asn1c_defs/X2N_X2AP-Message.c
@@ -0,0 +1,31 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2AP-Message.h"
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static const ber_tlv_tag_t asn_DEF_X2N_X2AP_Message_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2AP_Message = {
+	"X2AP-Message",
+	"X2AP-Message",
+	&asn_OP_OCTET_STRING,
+	asn_DEF_X2N_X2AP_Message_tags_1,
+	sizeof(asn_DEF_X2N_X2AP_Message_tags_1)
+		/sizeof(asn_DEF_X2N_X2AP_Message_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2AP_Message_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2AP_Message_tags_1)
+		/sizeof(asn_DEF_X2N_X2AP_Message_tags_1[0]), /* 1 */
+	{ 0, 0, OCTET_STRING_constraint },
+	0, 0,	/* No members */
+	&asn_SPC_OCTET_STRING_specs	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2AP-Message.h b/asn1c_defs/X2N_X2AP-Message.h
new file mode 100644
index 0000000..60dc450
--- /dev/null
+++ b/asn1c_defs/X2N_X2AP-Message.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2AP_Message_H_
+#define	_X2N_X2AP_Message_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2AP-Message */
+typedef OCTET_STRING_t	 X2N_X2AP_Message_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2AP_Message;
+asn_struct_free_f X2N_X2AP_Message_free;
+asn_struct_print_f X2N_X2AP_Message_print;
+asn_constr_check_f X2N_X2AP_Message_constraint;
+ber_type_decoder_f X2N_X2AP_Message_decode_ber;
+der_type_encoder_f X2N_X2AP_Message_encode_der;
+xer_type_decoder_f X2N_X2AP_Message_decode_xer;
+xer_type_encoder_f X2N_X2AP_Message_encode_xer;
+per_type_decoder_f X2N_X2AP_Message_decode_uper;
+per_type_encoder_f X2N_X2AP_Message_encode_uper;
+per_type_decoder_f X2N_X2AP_Message_decode_aper;
+per_type_encoder_f X2N_X2AP_Message_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2AP_Message_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2AP-PDU.c b/asn1c_defs/X2N_X2AP-PDU.c
new file mode 100644
index 0000000..edacbcc
--- /dev/null
+++ b/asn1c_defs/X2N_X2AP-PDU.c
@@ -0,0 +1,75 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2AP-PDU.h"
+
+#include "X2N_InitiatingMessage.h"
+#include "X2N_SuccessfulOutcome.h"
+#include "X2N_UnsuccessfulOutcome.h"
+static asn_per_constraints_t asn_PER_type_X2N_X2AP_PDU_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }	/* (0..2,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_X2N_X2AP_PDU_1[] = {
+	{ ATF_POINTER, 0, offsetof(struct X2N_X2AP_PDU, choice.initiatingMessage),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_InitiatingMessage,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"initiatingMessage"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_X2AP_PDU, choice.successfulOutcome),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_SuccessfulOutcome,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"successfulOutcome"
+		},
+	{ ATF_POINTER, 0, offsetof(struct X2N_X2AP_PDU, choice.unsuccessfulOutcome),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_UnsuccessfulOutcome,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"unsuccessfulOutcome"
+		},
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2AP_PDU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* initiatingMessage */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* successfulOutcome */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* unsuccessfulOutcome */
+};
+static asn_CHOICE_specifics_t asn_SPC_X2N_X2AP_PDU_specs_1 = {
+	sizeof(struct X2N_X2AP_PDU),
+	offsetof(struct X2N_X2AP_PDU, _asn_ctx),
+	offsetof(struct X2N_X2AP_PDU, present),
+	sizeof(((struct X2N_X2AP_PDU *)0)->present),
+	asn_MAP_X2N_X2AP_PDU_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0,
+	3	/* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2AP_PDU = {
+	"X2AP-PDU",
+	"X2AP-PDU",
+	&asn_OP_CHOICE,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	{ 0, &asn_PER_type_X2N_X2AP_PDU_constr_1, CHOICE_constraint },
+	asn_MBR_X2N_X2AP_PDU_1,
+	3,	/* Elements count */
+	&asn_SPC_X2N_X2AP_PDU_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2AP-PDU.h b/asn1c_defs/X2N_X2AP-PDU.h
new file mode 100644
index 0000000..16704a2
--- /dev/null
+++ b/asn1c_defs/X2N_X2AP-PDU.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Descriptions"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2AP_PDU_H_
+#define	_X2N_X2AP_PDU_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum X2N_X2AP_PDU_PR {
+	X2N_X2AP_PDU_PR_NOTHING,	/* No components present */
+	X2N_X2AP_PDU_PR_initiatingMessage,
+	X2N_X2AP_PDU_PR_successfulOutcome,
+	X2N_X2AP_PDU_PR_unsuccessfulOutcome
+	/* Extensions may appear below */
+	
+} X2N_X2AP_PDU_PR;
+
+/* Forward declarations */
+struct X2N_InitiatingMessage;
+struct X2N_SuccessfulOutcome;
+struct X2N_UnsuccessfulOutcome;
+
+/* X2N_X2AP-PDU */
+typedef struct X2N_X2AP_PDU {
+	X2N_X2AP_PDU_PR present;
+	union X2N_X2AP_PDU_u {
+		struct X2N_InitiatingMessage	*initiatingMessage;
+		struct X2N_SuccessfulOutcome	*successfulOutcome;
+		struct X2N_UnsuccessfulOutcome	*unsuccessfulOutcome;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+	} choice;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2AP_PDU_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2AP_PDU;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2AP_PDU_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2APMessageTransfer.c b/asn1c_defs/X2N_X2APMessageTransfer.c
new file mode 100644
index 0000000..2f85ea1
--- /dev/null
+++ b/asn1c_defs/X2N_X2APMessageTransfer.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2APMessageTransfer.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2APMessageTransfer_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2APMessageTransfer, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P29,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2APMessageTransfer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2APMessageTransfer_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2APMessageTransfer_specs_1 = {
+	sizeof(struct X2N_X2APMessageTransfer),
+	offsetof(struct X2N_X2APMessageTransfer, _asn_ctx),
+	asn_MAP_X2N_X2APMessageTransfer_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2APMessageTransfer = {
+	"X2APMessageTransfer",
+	"X2APMessageTransfer",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2APMessageTransfer_tags_1,
+	sizeof(asn_DEF_X2N_X2APMessageTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_X2APMessageTransfer_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2APMessageTransfer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2APMessageTransfer_tags_1)
+		/sizeof(asn_DEF_X2N_X2APMessageTransfer_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2APMessageTransfer_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2APMessageTransfer_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2APMessageTransfer.h b/asn1c_defs/X2N_X2APMessageTransfer.h
new file mode 100644
index 0000000..eab0316
--- /dev/null
+++ b/asn1c_defs/X2N_X2APMessageTransfer.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2APMessageTransfer_H_
+#define	_X2N_X2APMessageTransfer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2APMessageTransfer */
+typedef struct X2N_X2APMessageTransfer {
+	X2N_ProtocolIE_Container_8180P29_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2APMessageTransfer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2APMessageTransfer;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2APMessageTransfer_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2APMessageTransfer_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2APMessageTransfer_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2BenefitValue.c b/asn1c_defs/X2N_X2BenefitValue.c
new file mode 100644
index 0000000..4898972
--- /dev/null
+++ b/asn1c_defs/X2N_X2BenefitValue.c
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2BenefitValue.h"
+
+int
+X2N_X2BenefitValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 8)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static asn_per_constraints_t asn_PER_type_X2N_X2BenefitValue_constr_1 CC_NOTUSED = {
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  3,  3,  1,  8 }	/* (1..8,...) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2BenefitValue_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2BenefitValue = {
+	"X2BenefitValue",
+	"X2BenefitValue",
+	&asn_OP_NativeInteger,
+	asn_DEF_X2N_X2BenefitValue_tags_1,
+	sizeof(asn_DEF_X2N_X2BenefitValue_tags_1)
+		/sizeof(asn_DEF_X2N_X2BenefitValue_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2BenefitValue_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2BenefitValue_tags_1)
+		/sizeof(asn_DEF_X2N_X2BenefitValue_tags_1[0]), /* 1 */
+	{ 0, &asn_PER_type_X2N_X2BenefitValue_constr_1, X2N_X2BenefitValue_constraint },
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/asn1c_defs/X2N_X2BenefitValue.h b/asn1c_defs/X2N_X2BenefitValue.h
new file mode 100644
index 0000000..9d0161f
--- /dev/null
+++ b/asn1c_defs/X2N_X2BenefitValue.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-IEs"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2BenefitValue_H_
+#define	_X2N_X2BenefitValue_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2BenefitValue */
+typedef long	 X2N_X2BenefitValue_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2BenefitValue;
+asn_struct_free_f X2N_X2BenefitValue_free;
+asn_struct_print_f X2N_X2BenefitValue_print;
+asn_constr_check_f X2N_X2BenefitValue_constraint;
+ber_type_decoder_f X2N_X2BenefitValue_decode_ber;
+der_type_encoder_f X2N_X2BenefitValue_encode_der;
+xer_type_decoder_f X2N_X2BenefitValue_decode_xer;
+xer_type_encoder_f X2N_X2BenefitValue_encode_xer;
+per_type_decoder_f X2N_X2BenefitValue_decode_uper;
+per_type_encoder_f X2N_X2BenefitValue_encode_uper;
+per_type_decoder_f X2N_X2BenefitValue_decode_aper;
+per_type_encoder_f X2N_X2BenefitValue_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2BenefitValue_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2Release.c b/asn1c_defs/X2N_X2Release.c
new file mode 100644
index 0000000..3fe28eb
--- /dev/null
+++ b/asn1c_defs/X2N_X2Release.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2Release.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2Release_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2Release, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P28,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2Release_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2Release_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2Release_specs_1 = {
+	sizeof(struct X2N_X2Release),
+	offsetof(struct X2N_X2Release, _asn_ctx),
+	asn_MAP_X2N_X2Release_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2Release = {
+	"X2Release",
+	"X2Release",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2Release_tags_1,
+	sizeof(asn_DEF_X2N_X2Release_tags_1)
+		/sizeof(asn_DEF_X2N_X2Release_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2Release_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2Release_tags_1)
+		/sizeof(asn_DEF_X2N_X2Release_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2Release_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2Release_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2Release.h b/asn1c_defs/X2N_X2Release.h
new file mode 100644
index 0000000..fee0c0b
--- /dev/null
+++ b/asn1c_defs/X2N_X2Release.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2Release_H_
+#define	_X2N_X2Release_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2Release */
+typedef struct X2N_X2Release {
+	X2N_ProtocolIE_Container_8180P28_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2Release_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2Release;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2Release_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2Release_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2Release_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2RemovalFailure.c b/asn1c_defs/X2N_X2RemovalFailure.c
new file mode 100644
index 0000000..506de6d
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2RemovalFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P46,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalFailure_specs_1 = {
+	sizeof(struct X2N_X2RemovalFailure),
+	offsetof(struct X2N_X2RemovalFailure, _asn_ctx),
+	asn_MAP_X2N_X2RemovalFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalFailure = {
+	"X2RemovalFailure",
+	"X2RemovalFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalFailure_tags_1,
+	sizeof(asn_DEF_X2N_X2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalFailure_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2RemovalFailure.h b/asn1c_defs/X2N_X2RemovalFailure.h
new file mode 100644
index 0000000..363633b
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2RemovalFailure_H_
+#define	_X2N_X2RemovalFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2RemovalFailure */
+typedef struct X2N_X2RemovalFailure {
+	X2N_ProtocolIE_Container_8180P46_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2RemovalFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2RemovalRequest.c b/asn1c_defs/X2N_X2RemovalRequest.c
new file mode 100644
index 0000000..8ee5804
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2RemovalRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P44,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalRequest_specs_1 = {
+	sizeof(struct X2N_X2RemovalRequest),
+	offsetof(struct X2N_X2RemovalRequest, _asn_ctx),
+	asn_MAP_X2N_X2RemovalRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalRequest = {
+	"X2RemovalRequest",
+	"X2RemovalRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalRequest_tags_1,
+	sizeof(asn_DEF_X2N_X2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalRequest_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2RemovalRequest.h b/asn1c_defs/X2N_X2RemovalRequest.h
new file mode 100644
index 0000000..7595998
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2RemovalRequest_H_
+#define	_X2N_X2RemovalRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2RemovalRequest */
+typedef struct X2N_X2RemovalRequest {
+	X2N_ProtocolIE_Container_8180P44_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2RemovalRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2RemovalResponse.c b/asn1c_defs/X2N_X2RemovalResponse.c
new file mode 100644
index 0000000..63da4ef
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2RemovalResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2RemovalResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2RemovalResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P45,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2RemovalResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2RemovalResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalResponse_specs_1 = {
+	sizeof(struct X2N_X2RemovalResponse),
+	offsetof(struct X2N_X2RemovalResponse, _asn_ctx),
+	asn_MAP_X2N_X2RemovalResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalResponse = {
+	"X2RemovalResponse",
+	"X2RemovalResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2RemovalResponse_tags_1,
+	sizeof(asn_DEF_X2N_X2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2RemovalResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2RemovalResponse_tags_1)
+		/sizeof(asn_DEF_X2N_X2RemovalResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2RemovalResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2RemovalResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2RemovalResponse.h b/asn1c_defs/X2N_X2RemovalResponse.h
new file mode 100644
index 0000000..18af4fa
--- /dev/null
+++ b/asn1c_defs/X2N_X2RemovalResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2RemovalResponse_H_
+#define	_X2N_X2RemovalResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2RemovalResponse */
+typedef struct X2N_X2RemovalResponse {
+	X2N_ProtocolIE_Container_8180P45_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2RemovalResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2RemovalResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2RemovalResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2RemovalResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2RemovalResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2SetupFailure.c b/asn1c_defs/X2N_X2SetupFailure.c
new file mode 100644
index 0000000..3a6bf85
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupFailure.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2SetupFailure.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupFailure_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupFailure, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P12,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupFailure_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupFailure_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupFailure_specs_1 = {
+	sizeof(struct X2N_X2SetupFailure),
+	offsetof(struct X2N_X2SetupFailure, _asn_ctx),
+	asn_MAP_X2N_X2SetupFailure_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupFailure = {
+	"X2SetupFailure",
+	"X2SetupFailure",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupFailure_tags_1,
+	sizeof(asn_DEF_X2N_X2SetupFailure_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupFailure_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2SetupFailure_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupFailure_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupFailure_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupFailure_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2SetupFailure_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2SetupFailure.h b/asn1c_defs/X2N_X2SetupFailure.h
new file mode 100644
index 0000000..cb5ce26
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupFailure.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2SetupFailure_H_
+#define	_X2N_X2SetupFailure_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2SetupFailure */
+typedef struct X2N_X2SetupFailure {
+	X2N_ProtocolIE_Container_8180P12_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupFailure_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupFailure;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupFailure_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupFailure_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2SetupFailure_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2SetupRequest.c b/asn1c_defs/X2N_X2SetupRequest.c
new file mode 100644
index 0000000..35d934d
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupRequest.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2SetupRequest.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupRequest_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupRequest, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P10,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupRequest_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupRequest_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupRequest_specs_1 = {
+	sizeof(struct X2N_X2SetupRequest),
+	offsetof(struct X2N_X2SetupRequest, _asn_ctx),
+	asn_MAP_X2N_X2SetupRequest_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupRequest = {
+	"X2SetupRequest",
+	"X2SetupRequest",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupRequest_tags_1,
+	sizeof(asn_DEF_X2N_X2SetupRequest_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupRequest_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2SetupRequest_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupRequest_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupRequest_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupRequest_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2SetupRequest_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2SetupRequest.h b/asn1c_defs/X2N_X2SetupRequest.h
new file mode 100644
index 0000000..4a42f7f
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupRequest.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2SetupRequest_H_
+#define	_X2N_X2SetupRequest_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2SetupRequest */
+typedef struct X2N_X2SetupRequest {
+	X2N_ProtocolIE_Container_8180P10_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupRequest_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupRequest;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupRequest_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupRequest_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2SetupRequest_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_X2SetupResponse.c b/asn1c_defs/X2N_X2SetupResponse.c
new file mode 100644
index 0000000..1309ff9
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupResponse.c
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#include "X2N_X2SetupResponse.h"
+
+asn_TYPE_member_t asn_MBR_X2N_X2SetupResponse_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct X2N_X2SetupResponse, protocolIEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_X2N_ProtocolIE_Container_8180P11,
+		0,
+		{ 0, 0, 0 },
+		0, 0, /* No default value */
+		"protocolIEs"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_X2N_X2SetupResponse_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_X2N_X2SetupResponse_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
+};
+asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupResponse_specs_1 = {
+	sizeof(struct X2N_X2SetupResponse),
+	offsetof(struct X2N_X2SetupResponse, _asn_ctx),
+	asn_MAP_X2N_X2SetupResponse_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	1,	/* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupResponse = {
+	"X2SetupResponse",
+	"X2SetupResponse",
+	&asn_OP_SEQUENCE,
+	asn_DEF_X2N_X2SetupResponse_tags_1,
+	sizeof(asn_DEF_X2N_X2SetupResponse_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupResponse_tags_1[0]), /* 1 */
+	asn_DEF_X2N_X2SetupResponse_tags_1,	/* Same as above */
+	sizeof(asn_DEF_X2N_X2SetupResponse_tags_1)
+		/sizeof(asn_DEF_X2N_X2SetupResponse_tags_1[0]), /* 1 */
+	{ 0, 0, SEQUENCE_constraint },
+	asn_MBR_X2N_X2SetupResponse_1,
+	1,	/* Elements count */
+	&asn_SPC_X2N_X2SetupResponse_specs_1	/* Additional specs */
+};
+
diff --git a/asn1c_defs/X2N_X2SetupResponse.h b/asn1c_defs/X2N_X2SetupResponse.h
new file mode 100644
index 0000000..c30c58c
--- /dev/null
+++ b/asn1c_defs/X2N_X2SetupResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ * From ASN.1 module "X2AP-PDU-Contents"
+ * 	found in "../../asn_defs/asn1/x2ap-15-04.asn"
+ * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER -no-gen-OER`
+ */
+
+#ifndef	_X2N_X2SetupResponse_H_
+#define	_X2N_X2SetupResponse_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "X2N_ProtocolIE-Container.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* X2N_X2SetupResponse */
+typedef struct X2N_X2SetupResponse {
+	X2N_ProtocolIE_Container_8180P11_t	 protocolIEs;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} X2N_X2SetupResponse_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_X2N_X2SetupResponse;
+extern asn_SEQUENCE_specifics_t asn_SPC_X2N_X2SetupResponse_specs_1;
+extern asn_TYPE_member_t asn_MBR_X2N_X2SetupResponse_1[1];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _X2N_X2SetupResponse_H_ */
+#include <asn_internal.h>
diff --git a/asn1c_defs/X2N_asn_constant.h b/asn1c_defs/X2N_asn_constant.h
new file mode 100644
index 0000000..c640731
--- /dev/null
+++ b/asn1c_defs/X2N_asn_constant.h
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.29 n1 (http://lionet.info/asn1c)
+ */
+
+#ifndef _X2N_ASN_CONSTANT_H
+#define _X2N_ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define X2N_maxPrivateIEs (65535)
+#define X2N_maxProtocolExtensions (65535)
+#define X2N_maxProtocolIEs (65535)
+#define X2N_maxEARFCN (65535)
+#define X2N_maxEARFCNPlusOne (65536)
+#define X2N_newmaxEARFCN (262143)
+#define X2N_maxInterfaces (16)
+#define X2N_maxCellineNB (256)
+#define X2N_maxnoofBands (16)
+#define X2N_maxnoofBearers (256)
+#define X2N_maxNrOfErrors (256)
+#define X2N_maxnoofPDCP_SN (16)
+#define X2N_maxnoofEPLMNs (15)
+#define X2N_maxnoofEPLMNsPlusOne (16)
+#define X2N_maxnoofForbLACs (4096)
+#define X2N_maxnoofForbTACs (4096)
+#define X2N_maxnoofBPLMNs (6)
+#define X2N_maxnoofNeighbours (512)
+#define X2N_maxnoofPRBs (110)
+#define X2N_maxPools (16)
+#define X2N_maxnoofCells (16)
+#define X2N_maxnoofMBSFN (8)
+#define X2N_maxFailedMeasObjects (32)
+#define X2N_maxnoofCellIDforMDT (32)
+#define X2N_maxnoofTAforMDT (8)
+#define X2N_maxnoofMBMSServiceAreaIdentities (256)
+#define X2N_maxnoofMDTPLMNs (16)
+#define X2N_maxnoofCoMPHypothesisSet (256)
+#define X2N_maxnoofCoMPCells (32)
+#define X2N_maxUEReport (128)
+#define X2N_maxCellReport (9)
+#define X2N_maxnoofPA (3)
+#define X2N_maxCSIProcess (4)
+#define X2N_maxCSIReport (2)
+#define X2N_maxSubband (14)
+#define X2N_maxofNRNeighbours (1024)
+#define X2N_maxCellinengNB (16384)
+#define X2N_maxnooftimeperiods (2)
+#define X2N_maxnoofCellIDforQMC (32)
+#define X2N_maxnoofTAforQMC (8)
+#define X2N_maxnoofPLMNforQMC (16)
+#define X2N_maxUEsinengNBDU (8192)
+#define X2N_maxnoofProtectedResourcePatterns (16)
+#define X2N_maxnoNRcellsSpectrumSharingWithE_UTRA (64)
+#define X2N_maxnoofNrCellBands (32)
+#define X2N_maxnoofBluetoothName (4)
+#define X2N_maxnoofWLANName (4)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _X2N_ASN_CONSTANT_H */
diff --git a/asn1c_defs/asn_SEQUENCE_OF.c b/asn1c_defs/asn_SEQUENCE_OF.c
new file mode 100644
index 0000000..ec952fc
--- /dev/null
+++ b/asn1c_defs/asn_SEQUENCE_OF.c
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_SEQUENCE_OF.h>
+
+typedef A_SEQUENCE_OF(void) asn_sequence;
+
+void
+asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
+	asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
+
+	if(as) {
+		void *ptr;
+		int n;
+
+		if(number < 0 || number >= as->count)
+			return;	/* Nothing to delete */
+
+		if(_do_free && as->free) {
+			ptr = as->array[number];
+		} else {
+			ptr = 0;
+		}
+
+		/*
+		 * Shift all elements to the left to hide the gap.
+		 */
+		--as->count;
+		for(n = number; n < as->count; n++)
+			as->array[n] = as->array[n+1];
+
+		/*
+		 * Invoke the third-party function only when the state
+		 * of the parent structure is consistent.
+		 */
+		if(ptr) as->free(ptr);
+	}
+}
+
diff --git a/asn1c_defs/asn_SEQUENCE_OF.h b/asn1c_defs/asn_SEQUENCE_OF.h
new file mode 100644
index 0000000..e35bc44
--- /dev/null
+++ b/asn1c_defs/asn_SEQUENCE_OF.h
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_SEQUENCE_OF_H
+#define	ASN_SEQUENCE_OF_H
+
+#include <asn_SET_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * SEQUENCE OF is the same as SET OF with a tiny difference:
+ * the delete operation preserves the initial order of elements
+ * and thus MAY operate in non-constant time.
+ */
+#define	A_SEQUENCE_OF(type)	A_SET_OF(type)
+
+#define	ASN_SEQUENCE_ADD(headptr, ptr)		\
+	asn_sequence_add((headptr), (ptr))
+
+/***********************************************
+ * Implementation of the SEQUENCE OF structure.
+ */
+
+#define	asn_sequence_add	asn_set_add
+#define	asn_sequence_empty	asn_set_empty
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is NOT a constant-time operation.
+ * The order of elements is preserved.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_;
+#define _A_SEQUENCE_FROM_VOID(ptr)	((asn_anonymous_sequence_ *)(ptr))
+#define _A_CSEQUENCE_FROM_VOID(ptr) 	((const asn_anonymous_sequence_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_SEQUENCE_OF_H */
diff --git a/asn1c_defs/asn_SET_OF.c b/asn1c_defs/asn_SET_OF.c
new file mode 100644
index 0000000..944f2cb
--- /dev/null
+++ b/asn1c_defs/asn_SET_OF.c
@@ -0,0 +1,88 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_SET_OF.h>
+#include <errno.h>
+
+/*
+ * Add another element into the set.
+ */
+int
+asn_set_add(void *asn_set_of_x, void *ptr) {
+	asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+	if(as == 0 || ptr == 0) {
+		errno = EINVAL;		/* Invalid arguments */
+		return -1;
+	}
+
+	/*
+	 * Make sure there's enough space to insert an element.
+	 */
+	if(as->count == as->size) {
+		int _newsize = as->size ? (as->size << 1) : 4;
+		void *_new_arr;
+		_new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0]));
+		if(_new_arr) {
+			as->array = (void **)_new_arr;
+			as->size = _newsize;
+		} else {
+			/* ENOMEM */
+			return -1;
+		}
+	}
+
+	as->array[as->count++] = ptr;
+
+	return 0;
+}
+
+void
+asn_set_del(void *asn_set_of_x, int number, int _do_free) {
+	asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+	if(as) {
+		void *ptr;
+		if(number < 0 || number >= as->count)
+			return;
+
+		if(_do_free && as->free) {
+			ptr = as->array[number];
+		} else {
+			ptr = 0;
+		}
+
+		as->array[number] = as->array[--as->count];
+
+		/*
+		 * Invoke the third-party function only when the state
+		 * of the parent structure is consistent.
+		 */
+		if(ptr) as->free(ptr);
+	}
+}
+
+/*
+ * Free the contents of the set, do not free the set itself.
+ */
+void
+asn_set_empty(void *asn_set_of_x) {
+	asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+	if(as) {
+		if(as->array) {
+			if(as->free) {
+				while(as->count--)
+					as->free(as->array[as->count]);
+			}
+			FREEMEM(as->array);
+			as->array = 0;
+		}
+		as->count = 0;
+		as->size = 0;
+	}
+
+}
+
diff --git a/asn1c_defs/asn_SET_OF.h b/asn1c_defs/asn_SET_OF.h
new file mode 100644
index 0000000..882e1a4
--- /dev/null
+++ b/asn1c_defs/asn_SET_OF.h
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_SET_OF_H
+#define	ASN_SET_OF_H
+
+#ifdef __cplusplus
+#define A_SET_OF(type)                   \
+    struct {                             \
+        type **array;                    \
+        int count; /* Meaningful size */ \
+        int size;  /* Allocated size */  \
+        void (*free)(decltype(*array));  \
+    }
+#else   /* C */
+#define A_SET_OF(type)                   \
+    struct {                             \
+        type **array;                    \
+        int count; /* Meaningful size */ \
+        int size;  /* Allocated size */  \
+        void (*free)(type *);    \
+    }
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define	ASN_SET_ADD(headptr, ptr)		\
+	asn_set_add((headptr), (ptr))
+
+/*******************************************
+ * Implementation of the SET OF structure.
+ */
+
+/*
+ * Add another structure into the set by its pointer.
+ * RETURN VALUES:
+ * 0 for success and -1/errno for failure.
+ */
+int  asn_set_add(void *asn_set_of_x, void *ptr);
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is a constant-time operation. The order of elements before the
+ * deleted ones is guaranteed, the order of elements after the deleted
+ * one is NOT guaranteed.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_set_del(void *asn_set_of_x, int number, int _do_free);
+
+/*
+ * Empty the contents of the set. Will free the elements, if (*free) is given.
+ * Will NOT free the set itself.
+ */
+void asn_set_empty(void *asn_set_of_x);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SET_OF(void) asn_anonymous_set_;
+#define _A_SET_FROM_VOID(ptr)		((asn_anonymous_set_ *)(ptr))
+#define _A_CSET_FROM_VOID(ptr)		((const asn_anonymous_set_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_SET_OF_H */
diff --git a/asn1c_defs/asn_application.c b/asn1c_defs/asn_application.c
new file mode 100644
index 0000000..2bff460
--- /dev/null
+++ b/asn1c_defs/asn_application.c
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_application.h>
+#include <errno.h>
+
+static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
+                                          enum asn_transfer_syntax syntax,
+                                          const asn_TYPE_descriptor_t *td,
+                                          const void *sptr,
+                                          asn_app_consume_bytes_f *callback,
+                                          void *callback_key);
+
+
+struct callback_count_bytes_key {
+    asn_app_consume_bytes_f *callback;
+    void *callback_key;
+    size_t computed_size;
+};
+
+/*
+ * Encoder which just counts bytes that come through it.
+ */
+static int
+callback_count_bytes_cb(const void *data, size_t size, void *keyp) {
+    struct callback_count_bytes_key *key = keyp;
+    int ret;
+
+    ret = key->callback(data, size, key->callback_key);
+    if(ret >= 0) {
+        key->computed_size += size;
+    }
+
+    return ret;
+}
+
+struct overrun_encoder_key {
+    void *buffer;
+    size_t buffer_size;
+    size_t computed_size;
+};
+
+struct dynamic_encoder_key {
+    void *buffer;
+    size_t buffer_size;
+    size_t computed_size;
+};
+
+struct callback_failure_catch_key {
+    asn_app_consume_bytes_f *callback;
+    void *callback_key;
+    int callback_failed;
+};
+
+/*
+ * Encoder which doesn't stop counting bytes
+ * even if it reaches the end of the buffer.
+ */
+static int
+overrun_encoder_cb(const void *data, size_t size, void *keyp) {
+    struct overrun_encoder_key *key = keyp;
+
+    if(key->computed_size + size > key->buffer_size) {
+        /*
+         * Avoid accident on the next call:
+         * stop adding bytes to the buffer.
+         */
+        key->buffer_size = 0;
+    } else {
+        memcpy((char *)key->buffer + key->computed_size, data, size);
+    }
+    key->computed_size += size;
+
+    return 0;
+}
+
+/*
+ * Encoder which dynamically allocates output, and continues
+ * to count even if allocation failed.
+ */
+static int
+dynamic_encoder_cb(const void *data, size_t size, void *keyp) {
+    struct dynamic_encoder_key *key = keyp;
+
+    if(key->buffer) {
+        if(key->computed_size + size >= key->buffer_size) {
+            void *p;
+            size_t new_size = key->buffer_size;
+
+            do {
+                new_size *= 2;
+            } while(new_size <= key->computed_size + size);
+
+            p = REALLOC(key->buffer, new_size);
+            if(p) {
+                key->buffer = p;
+                key->buffer_size = new_size;
+            } else {
+                FREEMEM(key->buffer);
+                key->buffer = 0;
+                key->buffer_size = 0;
+                key->computed_size += size;
+                return 0;
+            }
+        }
+        memcpy((char *)key->buffer + key->computed_size, data, size);
+    }
+
+    key->computed_size += size;
+
+    return 0;
+}
+
+/*
+ * Encoder which help convert the application level encoder failure into EIO.
+ */
+static int
+callback_failure_catch_cb(const void *data, size_t size, void *keyp) {
+    struct callback_failure_catch_key *key = keyp;
+    int ret;
+
+    ret = key->callback(data, size, key->callback_key);
+    if(ret < 0) {
+        key->callback_failed = 1;
+    }
+
+    return ret;
+}
+
+asn_enc_rval_t
+asn_encode(const asn_codec_ctx_t *opt_codec_ctx,
+           enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td,
+           const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) {
+    struct callback_failure_catch_key cb_key;
+    asn_enc_rval_t er = {0,0,0};
+
+    if(!callback) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    cb_key.callback = callback;
+    cb_key.callback_key = callback_key;
+    cb_key.callback_failed = 0;
+
+    er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                             callback_failure_catch_cb, &cb_key);
+    if(cb_key.callback_failed) {
+        assert(er.encoded == -1);
+        assert(errno == EBADF);
+        errno = EIO;
+    }
+
+    return er;
+}
+
+asn_enc_rval_t
+asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx,
+                     enum asn_transfer_syntax syntax,
+                     const asn_TYPE_descriptor_t *td, const void *sptr,
+                     void *buffer, size_t buffer_size) {
+    struct overrun_encoder_key buf_key;
+    asn_enc_rval_t er = {0,0,0};
+
+    if(buffer_size > 0 && !buffer) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    buf_key.buffer = buffer;
+    buf_key.buffer_size = buffer_size;
+    buf_key.computed_size = 0;
+
+    er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                             overrun_encoder_cb, &buf_key);
+
+    if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) {
+        ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE
+                  " yet produced %" ASN_PRI_SIZE " bytes",
+                  er.encoded, buf_key.computed_size);
+        assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size);
+    }
+
+    return er;
+}
+
+asn_encode_to_new_buffer_result_t
+asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx,
+                         enum asn_transfer_syntax syntax,
+                         const asn_TYPE_descriptor_t *td, const void *sptr) {
+    struct dynamic_encoder_key buf_key;
+    asn_encode_to_new_buffer_result_t res;
+
+    buf_key.buffer_size = 16;
+    buf_key.buffer = MALLOC(buf_key.buffer_size);
+    buf_key.computed_size = 0;
+
+    res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                                     dynamic_encoder_cb, &buf_key);
+
+    if(res.result.encoded >= 0
+       && (size_t)res.result.encoded != buf_key.computed_size) {
+        ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE
+                  " yet produced %" ASN_PRI_SIZE " bytes",
+                  res.result.encoded, buf_key.computed_size);
+        assert(res.result.encoded < 0
+               || (size_t)res.result.encoded == buf_key.computed_size);
+    }
+
+    res.buffer = buf_key.buffer;
+
+    /* 0-terminate just in case. */
+    if(res.buffer) {
+        assert(buf_key.computed_size < buf_key.buffer_size);
+        ((char *)res.buffer)[buf_key.computed_size] = '\0';
+    }
+
+    return res;
+}
+
+static asn_enc_rval_t
+asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
+                    enum asn_transfer_syntax syntax,
+                    const asn_TYPE_descriptor_t *td, const void *sptr,
+                    asn_app_consume_bytes_f *callback, void *callback_key) {
+    asn_enc_rval_t er = {0,0,0};
+    enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL;
+
+    (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */
+
+    if(!td || !sptr) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    switch(syntax) {
+    case ATS_NONSTANDARD_PLAINTEXT:
+        if(td->op->print_struct) {
+            struct callback_count_bytes_key cb_key;
+            cb_key.callback = callback;
+            cb_key.callback_key = callback_key;
+            cb_key.computed_size = 0;
+            if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb,
+                                    &cb_key)
+                   < 0
+               || callback_count_bytes_cb("\n", 1, &cb_key) < 0) {
+                errno = EBADF; /* Structure has incorrect form. */
+                er.encoded = -1;
+                er.failed_type = td;
+                er.structure_ptr = sptr;
+            } else {
+                er.encoded = cb_key.computed_size;
+                er.failed_type = 0;
+                er.structure_ptr = 0;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+
+    case ATS_RANDOM:
+        errno = ENOENT; /* Randomization doesn't make sense on output. */
+        ASN__ENCODE_FAILED;
+
+    case ATS_BER:
+        /* BER is a superset of DER. */
+        /* Fall through. */
+    case ATS_DER:
+        if(td->op->der_encoder) {
+            er = der_encode(td, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->der_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* DER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+    case ATS_CER:
+        errno = ENOENT; /* Transfer syntax is not defined for any type. */
+        ASN__ENCODE_FAILED;
+
+#ifdef  ASN_DISABLE_OER_SUPPORT
+    case ATS_BASIC_OER:
+    case ATS_CANONICAL_OER:
+        errno = ENOENT; /* PER is not defined. */
+        ASN__ENCODE_FAILED;
+        break;
+#else /* ASN_DISABLE_OER_SUPPORT */
+    case ATS_BASIC_OER:
+        /* CANONICAL-OER is a superset of BASIC-OER. */
+        /* Fall through. */
+    case ATS_CANONICAL_OER:
+        if(td->op->oer_encoder) {
+            er = oer_encode(td, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->oer_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* OER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+#endif /* ASN_DISABLE_OER_SUPPORT */
+
+#ifdef  ASN_DISABLE_PER_SUPPORT
+    case ATS_UNALIGNED_BASIC_PER:
+    case ATS_UNALIGNED_CANONICAL_PER:
+    case ATS_ALIGNED_BASIC_PER:
+    case ATS_ALIGNED_CANONICAL_PER:
+        errno = ENOENT; /* PER is not defined. */
+        ASN__ENCODE_FAILED;
+        break;
+#else /* ASN_DISABLE_PER_SUPPORT */
+    case ATS_UNALIGNED_BASIC_PER:
+        /* CANONICAL-UPER is a superset of BASIC-UPER. */
+        /* Fall through. */
+    case ATS_UNALIGNED_CANONICAL_PER:
+        if(td->op->uper_encoder) {
+            er = uper_encode(td, 0, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->uper_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* UPER is not defined for this type. */
+                }
+            } else {
+                ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+                if(er.encoded == 0) {
+                    /* Enforce "Complete Encoding" of X.691 #11.1 */
+                    if(callback("\0", 1, callback_key) < 0) {
+                        errno = EBADF;
+                        ASN__ENCODE_FAILED;
+                    }
+                    er.encoded = 8; /* Exactly 8 zero bits is added. */
+                }
+                /* Convert bits into bytes */
+                er.encoded = (er.encoded + 7) >> 3;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+    case ATS_ALIGNED_BASIC_PER:
+        /* CANONICAL-APER is a superset of BASIC-APER. */
+        /* Fall through. */
+    case ATS_ALIGNED_CANONICAL_PER:
+        if(td->op->aper_encoder) {
+            er = aper_encode(td, 0, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->aper_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* APER is not defined for this type. */
+                }
+            } else {
+                ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+                if(er.encoded == 0) {
+                    /* Enforce "Complete Encoding" of X.691 #11.1 */
+                    if(callback("\0", 1, callback_key) < 0) {
+                        errno = EBADF;
+                        ASN__ENCODE_FAILED;
+                    }
+                    er.encoded = 8; /* Exactly 8 zero bits is added. */
+                }
+                /* Convert bits into bytes */
+                er.encoded = (er.encoded + 7) >> 3;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+    case ATS_BASIC_XER:
+        /* CANONICAL-XER is a superset of BASIC-XER. */
+        xer_flags &= ~XER_F_CANONICAL;
+        xer_flags |= XER_F_BASIC;
+        /* Fall through. */
+    case ATS_CANONICAL_XER:
+        if(td->op->xer_encoder) {
+            er = xer_encode(td, sptr, xer_flags, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->xer_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* XER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+
+    default:
+        errno = ENOENT;
+        ASN__ENCODE_FAILED;
+    }
+
+    return er;
+}
+
+asn_dec_rval_t
+asn_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td,
+           void **sptr, const void *buffer, size_t size) {
+    if(!td || !td->op || !sptr || (size && !buffer)) {
+        ASN__DECODE_FAILED;
+    }
+
+    switch(syntax) {
+    case ATS_CER:
+    case ATS_NONSTANDARD_PLAINTEXT:
+    default:
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+
+    case ATS_RANDOM:
+        if(!td->op->random_fill) {
+            ASN__DECODE_FAILED;
+        } else {
+            if(asn_random_fill(td, sptr, 16000) == 0) {
+                asn_dec_rval_t ret = {RC_OK, 0};
+                return ret;
+            } else {
+                ASN__DECODE_FAILED;
+            }
+        }
+        break;
+
+    case ATS_DER:
+    case ATS_BER:
+        return ber_decode(opt_codec_ctx, td, sptr, buffer, size);
+
+    case ATS_BASIC_OER:
+    case ATS_CANONICAL_OER:
+#ifdef  ASN_DISABLE_OER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return oer_decode(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_UNALIGNED_BASIC_PER:
+    case ATS_UNALIGNED_CANONICAL_PER:
+#ifdef  ASN_DISABLE_PER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_ALIGNED_BASIC_PER:
+    case ATS_ALIGNED_CANONICAL_PER:
+#ifdef  ASN_DISABLE_PER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_BASIC_XER:
+    case ATS_CANONICAL_XER:
+        return xer_decode(opt_codec_ctx, td, sptr, buffer, size);
+    }
+}
+
diff --git a/asn1c_defs/asn_application.h b/asn1c_defs/asn_application.h
new file mode 100644
index 0000000..034f646
--- /dev/null
+++ b/asn1c_defs/asn_application.h
@@ -0,0 +1,171 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Application-level ASN.1 callbacks.
+ */
+#ifndef	ASN_APPLICATION_H
+#define	ASN_APPLICATION_H
+
+#include "asn_system.h"		/* for platform-dependent types */
+#include "asn_codecs.h"		/* for ASN.1 codecs specifics */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A selection of ASN.1 Transfer Syntaxes to use with generalized
+ * encoders and decoders declared further in this .h file.
+ */
+enum asn_transfer_syntax {
+    /* Avoid appearance of a default transfer syntax. */
+    ATS_INVALID = 0,
+    /* Plaintext output (not conforming to any standard), for debugging. */
+    ATS_NONSTANDARD_PLAINTEXT,
+    /* Returns a randomly generated structure. */
+    ATS_RANDOM,
+    /*
+     * X.690:
+     * BER: Basic Encoding Rules.
+     * DER: Distinguished Encoding Rules.
+     * CER: Canonical Encoding Rules.
+     * DER and CER are more strict variants of BER.
+     */
+    ATS_BER,
+    ATS_DER,
+    ATS_CER, /* Only decoding is supported */
+    /*
+     * X.696:
+     * OER: Octet Encoding Rules.
+     * CANONICAL-OER is a more strict variant of BASIC-OER.
+     */
+    ATS_BASIC_OER,
+    ATS_CANONICAL_OER,
+    /*
+     * X.691:
+     * PER: Packed Encoding Rules.
+     * CANONICAL-PER is a more strict variant of BASIC-PER.
+     * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1).
+     */
+    ATS_UNALIGNED_BASIC_PER,
+    ATS_UNALIGNED_CANONICAL_PER,
+    ATS_ALIGNED_BASIC_PER,
+    ATS_ALIGNED_CANONICAL_PER,
+    /*
+     * X.693:
+     * XER: XML Encoding Rules.
+     * CANONICAL-XER is a more strict variant of BASIC-XER.
+     */
+    ATS_BASIC_XER,
+    ATS_CANONICAL_XER
+};
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * RETURN VALUES:
+ * The (.encoded) field of the return value is REDEFINED to mean the following:
+ * >=0: The computed size of the encoded data. Can exceed the (buffer_size).
+ *  -1: Error encoding the structure. See the error code in (errno):
+ *      EINVAL: Incorrect parameters to the function, such as NULLs.
+ *      ENOENT: Encoding transfer syntax is not defined (for this type).
+ *      EBADF:  The structure has invalid form or content constraint failed.
+ *      The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate
+ *      values at the place of failure, if at all possible.
+ * WARNING: The (.encoded) field of the return value can exceed the buffer_size.
+ * This is similar to snprintf(3) contract which might return values
+ * greater than the buffer size.
+ */
+asn_enc_rval_t asn_encode_to_buffer(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode, void *buffer, size_t buffer_size);
+
+/*
+ * A variant of asn_encode_to_buffer() with automatically allocated buffer.
+ * RETURN VALUES:
+ * On success, returns a newly allocated (.buffer) containing the whole message.
+ * The message size is returned in (.result.encoded).
+ * On failure:
+ *  (.buffer) is NULL,
+ *  (.result.encoded) as in asn_encode_to_buffer(),
+ *  The errno codes as in asn_encode_to_buffer(), plus the following:
+ *      ENOMEM: Memory allocation failed due to system or internal limits.
+ * The user is responsible for freeing the (.buffer).
+ */
+typedef struct asn_encode_to_new_buffer_result_s {
+    void *buffer;   /* NULL if failed to encode. */
+    asn_enc_rval_t result;
+} asn_encode_to_new_buffer_result_t;
+asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode);
+
+
+/*
+ * Generic type of an application-defined callback to return various
+ * types of data to the application.
+ * EXPECTED RETURN VALUES:
+ *  -1: Failed to consume bytes. Abort the mission.
+ * Non-negative return values indicate success, and ignored.
+ */
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size,
+                                     void *application_specific_key);
+
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * Returns the comprehensive encoding result descriptor (see asn_codecs.h).
+ * RETURN VALUES:
+ * The negative (.encoded) field of the return values is accompanied with the
+ * following error codes (errno):
+ *      EINVAL: Incorrect parameters to the function, such as NULLs.
+ *      ENOENT: Encoding transfer syntax is not defined (for this type).
+ *      EBADF:  The structure has invalid form or content constraint failed.
+ *      EIO:    The (callback) has returned negative value during encoding.
+ */
+asn_enc_rval_t asn_encode(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode,
+    asn_app_consume_bytes_f *callback, void *callback_key);
+
+
+/*
+ * A generic decoder for any supported transfer syntax.
+ */
+asn_dec_rval_t asn_decode(
+    const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_decode,
+    void **structure_ptr, /* Pointer to a target structure's pointer */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of that buffer */
+);
+
+
+/*
+ * A callback of this type is called whenever constraint validation fails
+ * on some ASN.1 type. See "constraints.h" for more details on constraint
+ * validation.
+ * This callback specifies a descriptor of the ASN.1 type which failed
+ * the constraint check, as well as human readable message on what
+ * particular constraint has failed.
+ */
+typedef void (asn_app_constraint_failed_f)(void *application_specific_key,
+	const struct asn_TYPE_descriptor_s *type_descriptor_which_failed,
+	const void *structure_which_failed_ptr,
+	const char *error_message_format, ...) CC_PRINTFLIKE(4, 5);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "constr_TYPE.h"	/* for asn_TYPE_descriptor_t */
+
+#endif	/* ASN_APPLICATION_H */
diff --git a/asn1c_defs/asn_bit_data.c b/asn1c_defs/asn_bit_data.c
new file mode 100644
index 0000000..fe4b89b
--- /dev/null
+++ b/asn1c_defs/asn_bit_data.c
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <asn_internal.h>
+#include <asn_bit_data.h>
+
+/*
+ * Create a contiguous non-refillable bit data structure.
+ * Can be freed by FREEMEM().
+ */
+asn_bit_data_t *
+asn_bit_data_new_contiguous(const void *data, size_t size_bits) {
+    size_t size_bytes = (size_bits + 7) / 8;
+    asn_bit_data_t *pd;
+    uint8_t *bytes;
+
+    /* Get the extensions map */
+    pd = CALLOC(1, sizeof(*pd) + size_bytes + 1);
+    if(!pd) {
+        return NULL;
+    }
+    bytes = (void *)(((char *)pd) + sizeof(*pd));
+    memcpy(bytes, data, size_bytes);
+    bytes[size_bytes] = 0;
+    pd->buffer = bytes;
+    pd->nboff = 0;
+    pd->nbits = size_bits;
+
+    return pd;
+}
+
+
+char *
+asn_bit_data_string(asn_bit_data_t *pd) {
+	static char buf[2][32];
+	static int n;
+	n = (n+1) % 2;
+    snprintf(buf[n], sizeof(buf[n]),
+             "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE
+             "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}",
+             pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits,
+             pd->nbits - pd->nboff);
+    return buf[n];
+}
+
+void
+asn_get_undo(asn_bit_data_t *pd, int nbits) {
+	if((ssize_t)pd->nboff < nbits) {
+		assert((ssize_t)pd->nboff < nbits);
+	} else {
+		pd->nboff -= nbits;
+		pd->moved -= nbits;
+	}
+}
+
+/*
+ * Extract a small number of bits (<= 31) from the specified PER data pointer.
+ */
+int32_t
+asn_get_few_bits(asn_bit_data_t *pd, int nbits) {
+	size_t off;	/* Next after last bit offset */
+	ssize_t nleft;	/* Number of bits left in this stream */
+	uint32_t accum;
+	const uint8_t *buf;
+
+	if(nbits < 0)
+		return -1;
+
+	nleft = pd->nbits - pd->nboff;
+	if(nbits > nleft) {
+		int32_t tailv, vhead;
+		if(!pd->refill || nbits > 31) return -1;
+		/* Accumulate unused bytes before refill */
+		ASN_DEBUG("Obtain the rest %d bits (want %d)",
+			(int)nleft, (int)nbits);
+		tailv = asn_get_few_bits(pd, nleft);
+		if(tailv < 0) return -1;
+		/* Refill (replace pd contents with new data) */
+		if(pd->refill(pd))
+			return -1;
+		nbits -= nleft;
+		vhead = asn_get_few_bits(pd, nbits);
+		/* Combine the rest of previous pd with the head of new one */
+		tailv = (tailv << nbits) | vhead;  /* Could == -1 */
+		return tailv;
+	}
+
+	/*
+	 * Normalize position indicator.
+	 */
+	if(pd->nboff >= 8) {
+		pd->buffer += (pd->nboff >> 3);
+		pd->nbits  -= (pd->nboff & ~0x07);
+		pd->nboff  &= 0x07;
+	}
+	pd->moved += nbits;
+	pd->nboff += nbits;
+	off = pd->nboff;
+	buf = pd->buffer;
+
+	/*
+	 * Extract specified number of bits.
+	 */
+	if(off <= 8)
+		accum = nbits ? (buf[0]) >> (8 - off) : 0;
+	else if(off <= 16)
+		accum = ((buf[0] << 8) + buf[1]) >> (16 - off);
+	else if(off <= 24)
+		accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off);
+	else if(off <= 31)
+		accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16)
+			+ (buf[2] << 8) + (buf[3])) >> (32 - off);
+	else if(nbits <= 31) {
+		asn_bit_data_t tpd = *pd;
+		/* Here are we with our 31-bits limit plus 1..7 bits offset. */
+		asn_get_undo(&tpd, nbits);
+		/* The number of available bits in the stream allow
+		 * for the following operations to take place without
+		 * invoking the ->refill() function */
+		accum  = asn_get_few_bits(&tpd, nbits - 24) << 24;
+		accum |= asn_get_few_bits(&tpd, 24);
+	} else {
+		asn_get_undo(pd, nbits);
+		return -1;
+	}
+
+	accum &= (((uint32_t)1 << nbits) - 1);
+
+	ASN_DEBUG("  [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]",
+		(int)nbits, (int)nleft,
+		(int)pd->moved,
+		(((long)pd->buffer) & 0xf),
+		(int)pd->nboff, (int)pd->nbits,
+		((pd->buffer != NULL)?pd->buffer[0]:0),
+		(int)(pd->nbits - pd->nboff),
+		(int)accum);
+
+	return accum;
+}
+
+/*
+ * Extract a large number of bits from the specified PER data pointer.
+ */
+int
+asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) {
+	int32_t value;
+
+	if(alright && (nbits & 7)) {
+		/* Perform right alignment of a first few bits */
+		value = asn_get_few_bits(pd, nbits & 0x07);
+		if(value < 0) return -1;
+		*dst++ = value;	/* value is already right-aligned */
+		nbits &= ~7;
+	}
+
+	while(nbits) {
+		if(nbits >= 24) {
+			value = asn_get_few_bits(pd, 24);
+			if(value < 0) return -1;
+			*(dst++) = value >> 16;
+			*(dst++) = value >> 8;
+			*(dst++) = value;
+			nbits -= 24;
+		} else {
+			value = asn_get_few_bits(pd, nbits);
+			if(value < 0) return -1;
+			if(nbits & 7) {	/* implies left alignment */
+				value <<= 8 - (nbits & 7),
+				nbits += 8 - (nbits & 7);
+				if(nbits > 24)
+					*dst++ = value >> 24;
+			}
+			if(nbits > 16)
+				*dst++ = value >> 16;
+			if(nbits > 8)
+				*dst++ = value >> 8;
+			*dst++ = value;
+			break;
+		}
+	}
+
+	return 0;
+}
+
+/*
+ * Put a small number of bits (<= 31).
+ */
+int
+asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) {
+	size_t off;	/* Next after last bit offset */
+	size_t omsk;	/* Existing last byte meaningful bits mask */
+	uint8_t *buf;
+
+	if(obits <= 0 || obits >= 32) return obits ? -1 : 0;
+
+	ASN_DEBUG("[PER put %d bits %x to %p+%d bits]",
+			obits, (int)bits, (void *)po->buffer, (int)po->nboff);
+
+	/*
+	 * Normalize position indicator.
+	 */
+	if(po->nboff >= 8) {
+		po->buffer += (po->nboff >> 3);
+		po->nbits  -= (po->nboff & ~0x07);
+		po->nboff  &= 0x07;
+	}
+
+	/*
+	 * Flush whole-bytes output, if necessary.
+	 */
+	if(po->nboff + obits > po->nbits) {
+		size_t complete_bytes;
+		if(!po->buffer) po->buffer = po->tmpspace;
+		complete_bytes = (po->buffer - po->tmpspace);
+		ASN_DEBUG("[PER output %ld complete + %ld]",
+			(long)complete_bytes, (long)po->flushed_bytes);
+		if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0)
+			return -1;
+		if(po->nboff)
+			po->tmpspace[0] = po->buffer[0];
+		po->buffer = po->tmpspace;
+		po->nbits = 8 * sizeof(po->tmpspace);
+		po->flushed_bytes += complete_bytes;
+	}
+
+	/*
+	 * Now, due to sizeof(tmpspace), we are guaranteed large enough space.
+	 */
+	buf = po->buffer;
+	omsk = ~((1 << (8 - po->nboff)) - 1);
+	off = (po->nboff + obits);
+
+	/* Clear data of debris before meaningful bits */
+	bits &= (((uint32_t)1 << obits) - 1);
+
+	ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits,
+		(int)bits, (int)bits,
+		(int)po->nboff, (int)off,
+		buf[0], (int)(omsk&0xff),
+		(int)(buf[0] & omsk));
+
+	if(off <= 8)	/* Completely within 1 byte */
+		po->nboff = off,
+		bits <<= (8 - off),
+		buf[0] = (buf[0] & omsk) | bits;
+	else if(off <= 16)
+		po->nboff = off,
+		bits <<= (16 - off),
+		buf[0] = (buf[0] & omsk) | (bits >> 8),
+		buf[1] = bits;
+	else if(off <= 24)
+		po->nboff = off,
+		bits <<= (24 - off),
+		buf[0] = (buf[0] & omsk) | (bits >> 16),
+		buf[1] = bits >> 8,
+		buf[2] = bits;
+	else if(off <= 31)
+		po->nboff = off,
+		bits <<= (32 - off),
+		buf[0] = (buf[0] & omsk) | (bits >> 24),
+		buf[1] = bits >> 16,
+		buf[2] = bits >> 8,
+		buf[3] = bits;
+	else {
+		if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1;
+		if(asn_put_few_bits(po, bits, obits - 24)) return -1;
+	}
+
+	ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]",
+		(int)bits, (int)bits, buf[0],
+		(long)(po->buffer - po->tmpspace));
+
+	return 0;
+}
+
+
+/*
+ * Output a large number of bits.
+ */
+int
+asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) {
+
+	while(nbits) {
+		uint32_t value;
+
+		if(nbits >= 24) {
+			value = (src[0] << 16) | (src[1] << 8) | src[2];
+			src += 3;
+			nbits -= 24;
+			if(asn_put_few_bits(po, value, 24))
+				return -1;
+		} else {
+			value = src[0];
+			if(nbits > 8)
+				value = (value << 8) | src[1];
+			if(nbits > 16)
+				value = (value << 8) | src[2];
+			if(nbits & 0x07)
+				value >>= (8 - (nbits & 0x07));
+			if(asn_put_few_bits(po, value, nbits))
+				return -1;
+			break;
+		}
+	}
+
+	return 0;
+}
+
+
+int
+asn_put_aligned_flush(asn_bit_outp_t *po) {
+    uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07)));
+    size_t complete_bytes =
+        (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3);
+
+    if(unused_bits) {
+        po->buffer[po->nboff >> 3] &= ~0u << unused_bits;
+    }
+
+    if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) {
+        return -1;
+    } else {
+        po->buffer = po->tmpspace;
+        po->nboff = 0;
+        po->nbits = 8 * sizeof(po->tmpspace);
+        po->flushed_bytes += complete_bytes;
+        return 0;
+    }
+}
+
diff --git a/asn1c_defs/asn_bit_data.h b/asn1c_defs/asn_bit_data.h
new file mode 100644
index 0000000..59de7af
--- /dev/null
+++ b/asn1c_defs/asn_bit_data.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_BIT_DATA
+#define	ASN_BIT_DATA
+
+#include <asn_system.h>		/* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * This structure describes a position inside an incoming PER bit stream.
+ */
+typedef struct asn_bit_data_s {
+  const uint8_t *buffer;  /* Pointer to the octet stream */
+         size_t  nboff;   /* Bit offset to the meaningful bit */
+         size_t  nbits;   /* Number of bits in the stream */
+         size_t  moved;   /* Number of bits moved through this bit stream */
+  int (*refill)(struct asn_bit_data_s *);
+  void *refill_key;
+} asn_bit_data_t;
+
+/*
+ * Create a contiguous non-refillable bit data structure.
+ * Can be freed by FREEMEM().
+ */
+asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits);
+
+/*
+ * Extract a small number of bits (<= 31) from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits);
+
+/* Undo the immediately preceeding "get_few_bits" operation */
+void asn_get_undo(asn_bit_data_t *, int get_nbits);
+
+/*
+ * Extract a large number of bits from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align,
+			int get_nbits);
+
+/* Non-thread-safe debugging function, don't use it */
+char *asn_bit_data_string(asn_bit_data_t *);
+
+/*
+ * This structure supports forming bit output.
+ */
+typedef struct asn_bit_outp_s {
+	uint8_t *buffer;	/* Pointer into the (tmpspace) */
+	size_t nboff;		/* Bit offset to the meaningful bit */
+	size_t nbits;		/* Number of bits left in (tmpspace) */
+	uint8_t tmpspace[32];	/* Preliminary storage to hold data */
+	int (*output)(const void *data, size_t size, void *op_key);
+	void *op_key;		/* Key for (output) data callback */
+	size_t flushed_bytes;	/* Bytes already flushed through (output) */
+} asn_bit_outp_t;
+
+/* Output a small number of bits (<= 31) */
+int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits);
+
+/* Output a large number of bits */
+int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits);
+
+/*
+ * Flush whole bytes (0 or more) through (outper) member.
+ * The least significant bits which are not used are guaranteed to be set to 0.
+ * Returns -1 if callback returns -1. Otherwise, 0.
+ */
+int asn_put_aligned_flush(asn_bit_outp_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_BIT_DATA */
diff --git a/asn1c_defs/asn_codecs.h b/asn1c_defs/asn_codecs.h
new file mode 100644
index 0000000..e75c270
--- /dev/null
+++ b/asn1c_defs/asn_codecs.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_CODECS_H
+#define	ASN_CODECS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/*
+ * This structure defines a set of parameters that may be passed
+ * to every ASN.1 encoder or decoder function.
+ * WARNING: if max_stack_size member is set, and you are calling the
+ *   function pointers of the asn_TYPE_descriptor_t directly,
+ *   this structure must be ALLOCATED ON THE STACK!
+ *   If you can't always satisfy this requirement, use ber_decode(),
+ *   xer_decode() and uper_decode() functions instead.
+ */
+typedef struct asn_codec_ctx_s {
+	/*
+	 * Limit the decoder routines to use no (much) more stack than a given
+	 * number of bytes. Most of decoders are stack-based, and this
+	 * would protect against stack overflows if the number of nested
+	 * encodings is high.
+	 * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based,
+	 * and are safe from this kind of overflow.
+	 * A value from getrlimit(RLIMIT_STACK) may be used to initialize
+	 * this variable. Be careful in multithreaded environments, as the
+	 * stack size is rather limited.
+	 */
+	size_t  max_stack_size; /* 0 disables stack bounds checking */
+} asn_codec_ctx_t;
+
+/*
+ * Type of the return value of the encoding functions (der_encode, xer_encode).
+ */
+typedef struct asn_enc_rval_s {
+	/*
+	 * Number of bytes encoded.
+	 * -1 indicates failure to encode the structure.
+	 * In this case, the members below this one are meaningful.
+	 */
+	ssize_t encoded;
+
+	/*
+	 * Members meaningful when (encoded == -1), for post mortem analysis.
+	 */
+
+	/* Type which cannot be encoded */
+	const struct asn_TYPE_descriptor_s *failed_type;
+
+	/* Pointer to the structure of that type */
+	const void *structure_ptr;
+} asn_enc_rval_t;
+#define	ASN__ENCODE_FAILED do {					\
+	asn_enc_rval_t tmp_error;				\
+	tmp_error.encoded = -1;					\
+	tmp_error.failed_type = td;				\
+	tmp_error.structure_ptr = sptr;				\
+	ASN_DEBUG("Failed to encode element %s", td ? td->name : "");	\
+	return tmp_error;					\
+} while(0)
+#define	ASN__ENCODED_OK(rval) do {				\
+	rval.structure_ptr = 0;					\
+	rval.failed_type = 0;					\
+	return rval;						\
+} while(0)
+
+/*
+ * Type of the return value of the decoding functions (ber_decode, xer_decode)
+ * 
+ * Please note that the number of consumed bytes is ALWAYS meaningful,
+ * even if code==RC_FAIL. This is to indicate the number of successfully
+ * decoded bytes, hence providing a possibility to fail with more diagnostics
+ * (i.e., print the offending remainder of the buffer).
+ */
+enum asn_dec_rval_code_e {
+	RC_OK,		/* Decoded successfully */
+	RC_WMORE,	/* More data expected, call again */
+	RC_FAIL		/* Failure to decode data */
+};
+typedef struct asn_dec_rval_s {
+	enum asn_dec_rval_code_e code;	/* Result code */
+	size_t consumed;		/* Number of bytes consumed */
+} asn_dec_rval_t;
+#define	ASN__DECODE_FAILED do {					\
+	asn_dec_rval_t tmp_error;				\
+	tmp_error.code = RC_FAIL;				\
+	tmp_error.consumed = 0;					\
+	ASN_DEBUG("Failed to decode element %s", td ? td->name : "");	\
+	return tmp_error;					\
+} while(0)
+#define	ASN__DECODE_STARVED do {				\
+	asn_dec_rval_t tmp_error;				\
+	tmp_error.code = RC_WMORE;				\
+	tmp_error.consumed = 0;					\
+	return tmp_error;					\
+} while(0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_CODECS_H */
diff --git a/asn1c_defs/asn_codecs_prim.c b/asn1c_defs/asn_codecs_prim.c
new file mode 100644
index 0000000..fc24247
--- /dev/null
+++ b/asn1c_defs/asn_codecs_prim.c
@@ -0,0 +1,317 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <errno.h>
+
+/*
+ * Decode an always-primitive type.
+ */
+asn_dec_rval_t
+ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buf_ptr, size_t size, int tag_mode) {
+    ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr;
+	asn_dec_rval_t rval;
+	ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */
+
+	/*
+	 * If the structure is not there, allocate it.
+	 */
+	if(st == NULL) {
+		st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st));
+		if(st == NULL) ASN__DECODE_FAILED;
+		*sptr = (void *)st;
+	}
+
+	ASN_DEBUG("Decoding %s as plain primitive (tm=%d)",
+		td->name, tag_mode);
+
+	/*
+	 * Check tags and extract value length.
+	 */
+	rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+			tag_mode, 0, &length, 0);
+	if(rval.code != RC_OK)
+		return rval;
+
+	ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
+
+	/*
+	 * Make sure we have this length.
+	 */
+	buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+	size -= rval.consumed;
+	if(length > (ber_tlv_len_t)size) {
+		rval.code = RC_WMORE;
+		rval.consumed = 0;
+		return rval;
+	}
+
+	st->size = (int)length;
+	/* The following better be optimized away. */
+	if(sizeof(st->size) != sizeof(length)
+			&& (ber_tlv_len_t)st->size != length) {
+		st->size = 0;
+		ASN__DECODE_FAILED;
+	}
+
+	st->buf = (uint8_t *)MALLOC(length + 1);
+	if(!st->buf) {
+		st->size = 0;
+		ASN__DECODE_FAILED;
+	}
+
+	memcpy(st->buf, buf_ptr, length);
+	st->buf[length] = '\0';		/* Just in case */
+
+	rval.code = RC_OK;
+	rval.consumed += length;
+
+	ASN_DEBUG("Took %ld/%ld bytes to encode %s",
+		(long)rval.consumed,
+		(long)length, td->name);
+
+	return rval;
+}
+
+/*
+ * Encode an always-primitive type using DER.
+ */
+asn_enc_rval_t
+der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr,
+                     int tag_mode, ber_tlv_tag_t tag,
+                     asn_app_consume_bytes_f *cb, void *app_key) {
+	asn_enc_rval_t erval = {0,0,0};
+	const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr;
+
+	ASN_DEBUG("%s %s as a primitive type (tm=%d)",
+		cb?"Encoding":"Estimating", td->name, tag_mode);
+
+	erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag,
+		cb, app_key);
+	ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded);
+	if(erval.encoded == -1) {
+		erval.failed_type = td;
+		erval.structure_ptr = sptr;
+		return erval;
+	}
+
+	if(cb && st->buf) {
+		if(cb(st->buf, st->size, app_key) < 0) {
+			erval.encoded = -1;
+			erval.failed_type = td;
+			erval.structure_ptr = sptr;
+			return erval;
+		}
+	} else {
+		assert(st->buf || st->size == 0);
+	}
+
+	erval.encoded += st->size;
+	ASN__ENCODED_OK(erval);
+}
+
+void
+ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr,
+                         enum asn_struct_free_method method) {
+    ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr;
+
+	if(!td || !sptr)
+		return;
+
+	ASN_DEBUG("Freeing %s as a primitive type", td->name);
+
+	if(st->buf)
+		FREEMEM(st->buf);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t));
+        break;
+    }
+}
+
+
+/*
+ * Local internal type passed around as an argument.
+ */
+struct xdp_arg_s {
+    const asn_TYPE_descriptor_t *type_descriptor;
+    void *struct_key;
+	xer_primitive_body_decoder_f *prim_body_decoder;
+	int decoded_something;
+	int want_more;
+};
+
+/*
+ * Since some kinds of primitive values can be encoded using value-specific
+ * tags (<MINUS-INFINITY>, <enum-element>, etc), the primitive decoder must
+ * be supplied with such tags to parse them as needed.
+ */
+static int
+xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) {
+	struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
+	enum xer_pbd_rval bret;
+
+	/*
+	 * The chunk_buf is guaranteed to start at '<'.
+	 */
+	assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c);
+
+	/*
+	 * Decoding was performed once already. Prohibit doing it again.
+	 */
+	if(arg->decoded_something)
+		return -1;
+
+	bret = arg->prim_body_decoder(arg->type_descriptor,
+		arg->struct_key, chunk_buf, chunk_size);
+	switch(bret) {
+	case XPBD_SYSTEM_FAILURE:
+	case XPBD_DECODER_LIMIT:
+	case XPBD_BROKEN_ENCODING:
+		break;
+	case XPBD_BODY_CONSUMED:
+		/* Tag decoded successfully */
+		arg->decoded_something = 1;
+		/* Fall through */
+	case XPBD_NOT_BODY_IGNORE:	/* Safe to proceed further */
+		return 0;
+	}
+
+	return -1;
+}
+
+static ssize_t
+xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) {
+	struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
+	enum xer_pbd_rval bret;
+	size_t lead_wsp_size;
+
+	if(arg->decoded_something) {
+		if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) {
+			/*
+			 * Example:
+			 * "<INTEGER>123<!--/--> </INTEGER>"
+			 *                      ^- chunk_buf position.
+			 */
+			return chunk_size;
+		}
+		/*
+		 * Decoding was done once already. Prohibit doing it again.
+		 */
+		return -1;
+	}
+
+	if(!have_more) {
+		/*
+		 * If we've received something like "1", we can't really
+		 * tell whether it is really `1` or `123`, until we know
+		 * that there is no more data coming.
+		 * The have_more argument will be set to 1 once something
+		 * like this is available to the caller of this callback:
+		 * "1<tag_start..."
+		 */
+		arg->want_more = 1;
+		return -1;
+	}
+
+	lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size);
+	chunk_buf = (const char *)chunk_buf + lead_wsp_size;
+	chunk_size -= lead_wsp_size;
+
+	bret = arg->prim_body_decoder(arg->type_descriptor,
+		arg->struct_key, chunk_buf, chunk_size);
+	switch(bret) {
+	case XPBD_SYSTEM_FAILURE:
+	case XPBD_DECODER_LIMIT:
+	case XPBD_BROKEN_ENCODING:
+		break;
+	case XPBD_BODY_CONSUMED:
+		/* Tag decoded successfully */
+		arg->decoded_something = 1;
+		/* Fall through */
+	case XPBD_NOT_BODY_IGNORE:	/* Safe to proceed further */
+		return lead_wsp_size + chunk_size;
+	}
+
+	return -1;
+}
+
+
+asn_dec_rval_t
+xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     size_t struct_size, const char *opt_mname,
+                     const void *buf_ptr, size_t size,
+                     xer_primitive_body_decoder_f *prim_body_decoder) {
+    const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+	asn_struct_ctx_t s_ctx;
+	struct xdp_arg_s s_arg;
+	asn_dec_rval_t rc;
+
+	/*
+	 * Create the structure if does not exist.
+	 */
+	if(!*sptr) {
+		*sptr = CALLOC(1, struct_size);
+		if(!*sptr) ASN__DECODE_FAILED;
+	}
+
+	memset(&s_ctx, 0, sizeof(s_ctx));
+	s_arg.type_descriptor = td;
+	s_arg.struct_key = *sptr;
+	s_arg.prim_body_decoder = prim_body_decoder;
+	s_arg.decoded_something = 0;
+	s_arg.want_more = 0;
+
+	rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg,
+		xml_tag, buf_ptr, size,
+		xer_decode__unexpected_tag, xer_decode__primitive_body);
+	switch(rc.code) {
+	case RC_OK:
+		if(!s_arg.decoded_something) {
+			char ch;
+			ASN_DEBUG("Primitive body is not recognized, "
+				"supplying empty one");
+			/*
+			 * Decoding opportunity has come and gone.
+			 * Where's the result?
+			 * Try to feed with empty body, see if it eats it.
+			 */
+			if(prim_body_decoder(s_arg.type_descriptor,
+				s_arg.struct_key, &ch, 0)
+					!= XPBD_BODY_CONSUMED) {
+				/*
+				 * This decoder does not like empty stuff.
+				 */
+				ASN__DECODE_FAILED;
+			}
+		}
+		break;
+	case RC_WMORE:
+		/*
+		 * Redo the whole thing later.
+		 * We don't have a context to save intermediate parsing state.
+		 */
+		rc.consumed = 0;
+		break;
+	case RC_FAIL:
+		rc.consumed = 0;
+		if(s_arg.want_more)
+			rc.code = RC_WMORE;
+		else
+			ASN__DECODE_FAILED;
+		break;
+	}
+	return rc;
+}
+
diff --git a/asn1c_defs/asn_codecs_prim.h b/asn1c_defs/asn_codecs_prim.h
new file mode 100644
index 0000000..fbc5576
--- /dev/null
+++ b/asn1c_defs/asn_codecs_prim.h
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_CODECS_PRIM_H
+#define	ASN_CODECS_PRIM_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ASN__PRIMITIVE_TYPE_s {
+    uint8_t *buf;   /* Buffer with consecutive primitive encoding bytes */
+    size_t size;    /* Size of the buffer */
+} ASN__PRIMITIVE_TYPE_t;	/* Do not use this type directly! */
+
+asn_struct_free_f ASN__PRIMITIVE_TYPE_free;
+ber_type_decoder_f ber_decode_primitive;
+der_type_encoder_f der_encode_primitive;
+
+/*
+ * A callback specification for the xer_decode_primitive() function below.
+ */
+enum xer_pbd_rval {
+    XPBD_SYSTEM_FAILURE,  /* System failure (memory shortage, etc) */
+    XPBD_DECODER_LIMIT,   /* Hit some decoder limitation or deficiency */
+    XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */
+    XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */
+    XPBD_BODY_CONSUMED    /* Body is recognized and consumed */
+};
+typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)(
+    const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf,
+    size_t chunk_size);
+
+/*
+ * Specific function to decode simple primitive types.
+ * Also see xer_decode_general() in xer_decoder.h
+ */
+asn_dec_rval_t xer_decode_primitive(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+    size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size,
+    xer_primitive_body_decoder_f *prim_body_decoder);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_CODECS_PRIM_H */
diff --git a/asn1c_defs/asn_internal.c b/asn1c_defs/asn_internal.c
new file mode 100644
index 0000000..1aff95f
--- /dev/null
+++ b/asn1c_defs/asn_internal.c
@@ -0,0 +1,48 @@
+#include <asn_internal.h>
+
+ssize_t
+asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key,
+                        const char *fmt, ...) {
+    char scratch[64];
+    char *buf = scratch;
+    size_t buf_size = sizeof(scratch);
+    int wrote;
+    int cb_ret;
+
+    do {
+        va_list args;
+        va_start(args, fmt);
+
+        wrote = vsnprintf(buf, buf_size, fmt, args);
+        if(wrote < (ssize_t)buf_size) {
+            if(wrote < 0) {
+                if(buf != scratch) FREEMEM(buf);
+		va_end(args);
+                return -1;
+            }
+            break;
+        }
+
+        buf_size <<= 1;
+        if(buf == scratch) {
+            buf = MALLOC(buf_size);
+            if(!buf) return -1;
+        } else {
+            void *p = REALLOC(buf, buf_size);
+            if(!p) {
+                FREEMEM(buf);
+                return -1;
+            }
+            buf = p;
+        }
+    } while(1);
+
+    cb_ret = cb(buf, wrote, key);
+    if(buf != scratch) FREEMEM(buf);
+    if(cb_ret < 0) {
+        return -1;
+    }
+
+    return wrote;
+}
+
diff --git a/asn1c_defs/asn_internal.h b/asn1c_defs/asn_internal.h
new file mode 100644
index 0000000..c4105ad
--- /dev/null
+++ b/asn1c_defs/asn_internal.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Declarations internally useful for the ASN.1 support code.
+ */
+#ifndef	ASN_INTERNAL_H
+#define	ASN_INTERNAL_H
+#define __EXTENSIONS__          /* for Sun */
+
+#include "asn_application.h"	/* Application-visible API */
+
+#ifndef	__NO_ASSERT_H__		/* Include assert.h only for internal use. */
+#include <assert.h>		/* for assert() macro */
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* Environment version might be used to avoid running with the old library */
+#define	ASN1C_ENVIRONMENT_VERSION	923	/* Compile-time version */
+int get_asn1c_environment_version(void);	/* Run-time version */
+
+#define	CALLOC(nmemb, size)	calloc(nmemb, size)
+#define	MALLOC(size)		malloc(size)
+#define	REALLOC(oldptr, size)	realloc(oldptr, size)
+#define	FREEMEM(ptr)		free(ptr)
+
+#define	asn_debug_indent	0
+#define ASN_DEBUG_INDENT_ADD(i) do{}while(0)
+
+#ifdef  EMIT_ASN_DEBUG
+#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG"
+#define ASN_EMIT_DEBUG  EMIT_ASN_DEBUG
+#endif
+
+/*
+ * A macro for debugging the ASN.1 internals.
+ * You may enable or override it.
+ */
+#ifndef	ASN_DEBUG	/* If debugging code is not defined elsewhere... */
+#if	ASN_EMIT_DEBUG == 1	/* And it was asked to emit this code... */
+#if !defined(BELL_LABS) /* Bell Labs */
+  //#if __STDC_VERSION__ >= 199901L
+#ifdef	ASN_THREAD_SAFE
+/* Thread safety requires sacrifice in output indentation:
+ * Retain empty definition of ASN_DEBUG_INDENT_ADD. */
+#else	/* !ASN_THREAD_SAFE */
+#undef  ASN_DEBUG_INDENT_ADD
+#undef  asn_debug_indent
+int asn_debug_indent;
+#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0)
+#endif	/* ASN_THREAD_SAFE */
+#if defined(BELL_LABS) /* Bell Labs version */
+extern int logAsn1c(const char *filename, int linenumber, const char *format, ...);  
+#define	ASN_DEBUG(fmt, args...)	do {		        \
+    (void) logAsn1c(__FILE__, __LINE__, fmt, ##args);	\
+  } while(0)
+#else  
+#define	ASN_DEBUG(fmt, args...)	do {			\
+		int adi = asn_debug_indent;		\
+		while(adi--) fprintf(stderr, " ");	\
+		fprintf(stderr, fmt, ##args);		\
+		fprintf(stderr, " (%s:%d)\n",		\
+			__FILE__, __LINE__);		\
+	} while(0)
+#endif /* BELL_LABS */  
+#else	/* !C99 */
+void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...);
+#define	ASN_DEBUG	ASN_DEBUG_f
+#endif	/* C99 */
+#else	/* ASN_EMIT_DEBUG != 1 */
+#if __STDC_VERSION__ >= 199901L
+#define ASN_DEBUG(...) do{}while(0)
+#else   /* not C99 */
+static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; }
+#endif  /* C99 or better */
+#endif	/* ASN_EMIT_DEBUG */
+#endif	/* ASN_DEBUG */
+
+/*
+ * Print to a callback.
+ * The callback is expected to return negative values on error.
+ * 0 and positive values are treated as success.
+ * RETURN VALUES:
+ *  -1: Failed to format or invoke the callback.
+ *  >0: Size of the data that got delivered to the callback.
+ */
+ssize_t CC_PRINTFLIKE(3, 4)
+asn__format_to_callback(
+    int (*callback)(const void *, size_t, void *key), void *key,
+    const char *fmt, ...);
+
+/*
+ * Invoke the application-supplied callback and fail, if something is wrong.
+ */
+#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0)
+#define ASN__E_CALLBACK(size, foo) \
+    do {                           \
+        if(foo) goto cb_failed;    \
+        er.encoded += (size);      \
+    } while(0)
+#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size))
+#define ASN__CALLBACK2(buf1, size1, buf2, size2) \
+    ASN__E_CALLBACK((size1) + (size2),           \
+                    ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2))
+#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3)          \
+    ASN__E_CALLBACK((size1) + (size2) + (size3),                       \
+                    ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \
+                        || ASN__E_cbc(buf3, size3))
+
+#define ASN__TEXT_INDENT(nl, level)                                          \
+    do {                                                                     \
+        int tmp_level = (level);                                             \
+        int tmp_nl = ((nl) != 0);                                            \
+        int tmp_i;                                                           \
+        if(tmp_nl) ASN__CALLBACK("\n", 1);                                   \
+        if(tmp_level < 0) tmp_level = 0;                                     \
+        for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK("    ", 4); \
+    } while(0)
+
+#define	_i_INDENT(nl)	do {                        \
+        int tmp_i;                                  \
+        if((nl) && cb("\n", 1, app_key) < 0)        \
+            return -1;                              \
+        for(tmp_i = 0; tmp_i < ilevel; tmp_i++)     \
+            if(cb("    ", 4, app_key) < 0)          \
+                return -1;                          \
+    } while(0)
+
+/*
+ * Check stack against overflow, if limit is set.
+ */
+#define	ASN__DEFAULT_STACK_MAX	(30000)
+static int CC_NOTUSED
+ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) {
+	if(ctx && ctx->max_stack_size) {
+
+		/* ctx MUST be allocated on the stack */
+		ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx);
+		if(usedstack > 0) usedstack = -usedstack; /* grows up! */
+
+		/* double negative required to avoid int wrap-around */
+		if(usedstack < -(ptrdiff_t)ctx->max_stack_size) {
+			ASN_DEBUG("Stack limit %ld reached",
+				(long)ctx->max_stack_size);
+			return -1;
+		}
+	}
+	return 0;
+}
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* ASN_INTERNAL_H */
diff --git a/asn1c_defs/asn_ioc.h b/asn1c_defs/asn_ioc.h
new file mode 100644
index 0000000..7de210e
--- /dev/null
+++ b/asn1c_defs/asn_ioc.h
@@ -0,0 +1,51 @@
+/*
+ * Run-time support for Information Object Classes.
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_IOC_H
+#define	ASN_IOC_H
+
+#include <asn_system.h>		/* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;
+struct asn_ioc_cell_s;
+
+/*
+ * X.681, #13
+ */
+typedef struct asn_ioc_set_s {
+    size_t rows_count;
+    size_t columns_count;
+    const struct asn_ioc_cell_s *rows;
+} asn_ioc_set_t;
+
+
+typedef struct asn_ioc_cell_s {
+    const char *field_name; /* Is equal to corresponding column_name */
+    enum {
+        aioc__undefined = 0,
+        aioc__value,
+        aioc__type,
+        aioc__open_type,
+    } cell_kind;
+    struct asn_TYPE_descriptor_s *type_descriptor;
+    const void *value_sptr;
+    struct {
+        size_t types_count;
+        struct {
+            unsigned choice_position;
+        } *types;
+    } open_type;
+} asn_ioc_cell_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN_IOC_H */
diff --git a/asn1c_defs/asn_random_fill.c b/asn1c_defs/asn_random_fill.c
new file mode 100644
index 0000000..819cf70
--- /dev/null
+++ b/asn1c_defs/asn_random_fill.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_random_fill.h>
+#include <constr_TYPE.h>
+
+int
+asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+                size_t length) {
+
+    if(td && td->op->random_fill) {
+        asn_random_fill_result_t res =
+            td->op->random_fill(td, struct_ptr, 0, length);
+        return (res.code == ARFILL_OK) ? 0 : -1;
+    } else {
+        return -1;
+    }
+}
+
+static uintmax_t
+asn__intmax_range(intmax_t lb, intmax_t ub) {
+    assert(lb <= ub);
+    if((ub < 0) == (lb < 0)) {
+        return ub - lb;
+    } else if(lb < 0) {
+        return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1));
+    } else {
+        assert(!"Unreachable");
+        return 0;
+    }
+}
+
+intmax_t
+asn_random_between(intmax_t lb, intmax_t rb) {
+    if(lb == rb) {
+        return lb;
+    } else {
+        const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1);
+        uintmax_t range = asn__intmax_range(lb, rb);
+        uintmax_t value = 0;
+        uintmax_t got_entropy = 0;
+
+        assert(RAND_MAX > 0xffffff);    /* Seen 7ffffffd! */
+        assert(range < intmax_max);
+
+        for(; got_entropy < range;) {
+            got_entropy = (got_entropy << 24) | 0xffffff;
+            value = (value << 24) | (random() % 0xffffff);
+        }
+
+        return lb + (intmax_t)(value % (range + 1));
+    }
+}
diff --git a/asn1c_defs/asn_random_fill.h b/asn1c_defs/asn_random_fill.h
new file mode 100644
index 0000000..47f9b8a
--- /dev/null
+++ b/asn1c_defs/asn_random_fill.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN_RANDOM_FILL
+#define	ASN_RANDOM_FILL
+
+/* Forward declarations */
+struct asn_TYPE_descriptor_s;
+struct asn_encoding_constraints_s;
+
+/*
+ * Initialize a structure with random data according to the type specification
+ * and optional member constraints.
+ * ARGUMENTS:
+ *  (max_length)        - See (approx_max_length_limit).
+ *  (memb_constraints)  - Member constraints, if exist.
+ *                        The type can be constrained differently according
+ *                        to PER and OER specifications, so we find a value
+ *                        at the intersection of these constraints.
+ * In case the return differs from ARFILL_OK, the (struct_ptr) contents
+ * and (current_length) value remain in their original state.
+ */
+typedef struct asn_random_fill_result_s {
+    enum {
+        ARFILL_FAILED = -1, /* System error (memory?) */
+        ARFILL_OK = 0,      /* Initialization succeeded */
+        ARFILL_SKIPPED = 1  /* Not done due to (length?) constraint */
+    } code;
+    size_t length; /* Approximate number of bytes created. */
+} asn_random_fill_result_t;
+typedef asn_random_fill_result_t(asn_random_fill_f)(
+    const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+    const struct asn_encoding_constraints_s *memb_constraints,
+    size_t max_length);
+
+/*
+ * Returns 0 if the structure was properly initialized, -1 otherwise.
+ * The (approx_max_length_limit) specifies the approximate limit of the
+ * resulting structure in units closely resembling bytes. The actual result
+ * might be several times larger or smaller than the length limit.
+ */
+int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+                    size_t approx_max_length_limit);
+
+/*
+ * Returns a random number between min and max.
+ */
+intmax_t asn_random_between(intmax_t min, intmax_t max);
+
+#endif	/* ASN_RANDOM_FILL */
diff --git a/asn1c_defs/asn_system.h b/asn1c_defs/asn_system.h
new file mode 100644
index 0000000..fa8cf11
--- /dev/null
+++ b/asn1c_defs/asn_system.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Miscellaneous system-dependent types.
+ */
+#ifndef	ASN_SYSTEM_H
+#define	ASN_SYSTEM_H
+
+#ifdef	HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE 1
+#endif
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE /* for snprintf() on some linux systems  */
+#endif
+
+#include <stdio.h>	/* For snprintf(3) */
+#include <stdlib.h>	/* For *alloc(3) */
+#include <string.h>	/* For memcpy(3) */
+#include <sys/types.h>	/* For size_t */
+#include <limits.h>	/* For LONG_MAX */
+#include <stdarg.h>	/* For va_start */
+#include <stddef.h>	/* for offsetof and ptrdiff_t */
+
+#ifdef	_WIN32
+
+#include <malloc.h>
+#define	 snprintf	_snprintf
+#define	 vsnprintf	_vsnprintf
+
+/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */
+#define sys_ntohl(l)	((((l) << 24)  & 0xff000000)	\
+			| (((l) << 8) & 0xff0000)	\
+			| (((l) >> 8)  & 0xff00)	\
+			| ((l >> 24) & 0xff))
+
+#ifdef _MSC_VER			/* MSVS.Net */
+#ifndef __cplusplus
+#define inline __inline
+#endif
+#ifndef	ASSUMESTDTYPES	/* Standard types have been defined elsewhere */
+#define	ssize_t		SSIZE_T
+#if _MSC_VER < 1600
+typedef	char		int8_t;
+typedef	short		int16_t;
+typedef	int		int32_t;
+typedef	unsigned char	uint8_t;
+typedef	unsigned short	uint16_t;
+typedef	unsigned int	uint32_t;
+#else /* _MSC_VER >= 1600 */
+#include <stdint.h>
+#endif /* _MSC_VER < 1600 */
+#endif	/* ASSUMESTDTYPES */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <float.h>
+#define isnan _isnan
+#define finite _finite
+#define copysign _copysign
+#define	ilogb	_logb
+#else	/* !_MSC_VER */
+#include <stdint.h>
+#endif	/* _MSC_VER */
+
+#else	/* !_WIN32 */
+
+#if defined(__vxworks)
+#include <types/vxTypes.h>
+#else	/* !defined(__vxworks) */
+
+#include <inttypes.h>	/* C99 specifies this file */
+#include <netinet/in.h> /* for ntohl() */
+#define	sys_ntohl(foo)	ntohl(foo)
+#endif	/* defined(__vxworks) */
+
+#endif	/* _WIN32 */
+
+#if	__GNUC__ >= 3 || defined(__clang__)
+#define CC_ATTRIBUTE(attr)    __attribute__((attr))
+#else
+#define CC_ATTRIBUTE(attr)
+#endif
+#define CC_PRINTFLIKE(fmt, var)     CC_ATTRIBUTE(format(printf, fmt, var))
+#define	CC_NOTUSED                  CC_ATTRIBUTE(unused)
+#ifndef CC_ATTR_NO_SANITIZE
+#define CC_ATTR_NO_SANITIZE(what)   CC_ATTRIBUTE(no_sanitize(what))
+#endif
+
+/* Figure out if thread safety is requested */
+#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT))
+#define	ASN_THREAD_SAFE
+#endif	/* Thread safety */
+
+#ifndef	offsetof	/* If not defined by <stddef.h> */
+#define	offsetof(s, m)	((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0))
+#endif	/* offsetof */
+
+#ifndef	MIN		/* Suitable for comparing primitive types (integers) */
+#if defined(__GNUC__)
+#define	MIN(a,b)	({ __typeof a _a = a; __typeof b _b = b;	\
+	((_a)<(_b)?(_a):(_b)); })
+#else	/* !__GNUC__ */
+#define	MIN(a,b)	((a)<(b)?(a):(b))	/* Unsafe variant */
+#endif /* __GNUC__ */
+#endif	/* MIN */
+
+#if __STDC_VERSION__ >= 199901L
+#ifndef SIZE_MAX
+#define SIZE_MAX   ((~((size_t)0)) >> 1)
+#endif
+
+#ifndef RSIZE_MAX   /* C11, Annex K */
+#define RSIZE_MAX   (SIZE_MAX >> 1)
+#endif
+#ifndef RSSIZE_MAX   /* Halve signed size even further than unsigned */
+#define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+#else   /* Old compiler */
+#undef  SIZE_MAX
+#undef  RSIZE_MAX
+#undef  RSSIZE_MAX
+#define SIZE_MAX   ((~((size_t)0)) >> 1)
+#define RSIZE_MAX   (SIZE_MAX >> 1)
+#define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+
+#if __STDC_VERSION__ >= 199901L
+#define ASN_PRI_SIZE "zu"
+#define ASN_PRI_SSIZE "zd"
+#define ASN_PRIuMAX PRIuMAX
+#define ASN_PRIdMAX PRIdMAX
+#else
+#define ASN_PRI_SIZE "lu"
+#define ASN_PRI_SSIZE "ld"
+#if LLONG_MAX > LONG_MAX
+#define ASN_PRIuMAX "llu"
+#define ASN_PRIdMAX "lld"
+#else
+#define ASN_PRIuMAX "lu"
+#define ASN_PRIdMAX "ld"
+#endif
+#endif
+
+#endif	/* ASN_SYSTEM_H */
diff --git a/asn1c_defs/ber_decoder.c b/asn1c_defs/ber_decoder.c
new file mode 100644
index 0000000..75d6016
--- /dev/null
+++ b/asn1c_defs/ber_decoder.c
@@ -0,0 +1,283 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {					\
+		size_t num = num_bytes;					\
+		ptr = ((const char *)ptr) + num;			\
+		size -= num;						\
+		consumed_myself += num;					\
+	} while(0)
+#undef	RETURN
+#define	RETURN(_code)	do {						\
+		asn_dec_rval_t rval;					\
+		rval.code = _code;					\
+		if(opt_ctx) opt_ctx->step = step; /* Save context */	\
+		if(_code == RC_OK || opt_ctx)				\
+			rval.consumed = consumed_myself;		\
+		else							\
+			rval.consumed = 0;	/* Context-free */	\
+		return rval;						\
+	} while(0)
+
+/*
+ * The BER decoder of any type.
+ */
+asn_dec_rval_t
+ber_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+           const void *ptr, size_t size) {
+    asn_codec_ctx_t s_codec_ctx;
+
+	/*
+	 * Stack checker requires that the codec context
+	 * must be allocated on the stack.
+	 */
+	if(opt_codec_ctx) {
+		if(opt_codec_ctx->max_stack_size) {
+			s_codec_ctx = *opt_codec_ctx;
+			opt_codec_ctx = &s_codec_ctx;
+		}
+	} else {
+		/* If context is not given, be security-conscious anyway */
+		memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+		s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+		opt_codec_ctx = &s_codec_ctx;
+	}
+
+	/*
+	 * Invoke type-specific decoder.
+	 */
+	return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor,
+		struct_ptr,	/* Pointer to the destination structure */
+		ptr, size,	/* Buffer and its size */
+		0		/* Default tag mode is 0 */
+		);
+}
+
+/*
+ * Check the set of <TL<TL<TL...>>> tags matches the definition.
+ */
+asn_dec_rval_t
+ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx,
+               const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx,
+               const void *ptr, size_t size, int tag_mode, int last_tag_form,
+               ber_tlv_len_t *last_length, int *opt_tlv_form) {
+    ssize_t consumed_myself = 0;
+	ssize_t tag_len;
+	ssize_t len_len;
+	ber_tlv_tag_t tlv_tag;
+	ber_tlv_len_t tlv_len;
+	ber_tlv_len_t limit_len = -1;
+	int expect_00_terminators = 0;
+	int tlv_constr = -1;	/* If CHOICE, opt_tlv_form is not given */
+	int step = opt_ctx ? opt_ctx->step : 0;	/* Where we left previously */
+	int tagno;
+
+	/*
+	 * Make sure we didn't exceed the maximum stack size.
+	 */
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		RETURN(RC_FAIL);
+
+	/*
+	 * So what does all this implicit skip stuff mean?
+	 * Imagine two types,
+	 * 	A ::= [5] IMPLICIT	T
+	 * 	B ::= [2] EXPLICIT	T
+	 * Where T is defined as
+	 *	T ::= [4] IMPLICIT SEQUENCE { ... }
+	 * 
+	 * Let's say, we are starting to decode type A, given the
+	 * following TLV stream: <5> <0>. What does this mean?
+	 * It means that the type A contains type T which is,
+	 * in turn, empty.
+	 * Remember though, that we are still in A. We cannot
+	 * just pass control to the type T decoder. Why? Because
+	 * the type T decoder expects <4> <0>, not <5> <0>.
+	 * So, we must make sure we are going to receive <5> while
+	 * still in A, then pass control to the T decoder, indicating
+	 * that the tag <4> was implicitly skipped. The decoder of T
+	 * hence will be prepared to treat <4> as valid tag, and decode
+	 * it appropriately.
+	 */
+
+	tagno = step	/* Continuing where left previously */
+		+ (tag_mode==1?-1:0)
+		;
+	ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)",
+		td->name, (long)size, tag_mode, step, tagno);
+	/* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */
+
+	if(tag_mode == 0 && tagno == (int)td->tags_count) {
+		/*
+		 * This must be the _untagged_ ANY type,
+		 * which outermost tag isn't known in advance.
+		 * Fetch the tag and length separately.
+		 */
+		tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
+		switch(tag_len) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+		tlv_constr = BER_TLV_CONSTRUCTED(ptr);
+		len_len = ber_fetch_length(tlv_constr,
+			(const char *)ptr + tag_len, size - tag_len, &tlv_len);
+		switch(len_len) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+		ASN_DEBUG("Advancing %ld in ANY case",
+			(long)(tag_len + len_len));
+		ADVANCE(tag_len + len_len);
+	} else {
+		assert(tagno < (int)td->tags_count);	/* At least one loop */
+	}
+	for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) {
+
+		/*
+		 * Fetch and process T from TLV.
+		 */
+		tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
+			ASN_DEBUG("Fetching tag from {%p,%ld}: "
+				"len %ld, step %d, tagno %d got %s",
+				ptr, (long)size,
+				(long)tag_len, step, tagno,
+				ber_tlv_tag_string(tlv_tag));
+		switch(tag_len) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+
+		tlv_constr = BER_TLV_CONSTRUCTED(ptr);
+
+		/*
+		 * If {I}, don't check anything.
+		 * If {I,B,C}, check B and C unless we're at I.
+		 */
+		if(tag_mode != 0 && step == 0) {
+			/*
+			 * We don't expect tag to match here.
+			 * It's just because we don't know how the tag
+			 * is supposed to look like.
+			 */
+		} else {
+		    assert(tagno >= 0);	/* Guaranteed by the code above */
+		    if(tlv_tag != td->tags[tagno]) {
+			/*
+			 * Unexpected tag. Too bad.
+			 */
+		    	ASN_DEBUG("Expected: %s, "
+				"expectation failed (tn=%d, tm=%d)",
+				ber_tlv_tag_string(td->tags[tagno]),
+				tagno, tag_mode
+			);
+			RETURN(RC_FAIL);
+		    }
+		}
+
+		/*
+		 * Attention: if there are more tags expected,
+		 * ensure that the current tag is presented
+		 * in constructed form (it contains other tags!).
+		 * If this one is the last one, check that the tag form
+		 * matches the one given in descriptor.
+		 */
+		if(tagno < ((int)td->tags_count - 1)) {
+			if(tlv_constr == 0) {
+				ASN_DEBUG("tlv_constr = %d, expfail",
+					tlv_constr);
+				RETURN(RC_FAIL);
+			}
+		} else {
+			if(last_tag_form != tlv_constr
+			&& last_tag_form != -1) {
+				ASN_DEBUG("last_tag_form %d != %d",
+					last_tag_form, tlv_constr);
+				RETURN(RC_FAIL);
+			}
+		}
+
+		/*
+		 * Fetch and process L from TLV.
+		 */
+		len_len = ber_fetch_length(tlv_constr,
+			(const char *)ptr + tag_len, size - tag_len, &tlv_len);
+		ASN_DEBUG("Fetching len = %ld", (long)len_len);
+		switch(len_len) {
+		case -1: RETURN(RC_FAIL);
+		case 0: RETURN(RC_WMORE);
+		}
+
+		/*
+		 * FIXME
+		 * As of today, the chain of tags
+		 * must either contain several indefinite length TLVs,
+		 * or several definite length ones.
+		 * No mixing is allowed.
+		 */
+		if(tlv_len == -1) {
+			/*
+			 * Indefinite length.
+			 */
+			if(limit_len == -1) {
+				expect_00_terminators++;
+			} else {
+				ASN_DEBUG("Unexpected indefinite length "
+					"in a chain of definite lengths");
+				RETURN(RC_FAIL);
+			}
+			ADVANCE(tag_len + len_len);
+			continue;
+		} else {
+			if(expect_00_terminators) {
+				ASN_DEBUG("Unexpected definite length "
+					"in a chain of indefinite lengths");
+				RETURN(RC_FAIL);
+			}
+		}
+
+		/*
+		 * Check that multiple TLVs specify ever decreasing length,
+		 * which is consistent.
+		 */
+		if(limit_len == -1) {
+			limit_len    = tlv_len + tag_len + len_len;
+			if(limit_len < 0) {
+				/* Too great tlv_len value? */
+				RETURN(RC_FAIL);
+			}
+		} else if(limit_len != tlv_len + tag_len + len_len) {
+			/*
+			 * Inner TLV specifies length which is inconsistent
+			 * with the outer TLV's length value.
+			 */
+			ASN_DEBUG("Outer TLV is %ld and inner is %ld",
+				(long)limit_len, (long)tlv_len);
+			RETURN(RC_FAIL);
+		}
+
+		ADVANCE(tag_len + len_len);
+
+		limit_len -= (tag_len + len_len);
+		if((ssize_t)size > limit_len) {
+			/*
+			 * Make sure that we won't consume more bytes
+			 * from the parent frame than the inferred limit.
+			 */
+			size = limit_len;
+		}
+	}
+
+	if(opt_tlv_form)
+		*opt_tlv_form = tlv_constr;
+	if(expect_00_terminators)
+		*last_length = -expect_00_terminators;
+	else
+		*last_length = tlv_len;
+
+	RETURN(RC_OK);
+}
diff --git a/asn1c_defs/ber_decoder.h b/asn1c_defs/ber_decoder.h
new file mode 100644
index 0000000..1ac2a5e
--- /dev/null
+++ b/asn1c_defs/ber_decoder.h
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_BER_DECODER_H_
+#define	_BER_DECODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+struct asn_codec_ctx_s;		/* Forward declaration */
+
+/*
+ * The BER decoder of any type.
+ * This function may be invoked directly from the application.
+ * Decodes BER, DER and CER data (DER and CER are different subsets of BER).
+ *
+ * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding
+ * which is compliant with ber_decode().
+ */
+asn_dec_rval_t ber_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of that buffer */
+);
+
+/*
+ * Type of generic function which decodes the byte stream into the structure.
+ */
+typedef asn_dec_rval_t(ber_type_decoder_f)(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr,
+    const void *buf_ptr, size_t size, int tag_mode);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Check that all tags correspond to the type definition (as given in head).
+ * On return, last_length would contain either a non-negative length of the
+ * value part of the last TLV, or the negative number of expected
+ * "end of content" sequences. The number may only be negative if the
+ * head->last_tag_form is non-zero.
+ */
+asn_dec_rval_t ber_check_tags(
+    const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    asn_struct_ctx_t *opt_ctx, /* saved decoding context */
+    const void *ptr, size_t size,
+    int tag_mode,      /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+    int last_tag_form, /* {-1,0:1}: any, primitive, constr */
+    ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _BER_DECODER_H_ */
diff --git a/asn1c_defs/ber_tlv_length.c b/asn1c_defs/ber_tlv_length.c
new file mode 100644
index 0000000..0a0deec
--- /dev/null
+++ b/asn1c_defs/ber_tlv_length.c
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ber_tlv_length.h>
+#include <ber_tlv_tag.h>
+
+ssize_t
+ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
+		ber_tlv_len_t *len_r) {
+	const uint8_t *buf = (const uint8_t *)bufptr;
+	unsigned oct;
+
+	if(size == 0)
+		return 0;	/* Want more */
+
+	oct = *(const uint8_t *)buf;
+	if((oct & 0x80) == 0) {
+		/*
+		 * Short definite length.
+		 */
+		*len_r = oct;	/* & 0x7F */
+		return 1;
+	} else {
+		ber_tlv_len_t len;
+		size_t skipped;
+
+		if(_is_constructed && oct == 0x80) {
+			*len_r = -1;	/* Indefinite length */
+			return 1;
+		}
+
+		if(oct == 0xff) {
+			/* Reserved in standard for future use. */
+			return -1;
+		}
+
+		oct &= 0x7F;	/* Leave only the 7 LS bits */
+		for(len = 0, buf++, skipped = 1;
+			oct && (++skipped <= size); buf++, oct--) {
+
+			/* Verify that we won't overflow. */
+			if(!(len >> ((8 * sizeof(len)) - (8+1)))) {
+				len = (len << 8) | *buf;
+			} else {
+				/* Too large length value. */
+				return -1;
+			}
+		}
+
+		if(oct == 0) {
+			if(len < 0 || len > RSSIZE_MAX) {
+				/* Length value out of sane range. */
+				return -1;
+			}
+
+			*len_r = len;
+			return skipped;
+		}
+
+		return 0;	/* Want more */
+	}
+
+}
+
+ssize_t
+ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx,
+		int _is_constructed, const void *ptr, size_t size) {
+	ber_tlv_len_t vlen;	/* Length of V in TLV */
+	ssize_t tl;		/* Length of L in TLV */
+	ssize_t ll;		/* Length of L in TLV */
+	size_t skip;
+
+	/*
+	 * Make sure we didn't exceed the maximum stack size.
+	 */
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		return -1;
+
+	/*
+	 * Determine the size of L in TLV.
+	 */
+	ll = ber_fetch_length(_is_constructed, ptr, size, &vlen);
+	if(ll <= 0) return ll;
+
+	/*
+	 * Definite length.
+	 */
+	if(vlen >= 0) {
+		skip = ll + vlen;
+		if(skip > size)
+			return 0;	/* Want more */
+		return skip;
+	}
+
+	/*
+	 * Indefinite length!
+	 */
+	ASN_DEBUG("Skipping indefinite length");
+	for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) {
+		ber_tlv_tag_t tag;
+
+		/* Fetch the tag */
+		tl = ber_fetch_tag(ptr, size, &tag);
+		if(tl <= 0) return tl;
+
+		ll = ber_skip_length(opt_codec_ctx,
+			BER_TLV_CONSTRUCTED(ptr),
+			((const char *)ptr) + tl, size - tl);
+		if(ll <= 0) return ll;
+
+		skip += tl + ll;
+
+		/*
+		 * This may be the end of the indefinite length structure,
+		 * two consecutive 0 octets.
+		 * Check if it is true.
+		 */
+		if(((const uint8_t *)ptr)[0] == 0
+		&& ((const uint8_t *)ptr)[1] == 0)
+			return skip;
+
+		ptr = ((const char *)ptr) + tl + ll;
+		size -= tl + ll;
+	}
+
+	/* UNREACHABLE */
+}
+
+size_t
+der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) {
+	size_t required_size;	/* Size of len encoding */
+	uint8_t *buf = (uint8_t *)bufp;
+	uint8_t *end;
+	int i;
+
+	if(len <= 127) {
+		/* Encoded in 1 octet */
+		if(size) *buf = (uint8_t)len;
+		return 1;
+	}
+
+	/*
+	 * Compute the size of the subsequent bytes.
+	 */
+	for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) {
+		if(len >> i)
+			required_size++;
+		else
+			break;
+	}
+
+	if(size <= required_size)
+		return required_size + 1;
+
+	*buf++ = (uint8_t)(0x80 | required_size);  /* Length of the encoding */
+
+	/*
+	 * Produce the len encoding, space permitting.
+	 */
+	end = buf + required_size;
+	for(i -= 8; buf < end; i -= 8, buf++)
+		*buf = (uint8_t)(len >> i);
+
+	return required_size + 1;
+}
+
diff --git a/asn1c_defs/ber_tlv_length.h b/asn1c_defs/ber_tlv_length.h
new file mode 100644
index 0000000..d1e4d48
--- /dev/null
+++ b/asn1c_defs/ber_tlv_length.h
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_BER_TLV_LENGTH_H_
+#define	_BER_TLV_LENGTH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ssize_t ber_tlv_len_t;
+
+/*
+ * This function tries to fetch the length of the BER TLV value and place it
+ * in *len_r.
+ * RETURN VALUES:
+ *	 0:	More data expected than bufptr contains.
+ *	-1:	Fatal error deciphering length.
+ *	>0:	Number of bytes used from bufptr.
+ * On return with >0, len_r is constrained as -1..MAX, where -1 mean
+ * that the value is of indefinite length.
+ */
+ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
+	ber_tlv_len_t *len_r);
+
+/*
+ * This function expects bufptr to be positioned over L in TLV.
+ * It returns number of bytes occupied by L and V together, suitable
+ * for skipping. The function properly handles indefinite length.
+ * RETURN VALUES:
+ * 	Standard {-1,0,>0} convention.
+ */
+ssize_t ber_skip_length(
+	const struct asn_codec_ctx_s *opt_codec_ctx,	/* optional context */
+	int _is_constructed, const void *bufptr, size_t size);
+
+/*
+ * This function serializes the length (L from TLV) in DER format.
+ * It always returns number of bytes necessary to represent the length,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _BER_TLV_LENGTH_H_ */
diff --git a/asn1c_defs/ber_tlv_tag.c b/asn1c_defs/ber_tlv_tag.c
new file mode 100644
index 0000000..4a7d732
--- /dev/null
+++ b/asn1c_defs/ber_tlv_tag.c
@@ -0,0 +1,144 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ber_tlv_tag.h>
+#include <errno.h>
+
+ssize_t
+ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) {
+	ber_tlv_tag_t val;
+	ber_tlv_tag_t tclass;
+	size_t skipped;
+
+	if(size == 0)
+		return 0;
+
+	val = *(const uint8_t *)ptr;
+	tclass = (val >> 6);
+	if((val &= 0x1F) != 0x1F) {
+		/*
+		 * Simple form: everything encoded in a single octet.
+		 * Tag Class is encoded using two least significant bits.
+		 */
+		*tag_r = (val << 2) | tclass;
+		return 1;
+	}
+
+	/*
+	 * Each octet contains 7 bits of useful information.
+	 * The MSB is 0 if it is the last octet of the tag.
+	 */
+	for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2;
+			skipped <= size;
+				ptr = ((const char *)ptr) + 1, skipped++) {
+		unsigned int oct = *(const uint8_t *)ptr;
+		if(oct & 0x80) {
+			val = (val << 7) | (oct & 0x7F);
+			/*
+			 * Make sure there are at least 9 bits spare
+			 * at the MS side of a value.
+			 */
+			if(val >> ((8 * sizeof(val)) - 9)) {
+				/*
+				 * We would not be able to accomodate
+				 * any more tag bits.
+				 */
+				return -1;
+			}
+		} else {
+			val = (val << 7) | oct;
+			*tag_r = (val << 2) | tclass;
+			return skipped;
+		}
+	}
+
+	return 0;	/* Want more */
+}
+
+
+ssize_t
+ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) {
+	char buf[sizeof("[APPLICATION ]") + 32];
+	ssize_t ret;
+
+	ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf));
+	if(ret >= (ssize_t)sizeof(buf) || ret < 2) {
+		errno = EPERM;
+		return -1;
+	}
+
+	return fwrite(buf, 1, ret, f);
+}
+
+ssize_t
+ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) {
+	const char *type = 0;
+	int ret;
+
+	switch(tag & 0x3) {
+	case ASN_TAG_CLASS_UNIVERSAL:	type = "UNIVERSAL ";	break;
+	case ASN_TAG_CLASS_APPLICATION:	type = "APPLICATION ";	break;
+	case ASN_TAG_CLASS_CONTEXT:	type = "";		break;
+	case ASN_TAG_CLASS_PRIVATE:	type = "PRIVATE ";	break;
+	}
+
+	ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2);
+	if(ret <= 0 && size) buf[0] = '\0';	/* against broken libc's */
+
+	return ret;
+}
+
+char *
+ber_tlv_tag_string(ber_tlv_tag_t tag) {
+	static char buf[sizeof("[APPLICATION ]") + 32];
+
+	(void)ber_tlv_tag_snprint(tag, buf, sizeof(buf));
+
+	return buf;
+}
+
+
+size_t
+ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) {
+	int tclass = BER_TAG_CLASS(tag);
+	ber_tlv_tag_t tval = BER_TAG_VALUE(tag);
+	uint8_t *buf = (uint8_t *)bufp;
+	uint8_t *end;
+	size_t required_size;
+	size_t i;
+
+	if(tval <= 30) {
+		/* Encoded in 1 octet */
+		if(size) buf[0] = (tclass << 6) | tval;
+		return 1;
+	} else if(size) {
+		*buf++ = (tclass << 6) | 0x1F;
+		size--;
+	}
+
+	/*
+	 * Compute the size of the subsequent bytes.
+	 */
+	for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) {
+		if(tval >> i)
+			required_size++;
+		else
+			break;
+	}
+
+	if(size < required_size)
+		return required_size + 1;
+
+	/*
+	 * Fill in the buffer, space permitting.
+	 */
+	end = buf + required_size - 1;
+	for(i -= 7; buf < end; i -= 7, buf++)
+		*buf = 0x80 | ((tval >> i) & 0x7F);
+	*buf = (tval & 0x7F);	/* Last octet without high bit */
+
+	return required_size + 1;
+}
+
diff --git a/asn1c_defs/ber_tlv_tag.h b/asn1c_defs/ber_tlv_tag.h
new file mode 100644
index 0000000..ce227ad
--- /dev/null
+++ b/asn1c_defs/ber_tlv_tag.h
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_BER_TLV_TAG_H_
+#define	_BER_TLV_TAG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum asn_tag_class {
+	ASN_TAG_CLASS_UNIVERSAL		= 0,	/* 0b00 */
+	ASN_TAG_CLASS_APPLICATION	= 1,	/* 0b01 */
+	ASN_TAG_CLASS_CONTEXT		= 2,	/* 0b10 */
+	ASN_TAG_CLASS_PRIVATE		= 3	/* 0b11 */
+};
+typedef unsigned ber_tlv_tag_t;	/* BER TAG from Tag-Length-Value */
+
+/*
+ * Tag class is encoded together with tag value for optimization purposes.
+ */
+#define	BER_TAG_CLASS(tag)	((tag) & 0x3)
+#define	BER_TAG_VALUE(tag)	((tag) >> 2)
+#define	BER_TLV_CONSTRUCTED(tagptr)	(((*(const uint8_t *)tagptr)&0x20)?1:0)
+
+#define	BER_TAGS_EQUAL(tag1, tag2)	((tag1) == (tag2))
+
+/*
+ * Several functions for printing the TAG in the canonical form
+ * (i.e. "[PRIVATE 0]").
+ * Return values correspond to their libc counterparts (if any).
+ */
+ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen);
+ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *);
+char *ber_tlv_tag_string(ber_tlv_tag_t tag);
+
+
+/*
+ * This function tries to fetch the tag from the input stream.
+ * RETURN VALUES:
+ * 	 0:	More data expected than bufptr contains.
+ * 	-1:	Fatal error deciphering tag.
+ *	>0:	Number of bytes used from bufptr. tag_r will contain the tag.
+ */
+ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r);
+
+/*
+ * This function serializes the tag (T from TLV) in BER format.
+ * It always returns number of bytes necessary to represent the tag,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _BER_TLV_TAG_H_ */
diff --git a/asn1c_defs/constr_CHOICE.c b/asn1c_defs/constr_CHOICE.c
new file mode 100644
index 0000000..613e6ea
--- /dev/null
+++ b/asn1c_defs/constr_CHOICE.c
@@ -0,0 +1,1511 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_CHOICE.h>
+#include <per_opentype.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define	LEFT	((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define	SIZE_VIOLATION	(ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {		\
+		size_t num = num_bytes;		\
+		ptr = ((const char *)ptr) + num;\
+		size -= num;			\
+		if(ctx->left >= 0)		\
+			ctx->left -= num;	\
+		consumed_myself += num;		\
+	} while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef	NEXT_PHASE
+#define	NEXT_PHASE(ctx)	do {			\
+		ctx->phase++;			\
+		ctx->step = 0;			\
+	} while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef	RETURN
+#define	RETURN(_code)	do {			\
+		rval.code = _code;		\
+		rval.consumed = consumed_myself;\
+		return rval;			\
+	} while(0)
+
+/*
+ * See the definitions.
+ */
+static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off,
+                                   unsigned size);
+static void _set_present_idx(void *sptr, unsigned offset, unsigned size,
+                             unsigned pres);
+static const void *_get_member_ptr(const asn_TYPE_descriptor_t *,
+                                   const void *sptr, asn_TYPE_member_t **elm,
+                                   unsigned *present);
+
+/*
+ * Tags are canonically sorted in the tag to member table.
+ */
+static int
+_search4tag(const void *ap, const void *bp) {
+	const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+	const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+	int a_class = BER_TAG_CLASS(a->el_tag);
+	int b_class = BER_TAG_CLASS(b->el_tag);
+
+	if(a_class == b_class) {
+		ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+		ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+		if(a_value == b_value)
+			return 0;
+		else if(a_value < b_value)
+			return -1;
+		else
+			return 1;
+	} else if(a_class < b_class) {
+		return -1;
+	} else {
+		return 1;
+	}
+}
+
+/*
+ * The decoder of the CHOICE type.
+ */
+asn_dec_rval_t
+CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const void *ptr, size_t size, int tag_mode) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_CHOICE_specifics_t *specs =
+		(const asn_CHOICE_specifics_t *)td->specifics;
+	asn_TYPE_member_t *elements = td->elements;
+
+	/*
+	 * Parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	ber_tlv_tag_t tlv_tag;	/* T from TLV */
+	ssize_t tag_len;	/* Length of TLV's T */
+	asn_dec_rval_t rval;	/* Return code from subparsers */
+
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+
+	ASN_DEBUG("Decoding %s as CHOICE", td->name);
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) {
+			RETURN(RC_FAIL);
+		}
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+	
+	/*
+	 * Start to parse where left previously
+	 */
+	switch(ctx->phase) {
+	case 0:
+		/*
+		 * PHASE 0.
+		 * Check that the set of tags associated with given structure
+		 * perfectly fits our expectations.
+		 */
+
+		if(tag_mode || td->tags_count) {
+			rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+				tag_mode, -1, &ctx->left, 0);
+			if(rval.code != RC_OK) {
+				ASN_DEBUG("%s tagging check failed: %d",
+					td->name, rval.code);
+				return rval;
+			}
+
+			if(ctx->left >= 0) {
+				/* ?Substracted below! */
+				ctx->left += rval.consumed;
+			}
+			ADVANCE(rval.consumed);
+		} else {
+			ctx->left = -1;
+		}
+
+		NEXT_PHASE(ctx);
+
+		ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
+			(long)ctx->left, (long)size);
+
+		/* Fall through */
+	case 1:
+		/*
+		 * Fetch the T from TLV.
+		 */
+		tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+		ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len);
+		switch(tag_len) {
+		case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+			/* Fall through */
+		case -1: RETURN(RC_FAIL);
+		}
+
+		do {
+			const asn_TYPE_tag2member_t *t2m;
+			asn_TYPE_tag2member_t key;
+
+			key.el_tag = tlv_tag;
+			t2m = (const asn_TYPE_tag2member_t *)bsearch(&key,
+					specs->tag2el, specs->tag2el_count,
+					sizeof(specs->tag2el[0]), _search4tag);
+			if(t2m) {
+				/*
+				 * Found the element corresponding to the tag.
+				 */
+				NEXT_PHASE(ctx);
+				ctx->step = t2m->el_no;
+				break;
+			} else if(specs->ext_start == -1) {
+				ASN_DEBUG("Unexpected tag %s "
+					"in non-extensible CHOICE %s",
+					ber_tlv_tag_string(tlv_tag), td->name);
+				RETURN(RC_FAIL);
+			} else {
+				/* Skip this tag */
+				ssize_t skip;
+
+				ASN_DEBUG("Skipping unknown tag %s",
+					ber_tlv_tag_string(tlv_tag));
+
+				skip = ber_skip_length(opt_codec_ctx,
+					BER_TLV_CONSTRUCTED(ptr),
+					(const char *)ptr + tag_len,
+					LEFT - tag_len);
+
+				switch(skip) {
+				case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+					/* Fall through */
+				case -1: RETURN(RC_FAIL);
+				}
+
+				ADVANCE(skip + tag_len);
+				RETURN(RC_OK);
+			}
+		} while(0);
+
+	case 2:
+		/*
+		 * PHASE 2.
+		 * Read in the element.
+		 */
+	    do {
+		asn_TYPE_member_t *elm;/* CHOICE's element */
+		void *memb_ptr;		/* Pointer to the member */
+		void **memb_ptr2;	/* Pointer to that pointer */
+
+		elm = &elements[ctx->step];
+
+		/*
+		 * Compute the position of the member inside a structure,
+		 * and also a type of containment (it may be contained
+		 * as pointer or using inline inclusion).
+		 */
+		if(elm->flags & ATF_POINTER) {
+			/* Member is a pointer to another structure */
+			memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+		} else {
+			/*
+			 * A pointer to a pointer
+			 * holding the start of the structure
+			 */
+			memb_ptr = (char *)st + elm->memb_offset;
+			memb_ptr2 = &memb_ptr;
+		}
+		/* Set presence to be able to free it properly at any time */
+		_set_present_idx(st, specs->pres_offset,
+				specs->pres_size, ctx->step + 1);
+		/*
+		 * Invoke the member fetch routine according to member's type
+		 */
+		rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type,
+				memb_ptr2, ptr, LEFT, elm->tag_mode);
+		switch(rval.code) {
+		case RC_OK:
+			break;
+		case RC_WMORE: /* More data expected */
+			if(!SIZE_VIOLATION) {
+				ADVANCE(rval.consumed);
+				RETURN(RC_WMORE);
+			}
+			RETURN(RC_FAIL);
+		case RC_FAIL: /* Fatal error */
+			RETURN(rval.code);
+		} /* switch(rval) */
+		
+		ADVANCE(rval.consumed);
+	  } while(0);
+
+		NEXT_PHASE(ctx);
+
+		/* Fall through */
+	case 3:
+		ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d",
+			td->name, (long)ctx->left, (long)size,
+			tag_mode, td->tags_count);
+
+		if(ctx->left > 0) {
+			/*
+			 * The type must be fully decoded
+			 * by the CHOICE member-specific decoder.
+			 */
+			RETURN(RC_FAIL);
+		}
+
+		if(ctx->left == -1
+		&& !(tag_mode || td->tags_count)) {
+			/*
+			 * This is an untagged CHOICE.
+			 * It doesn't contain nothing
+			 * except for the member itself, including all its tags.
+			 * The decoding is completed.
+			 */
+			NEXT_PHASE(ctx);
+			break;
+		}
+
+		/*
+		 * Read in the "end of data chunks"'s.
+		 */
+		while(ctx->left < 0) {
+			ssize_t tl;
+
+			tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+			switch(tl) {
+			case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+				/* Fall through */
+			case -1: RETURN(RC_FAIL);
+			}
+
+			/*
+			 * Expected <0><0>...
+			 */
+			if(((const uint8_t *)ptr)[0] == 0) {
+				if(LEFT < 2) {
+					if(SIZE_VIOLATION)
+						RETURN(RC_FAIL);
+					else
+						RETURN(RC_WMORE);
+				} else if(((const uint8_t *)ptr)[1] == 0) {
+					/*
+					 * Correctly finished with <0><0>.
+					 */
+					ADVANCE(2);
+					ctx->left++;
+					continue;
+				}
+			} else {
+				ASN_DEBUG("Unexpected continuation in %s",
+					td->name);
+				RETURN(RC_FAIL);
+			}
+
+			/* UNREACHABLE */
+		}
+
+		NEXT_PHASE(ctx);
+	case 4:
+		/* No meaningful work here */
+		break;
+	}
+	
+	RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	asn_TYPE_member_t *elm;	/* CHOICE element */
+	asn_enc_rval_t erval = {0,0,0};
+	const void *memb_ptr;
+	size_t computed_size = 0;
+	unsigned present;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("%s %s as CHOICE",
+		cb?"Encoding":"Estimating", td->name);
+
+	present = _fetch_present_idx(sptr,
+		specs->pres_offset, specs->pres_size);
+
+	/*
+	 * If the structure was not initialized, it cannot be encoded:
+	 * can't deduce what to encode in the choice type.
+	 */
+	if(present == 0 || present > td->elements_count) {
+		if(present == 0 && td->elements_count == 0) {
+			/* The CHOICE is empty?! */
+			erval.encoded = 0;
+			ASN__ENCODED_OK(erval);
+		}
+		ASN__ENCODE_FAILED;
+	}
+
+	/*
+	 * Seek over the present member of the structure.
+	 */
+	elm = &td->elements[present-1];
+	if(elm->flags & ATF_POINTER) {
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(memb_ptr == 0) {
+			if(elm->optional) {
+				erval.encoded = 0;
+				ASN__ENCODED_OK(erval);
+			}
+			/* Mandatory element absent */
+			ASN__ENCODE_FAILED;
+		}
+	} else {
+        memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+    }
+
+	/*
+	 * If the CHOICE itself is tagged EXPLICIT:
+	 * T ::= [2] EXPLICIT CHOICE { ... }
+	 * Then emit the appropriate tags.
+	 */
+	if(tag_mode == 1 || td->tags_count) {
+		/*
+		 * For this, we need to pre-compute the member.
+		 */
+		ssize_t ret;
+
+		/* Encode member with its tag */
+		erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+			elm->tag_mode, elm->tag, 0, 0);
+		if(erval.encoded == -1)
+			return erval;
+
+		/* Encode CHOICE with parent or my own tag */
+		ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag,
+			cb, app_key);
+		if(ret == -1)
+			ASN__ENCODE_FAILED;
+		computed_size += ret;
+	}
+
+	/*
+	 * Encode the single underlying member.
+	 */
+	erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+		elm->tag_mode, elm->tag, cb, app_key);
+	if(erval.encoded == -1)
+		return erval;
+
+	ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)",
+		(long)erval.encoded, (long)computed_size);
+
+	erval.encoded += computed_size;
+
+	return erval;
+}
+
+ber_tlv_tag_t
+CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) {
+	const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	unsigned present;
+
+	assert(tag_mode == 0); (void)tag_mode;
+	assert(tag == 0); (void)tag;
+
+	/*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
+
+	if(present > 0 && present <= td->elements_count) {
+		const asn_TYPE_member_t *elm = &td->elements[present-1];
+		const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(const void * const *)
+					((const char *)ptr + elm->memb_offset);
+		} else {
+			memb_ptr = (const void *)
+					((const char *)ptr + elm->memb_offset);
+		}
+
+		return asn_TYPE_outmost_tag(elm->type, memb_ptr,
+			elm->tag_mode, elm->tag);
+	} else {
+		return (ber_tlv_tag_t)-1;
+	}
+}
+
+int
+CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	/*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+	if(present > 0 && present <= td->elements_count) {
+		asn_TYPE_member_t *elm = &td->elements[present-1];
+		const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+			if(!memb_ptr) {
+				if(elm->optional)
+					return 0;
+				ASN__CTFAIL(app_key, td, sptr,
+					"%s: mandatory CHOICE element %s absent (%s:%d)",
+					td->name, elm->name, __FILE__, __LINE__);
+				return -1;
+			}
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+		}
+
+		if(elm->encoding_constraints.general_constraints) {
+			return elm->encoding_constraints.general_constraints(elm->type, memb_ptr,
+				ctfailcb, app_key);
+		} else {
+			return elm->type->encoding_constraints.general_constraints(elm->type,
+					memb_ptr, ctfailcb, app_key);
+		}
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: no CHOICE element given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+#undef	XER_ADVANCE
+#define	XER_ADVANCE(num_bytes)	do {			\
+		size_t num = num_bytes;			\
+		buf_ptr = (const void *)(((const char *)buf_ptr) + num); \
+		size -= num;				\
+		consumed_myself += num;			\
+	} while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const char *opt_mname, const void *buf_ptr, size_t size) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+	/*
+	 * Parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	asn_dec_rval_t rval;		/* Return value of a decoder */
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+	size_t edx;			/* Element index */
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) RETURN(RC_FAIL);
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+	if(ctx->phase == 0 && !*xml_tag)
+		ctx->phase = 1;	/* Skip the outer tag checking phase */
+
+	/*
+	 * Phases of XER/XML processing:
+	 * Phase 0: Check that the opening tag matches our expectations.
+	 * Phase 1: Processing body and reacting on closing tag.
+	 * Phase 2: Processing inner type.
+	 * Phase 3: Only waiting for closing tag.
+	 * Phase 4: Skipping unknown extensions.
+	 * Phase 5: PHASED OUT
+	 */
+	for(edx = ctx->step; ctx->phase <= 4;) {
+		pxer_chunk_type_e ch_type;	/* XER chunk type */
+		ssize_t ch_size;		/* Chunk size */
+		xer_check_tag_e tcv;		/* Tag check value */
+		asn_TYPE_member_t *elm;
+
+		/*
+		 * Go inside the member.
+		 */
+		if(ctx->phase == 2) {
+			asn_dec_rval_t tmprval;
+			void *memb_ptr;		/* Pointer to the member */
+			void **memb_ptr2;	/* Pointer to that pointer */
+			unsigned old_present;
+
+			elm = &td->elements[edx];
+
+			if(elm->flags & ATF_POINTER) {
+				/* Member is a pointer to another structure */
+				memb_ptr2 = (void **)((char *)st
+					+ elm->memb_offset);
+			} else {
+				memb_ptr = (char *)st + elm->memb_offset;
+				memb_ptr2 = &memb_ptr;
+			}
+
+			/* Start/Continue decoding the inner member */
+			tmprval = elm->type->op->xer_decoder(opt_codec_ctx,
+					elm->type, memb_ptr2, elm->name,
+					buf_ptr, size);
+			XER_ADVANCE(tmprval.consumed);
+			ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d",
+				elm->type->name, tmprval.code);
+			old_present = _fetch_present_idx(st,
+				specs->pres_offset, specs->pres_size);
+			assert(old_present == 0 || old_present == edx + 1);
+			/* Record what we've got */
+			_set_present_idx(st,
+				specs->pres_offset, specs->pres_size, edx + 1);
+			if(tmprval.code != RC_OK)
+				RETURN(tmprval.code);
+			ctx->phase = 3;
+			/* Fall through */
+		}
+
+		/* No need to wait for closing tag; special mode. */
+		if(ctx->phase == 3 && !*xml_tag) {
+			ctx->phase = 5;	/* Phase out */
+			RETURN(RC_OK);
+		}
+
+		/*
+		 * Get the next part of the XML stream.
+		 */
+		ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type);
+		if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+			switch(ch_type) {
+			case PXER_WMORE:
+                RETURN(RC_WMORE);
+			case PXER_COMMENT:	/* Got XML comment */
+			case PXER_TEXT:		/* Ignore free-standing text */
+				XER_ADVANCE(ch_size);	/* Skip silently */
+				continue;
+			case PXER_TAG:
+				break;	/* Check the rest down there */
+			}
+		}
+
+		tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+		ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d",
+			ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
+			ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
+			ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
+			ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
+		xml_tag, tcv);
+
+		/* Skip the extensions section */
+		if(ctx->phase == 4) {
+			ASN_DEBUG("skip_unknown(%d, %ld)",
+				tcv, (long)ctx->left);
+			switch(xer_skip_unknown(tcv, &ctx->left)) {
+			case -1:
+				ctx->phase = 5;
+				RETURN(RC_FAIL);
+			case 1:
+				ctx->phase = 3;
+				/* Fall through */
+			case 0:
+				XER_ADVANCE(ch_size);
+				continue;
+			case 2:
+				ctx->phase = 3;
+				break;
+			}
+		}
+
+		switch(tcv) {
+		case XCT_BOTH:
+			break;	/* No CHOICE? */
+		case XCT_CLOSING:
+			if(ctx->phase != 3)
+				break;
+			XER_ADVANCE(ch_size);
+			ctx->phase = 5;	/* Phase out */
+			RETURN(RC_OK);
+		case XCT_OPENING:
+			if(ctx->phase == 0) {
+				XER_ADVANCE(ch_size);
+				ctx->phase = 1;	/* Processing body phase */
+				continue;
+			}
+			/* Fall through */
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
+
+			if(ctx->phase != 1)
+				break;	/* Really unexpected */
+
+			/*
+			 * Search which inner member corresponds to this tag.
+			 */
+			for(edx = 0; edx < td->elements_count; edx++) {
+				elm = &td->elements[edx];
+				tcv = xer_check_tag(buf_ptr,ch_size,elm->name);
+				switch(tcv) {
+				case XCT_BOTH:
+				case XCT_OPENING:
+					/*
+					 * Process this member.
+					 */
+					ctx->step = edx;
+					ctx->phase = 2;
+					break;
+				case XCT_UNKNOWN_OP:
+				case XCT_UNKNOWN_BO:
+					continue;
+				default:
+					edx = td->elements_count;
+					break;	/* Phase out */
+				}
+				break;
+			}
+			if(edx != td->elements_count)
+				continue;
+
+			/* It is expected extension */
+			if(specs->ext_start != -1) {
+				ASN_DEBUG("Got anticipated extension");
+				/*
+				 * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+				 * By using a mask. Only record a pure
+				 * <opening> tags.
+				 */
+				if(tcv & XCT_CLOSING) {
+					/* Found </extension> without body */
+					ctx->phase = 3; /* Terminating */
+				} else {
+					ctx->left = 1;
+					ctx->phase = 4; /* Skip ...'s */
+				}
+				XER_ADVANCE(ch_size);
+				continue;
+			}
+
+			/* Fall through */
+		default:
+			break;
+		}
+
+		ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]"
+			" (ph=%d, tag=%s)",
+			ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
+			ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
+			ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
+			ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
+			td->name, ctx->phase, xml_tag);
+		break;
+	}
+
+	ctx->phase = 5;	/* Phase out, just in case */
+	RETURN(RC_FAIL);
+}
+
+
+asn_enc_rval_t
+CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                  enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+	const asn_CHOICE_specifics_t *specs =
+        	(const asn_CHOICE_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	unsigned present = 0;
+
+	if(!sptr)
+		ASN__ENCODE_FAILED;
+
+	/*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+
+	if(present == 0 || present > td->elements_count) {
+		ASN__ENCODE_FAILED;
+	}  else {
+		asn_enc_rval_t tmper = {0,0,0};
+		asn_TYPE_member_t *elm = &td->elements[present-1];
+		const void *memb_ptr = NULL;
+		const char *mname = elm->name;
+		unsigned int mlen = strlen(mname);
+
+		if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!memb_ptr) ASN__ENCODE_FAILED;
+		} else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+
+        er.encoded = 0;
+
+		if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel);
+		ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+		tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
+				ilevel + 1, flags, cb, app_key);
+		if(tmper.encoded == -1) return tmper;
+		er.encoded += tmper.encoded;
+
+		ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+	}
+
+	if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1);
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+asn_dec_rval_t
+CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_dec_rval_t rv;
+	const asn_per_constraint_t *ct;
+	asn_TYPE_member_t *elm;	/* CHOICE's element */
+	void *memb_ptr;
+	void **memb_ptr2;
+	void *st = *sptr;
+	int value;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value;
+	else ct = 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		value = per_get_few_bits(pd, 1);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value) ct = 0;	/* Not restricted */
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		value = per_get_few_bits(pd, ct->range_bits);
+		if(value < 0) ASN__DECODE_STARVED;
+		ASN_DEBUG("CHOICE %s got index %d in range %d",
+			td->name, value, ct->range_bits);
+		if(value > ct->upper_bound)
+			ASN__DECODE_FAILED;
+	} else {
+		if(specs->ext_start == -1)
+			ASN__DECODE_FAILED;
+		value = uper_get_nsnnwn(pd);
+		if(value < 0) ASN__DECODE_STARVED;
+		value += specs->ext_start;
+		if((unsigned)value >= td->elements_count)
+			ASN__DECODE_FAILED;
+	}
+
+	/* Adjust if canonical order is different from natural order */
+	if(specs->from_canonical_order) {
+        ASN_DEBUG("CHOICE presence from wire %d", value);
+		value = specs->from_canonical_order[value];
+        ASN_DEBUG("CHOICE presence index effective %d", value);
+    }
+
+	/* Set presence to be able to free it later */
+	_set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1);
+
+	elm = &td->elements[value];
+	if(elm->flags & ATF_POINTER) {
+		/* Member is a pointer to another structure */
+		memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+	} else {
+		memb_ptr = (char *)st + elm->memb_offset;
+		memb_ptr2 = &memb_ptr;
+	}
+	ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name);
+
+	if(ct && ct->range_bits >= 0) {
+		rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+			elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+	} else {
+		rv = uper_open_type_get(opt_codec_ctx, elm->type,
+			elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+	}
+
+	if(rv.code != RC_OK)
+		ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d",
+			elm->name, td->name, rv.code);
+	return rv;
+}
+
+asn_enc_rval_t
+CHOICE_encode_uper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+	const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	asn_TYPE_member_t *elm;	/* CHOICE's element */
+	const asn_per_constraint_t *ct;
+	const void *memb_ptr;
+	unsigned present;
+	int present_enc;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Encoding %s as CHOICE", td->name);
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ct = 0;
+
+	present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+
+	/*
+	 * If the structure was not initialized properly, it cannot be encoded:
+	 * can't deduce what to encode in the choice type.
+	 */
+	if(present == 0 || present > td->elements_count)
+		ASN__ENCODE_FAILED;
+	else
+		present--;
+
+	ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present);
+
+    /* Adjust if canonical order is different from natural order */
+    if(specs->to_canonical_order)
+        present_enc = specs->to_canonical_order[present];
+    else
+        present_enc = present;
+
+    if(ct && ct->range_bits >= 0) {
+		if(present_enc < ct->lower_bound
+		|| present_enc > ct->upper_bound) {
+			if(ct->flags & APC_EXTENSIBLE) {
+                ASN_DEBUG(
+                    "CHOICE member %d (enc %d) is an extension (%ld..%ld)",
+                    present, present_enc, ct->lower_bound, ct->upper_bound);
+                if(per_put_few_bits(po, 1, 1))
+					ASN__ENCODE_FAILED;
+			} else {
+				ASN__ENCODE_FAILED;
+			}
+			ct = 0;
+		}
+	}
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+        ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)",
+                  present, present_enc, ct->lower_bound, ct->upper_bound);
+        if(per_put_few_bits(po, 0, 1))
+			ASN__ENCODE_FAILED;
+    }
+
+
+	elm = &td->elements[present];
+    ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present,
+              present_enc);
+    if(elm->flags & ATF_POINTER) {
+		/* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+	} else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(ct && ct->range_bits >= 0) {
+        if(per_put_few_bits(po, present_enc, ct->range_bits))
+            ASN__ENCODE_FAILED;
+
+        return elm->type->op->uper_encoder(
+            elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po);
+    } else {
+        asn_enc_rval_t rval = {0,0,0};
+        if(specs->ext_start == -1) ASN__ENCODE_FAILED;
+        if(uper_put_nsnnwn(po, present_enc - specs->ext_start))
+            ASN__ENCODE_FAILED;
+        if(uper_open_type_put(elm->type,
+                              elm->encoding_constraints.per_constraints,
+                              memb_ptr, po))
+            ASN__ENCODE_FAILED;
+        rval.encoded = 0;
+        ASN__ENCODED_OK(rval);
+    }
+}
+
+asn_dec_rval_t
+CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	asn_dec_rval_t rv;
+	const asn_per_constraint_t *ct;
+	asn_TYPE_member_t *elm;	/* CHOICE's element */
+	void *memb_ptr;
+	void **memb_ptr2;
+	void *st = *sptr;
+	int value;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ct = 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		value = per_get_few_bits(pd, 1);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value) ct = 0;	/* Not restricted */
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		value = per_get_few_bits(pd, ct->range_bits);
+		if(value < 0) ASN__DECODE_STARVED;
+		ASN_DEBUG("CHOICE %s got index %d in range %d",
+		          td->name, value, ct->range_bits);
+		if(value > ct->upper_bound)
+			ASN__DECODE_FAILED;
+	} else {
+		if(specs->ext_start == -1)
+			ASN__DECODE_FAILED;
+		value = uper_get_nsnnwn(pd);
+		if(value < 0) ASN__DECODE_STARVED;
+		value += specs->ext_start;
+		if((unsigned)value >= td->elements_count)
+			ASN__DECODE_FAILED;
+	}
+
+	/* Adjust if canonical order is different from natural order */
+	if(specs->from_canonical_order)
+		value = specs->from_canonical_order[value];
+
+	/* Set presence to be able to free it later */
+	_set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1);
+
+	elm = &td->elements[value];
+	if(elm->flags & ATF_POINTER) {
+		/* Member is a pointer to another structure */
+		memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+	} else {
+		memb_ptr = (char *)st + elm->memb_offset;
+		memb_ptr2 = &memb_ptr;
+	}
+	ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name);
+
+	if(ct && ct->range_bits >= 0) {
+		rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+		                                 elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+	} else {
+		rv = uper_open_type_get(opt_codec_ctx, elm->type,
+		                        elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+	}
+
+	if(rv.code != RC_OK)
+		ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d",
+		          elm->name, td->name, rv.code);
+	return rv;
+}
+
+asn_enc_rval_t
+CHOICE_encode_aper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   const void *sptr, asn_per_outp_t *po) {
+	const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	const asn_TYPE_member_t *elm; /* CHOICE's element */
+	const asn_per_constraint_t *ct;
+	const void *memb_ptr;
+	int present;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name);
+
+	if(constraints) ct = &constraints->value;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->value;
+	else ct = 0;
+
+	present = _fetch_present_idx(sptr,
+	                             specs->pres_offset, specs->pres_size);
+
+	/*
+	 * If the structure was not initialized properly, it cannot be encoded:
+	 * can't deduce what to encode in the choice type.
+	 */
+	if(present <= 0 || (unsigned)present > td->elements_count)
+		ASN__ENCODE_FAILED;
+	else
+		present--;
+
+	/* Adjust if canonical order is different from natural order */
+	if(specs->to_canonical_order)
+		present = specs->to_canonical_order[present];
+
+	ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present);
+
+	if(ct && ct->range_bits >= 0) {
+		if(present < ct->lower_bound
+		        || present > ct->upper_bound) {
+			if(ct->flags & APC_EXTENSIBLE) {
+				if(per_put_few_bits(po, 1, 1))
+					ASN__ENCODE_FAILED;
+			} else {
+				ASN__ENCODE_FAILED;
+			}
+			ct = 0;
+		}
+	}
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		if(per_put_few_bits(po, 0, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+	elm = &td->elements[present];
+	if(elm->flags & ATF_POINTER) {
+		/* Member is a pointer to another structure */
+		memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset);
+		if(!memb_ptr) ASN__ENCODE_FAILED;
+	} else {
+		memb_ptr = (const char *)sptr + elm->memb_offset;
+	}
+
+	if(ct && ct->range_bits >= 0) {
+		if(per_put_few_bits(po, present, ct->range_bits))
+			ASN__ENCODE_FAILED;
+
+		return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints,
+		                                   memb_ptr, po);
+	} else {
+		asn_enc_rval_t rval = {0,0,0};
+		if(specs->ext_start == -1)
+			ASN__ENCODE_FAILED;
+		if (ct) {
+		  if(aper_put_nsnnwn(po, ct->range_bits, present - specs->ext_start))
+			ASN__ENCODE_FAILED;
+		}
+		if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints,
+		                      memb_ptr, po))
+			ASN__ENCODE_FAILED;
+		rval.encoded = 0;
+		ASN__ENCODED_OK(rval);
+	}
+}
+
+int
+CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+             asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+	unsigned present;
+
+	if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	/*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+
+	/*
+	 * Print that element.
+	 */
+	if(present > 0 && present <= td->elements_count) {
+		asn_TYPE_member_t *elm = &td->elements[present-1];
+		const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+			if(!memb_ptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+		}
+
+		/* Print member's name and stuff */
+		if(0) {
+			if(cb(elm->name, strlen(elm->name), app_key) < 0
+			|| cb(": ", 2, app_key) < 0)
+				return -1;
+		}
+
+		return elm->type->op->print_struct(elm->type, memb_ptr, ilevel,
+			cb, app_key);
+	} else {
+		return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+	}
+}
+
+void
+CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr,
+            enum asn_struct_free_method method) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+	if(!td || !ptr)
+		return;
+
+	ASN_DEBUG("Freeing %s as CHOICE", td->name);
+
+	/*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
+
+	/*
+	 * Free that element.
+	 */
+	if(present > 0 && present <= td->elements_count) {
+		asn_TYPE_member_t *elm = &td->elements[present-1];
+		void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
+			if(memb_ptr)
+				ASN_STRUCT_FREE(*elm->type, memb_ptr);
+		} else {
+			memb_ptr = (void *)((char *)ptr + elm->memb_offset);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
+		}
+	}
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(ptr, 0, specs->struct_size);
+        break;
+    }
+}
+
+
+/*
+ * The following functions functions offer protection against -fshort-enums,
+ * compatible with little- and big-endian machines.
+ * If assertion is triggered, either disable -fshort-enums, or add an entry
+ * here with the ->pres_size of your target stracture.
+ * Unless the target structure is packed, the ".present" member
+ * is guaranteed to be aligned properly. ASN.1 compiler itself does not
+ * produce packed code.
+ */
+static unsigned
+_fetch_present_idx(const void *struct_ptr, unsigned pres_offset,
+                   unsigned pres_size) {
+    const void *present_ptr;
+	unsigned present;
+
+	present_ptr = ((const char *)struct_ptr) + pres_offset;
+
+	switch(pres_size) {
+	case sizeof(int):	present = *(const unsigned int *)present_ptr; break;
+	case sizeof(short):	present = *(const unsigned short *)present_ptr; break;
+	case sizeof(char):	present = *(const unsigned char *)present_ptr; break;
+	default:
+		/* ANSI C mandates enum to be equivalent to integer */
+		assert(pres_size != sizeof(int));
+		return 0;	/* If not aborted, pass back safe value */
+	}
+
+	return present;
+}
+
+static void
+_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size,
+                 unsigned present) {
+    void *present_ptr;
+	present_ptr = ((char *)struct_ptr) + pres_offset;
+
+	switch(pres_size) {
+	case sizeof(int):	*(unsigned int *)present_ptr   = present; break;
+	case sizeof(short):	*(unsigned short *)present_ptr = present; break;
+	case sizeof(char):	*(unsigned char *)present_ptr  = present; break;
+	default:
+		/* ANSI C mandates enum to be equivalent to integer */
+		assert(pres_size != sizeof(int));
+	}
+}
+
+static const void *
+_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr,
+                asn_TYPE_member_t **elm_ptr, unsigned *present_out) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+    if(!sptr) {
+        *elm_ptr = NULL;
+        *present_out = 0;
+        return NULL;
+    }
+
+    /*
+	 * Figure out which CHOICE element is encoded.
+	 */
+	present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+    *present_out = present;
+
+    /*
+     * The presence index is intentionally 1-based to avoid
+     * treating zeroed structure as a valid one.
+     */
+	if(present > 0 && present <= td->elements_count) {
+        asn_TYPE_member_t *const elm = &td->elements[present - 1];
+        const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+        *elm_ptr = elm;
+        return memb_ptr;
+    } else {
+        *elm_ptr = NULL;
+        return NULL;
+    }
+
+}
+
+int
+CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) {
+    asn_TYPE_member_t *aelm;
+    asn_TYPE_member_t *belm;
+    unsigned apresent = 0;
+    unsigned bpresent = 0;
+    const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent);
+    const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent);
+
+    if(amember && bmember) {
+        if(apresent == bpresent) {
+            assert(aelm == belm);
+            return aelm->type->op->compare_struct(aelm->type, amember, bmember);
+        } else if(apresent < bpresent) {
+            return -1;
+        } else {
+            return 1;
+        }
+    } else if(!amember) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+/*
+ * Return the 1-based choice variant presence index.
+ * Returns 0 in case of error.
+ */
+unsigned
+CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+}
+
+/*
+ * Sets or resets the 1-based choice variant presence index.
+ * In case a previous index is not zero, the currently selected structure
+ * member is freed and zeroed-out first.
+ * Returns 0 on success and -1 on error.
+ */
+int
+CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr,
+                            unsigned present) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned old_present;
+
+    if(!sptr) {
+        return -1;
+    }
+
+    if(present > td->elements_count)
+        return -1;
+
+    old_present =
+        _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+    if(present == old_present)
+        return 0;
+
+    if(old_present != 0) {
+        assert(old_present <= td->elements_count);
+        ASN_STRUCT_RESET(*td, sptr);
+    }
+
+    _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present);
+
+    return 0;
+}
+
+
+asn_random_fill_result_t
+CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constr,
+                   size_t max_length) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_random_fill_result_t res;
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    const asn_TYPE_member_t *elm;
+    unsigned present;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *st = *sptr;
+
+    if(max_length == 0) return result_skipped;
+
+    (void)constr;
+
+    if(st == NULL) {
+        st = CALLOC(1, specs->struct_size);
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    present = asn_random_between(1, td->elements_count);
+    elm = &td->elements[present - 1];
+
+	if(elm->flags & ATF_POINTER) {
+		/* Member is a pointer to another structure */
+		memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+	} else {
+		memb_ptr = (char *)st + elm->memb_offset;
+		memb_ptr2 = &memb_ptr;
+	}
+
+    res = elm->type->op->random_fill(elm->type, memb_ptr2,
+                                    &elm->encoding_constraints, max_length);
+    _set_present_idx(st, specs->pres_offset, specs->pres_size, present);
+    if(res.code == ARFILL_OK) {
+        *sptr = st;
+    } else {
+        if(st == *sptr) {
+            ASN_STRUCT_RESET(*td, st);
+        } else {
+            ASN_STRUCT_FREE(*td, st);
+        }
+    }
+
+    return res;
+}
+
+
+asn_TYPE_operation_t asn_OP_CHOICE = {
+	CHOICE_free,
+	CHOICE_print,
+	CHOICE_compare,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	CHOICE_decode_xer,
+	CHOICE_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	CHOICE_decode_oer,
+	CHOICE_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	CHOICE_decode_uper,
+	CHOICE_encode_uper,
+	CHOICE_decode_aper,
+	CHOICE_encode_aper,
+#endif	/* ASN_DISABLE_PER_SUPPORT */
+	CHOICE_random_fill,
+	CHOICE_outmost_tag
+};
diff --git a/asn1c_defs/constr_CHOICE.h b/asn1c_defs/constr_CHOICE.h
new file mode 100644
index 0000000..a1999ed
--- /dev/null
+++ b/asn1c_defs/constr_CHOICE.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_CONSTR_CHOICE_H_
+#define	_CONSTR_CHOICE_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_CHOICE_specifics_s {
+	/*
+	 * Target structure description.
+	 */
+	unsigned struct_size;       /* Size of the target structure. */
+	unsigned ctx_offset;        /* Offset of the asn_codec_ctx_t member */
+	unsigned pres_offset;       /* Identifier of the present member */
+	unsigned pres_size;         /* Size of the identifier (enum) */
+
+	/*
+	 * Tags to members mapping table.
+	 */
+	const asn_TYPE_tag2member_t *tag2el;
+	unsigned tag2el_count;
+
+	/* Canonical ordering of CHOICE elements, for PER */
+	const unsigned *to_canonical_order;
+	const unsigned *from_canonical_order;
+
+	/*
+	 * Extensions-related stuff.
+	 */
+	signed ext_start; /* First member of extensions, or -1 */
+} asn_CHOICE_specifics_t;
+
+/*
+ * A set specialized functions dealing with the CHOICE type.
+ */
+asn_struct_free_f CHOICE_free;
+asn_struct_print_f CHOICE_print;
+asn_struct_compare_f CHOICE_compare;
+asn_constr_check_f CHOICE_constraint;
+ber_type_decoder_f CHOICE_decode_ber;
+der_type_encoder_f CHOICE_encode_der;
+xer_type_decoder_f CHOICE_decode_xer;
+xer_type_encoder_f CHOICE_encode_xer;
+oer_type_decoder_f CHOICE_decode_oer;
+oer_type_encoder_f CHOICE_encode_oer;
+per_type_decoder_f CHOICE_decode_uper;
+per_type_encoder_f CHOICE_encode_uper;
+per_type_decoder_f CHOICE_decode_aper;
+per_type_encoder_f CHOICE_encode_aper;
+asn_outmost_tag_f CHOICE_outmost_tag;
+asn_random_fill_f CHOICE_random_fill;
+extern asn_TYPE_operation_t asn_OP_CHOICE;
+
+/*
+ * Return the 1-based choice variant presence index.
+ * Returns 0 in case of error.
+ */
+unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td,
+                                     const void *structure_ptr);
+
+/*
+ * Sets or resets the 1-based choice variant presence index.
+ * In case a previous index is not zero, the currently selected structure
+ * member is freed and zeroed-out first.
+ * Returns 0 on success and -1 on error.
+ */
+int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td,
+                                void *structure_ptr, unsigned present);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _CONSTR_CHOICE_H_ */
diff --git a/asn1c_defs/constr_SEQUENCE.c b/asn1c_defs/constr_SEQUENCE.c
new file mode 100644
index 0000000..43dcac7
--- /dev/null
+++ b/asn1c_defs/constr_SEQUENCE.c
@@ -0,0 +1,2059 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SEQUENCE.h>
+#include <OPEN_TYPE.h>
+#include <per_opentype.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define	LEFT	((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define	SIZE_VIOLATION	(ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {		\
+		size_t num = num_bytes;		\
+		ptr = ((const char *)ptr) + num; \
+		size -= num;			\
+		if(ctx->left >= 0)		\
+			ctx->left -= num;	\
+		consumed_myself += num;		\
+	} while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef	NEXT_PHASE
+#undef	PHASE_OUT
+#define	NEXT_PHASE(ctx)	do {			\
+		ctx->phase++;			\
+		ctx->step = 0;			\
+	} while(0)
+#define	PHASE_OUT(ctx)	do { ctx->phase = 10; } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef	RETURN
+#define	RETURN(_code)	do {			\
+		rval.code = _code;		\
+		rval.consumed = consumed_myself;\
+		return rval;			\
+	} while(0)
+
+/*
+ * Check whether we are inside the extensions group.
+ */
+#define IN_EXTENSION_GROUP(specs, memb_idx) \
+    ((specs)->first_extension >= 0          \
+     && (unsigned)(specs)->first_extension <= (memb_idx))
+
+/*
+ * Tags are canonically sorted in the tag2element map.
+ */
+static int
+_t2e_cmp(const void *ap, const void *bp) {
+	const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+	const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+	int a_class = BER_TAG_CLASS(a->el_tag);
+	int b_class = BER_TAG_CLASS(b->el_tag);
+
+	if(a_class == b_class) {
+		ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+		ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+		if(a_value == b_value) {
+			if(a->el_no > b->el_no)
+				return 1;
+			/*
+			 * Important: we do not check
+			 * for a->el_no <= b->el_no!
+			 */
+			return 0;
+		} else if(a_value < b_value)
+			return -1;
+		else
+			return 1;
+	} else if(a_class < b_class) {
+		return -1;
+	} else {
+		return 1;
+	}
+}
+
+
+/*
+ * The decoder of the SEQUENCE type.
+ */
+asn_dec_rval_t
+SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                    const void *ptr, size_t size, int tag_mode) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elements = td->elements;
+
+    /*
+	 * Parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	ber_tlv_tag_t tlv_tag;	/* T from TLV */
+	asn_dec_rval_t rval;	/* Return code from subparsers */
+
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+	size_t edx;			/* SEQUENCE element's index */
+
+	ASN_DEBUG("Decoding %s as SEQUENCE", td->name);
+	
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) {
+			RETURN(RC_FAIL);
+		}
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+	
+	/*
+	 * Start to parse where left previously
+	 */
+	switch(ctx->phase) {
+	case 0:
+		/*
+		 * PHASE 0.
+		 * Check that the set of tags associated with given structure
+		 * perfectly fits our expectations.
+		 */
+
+		rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+			tag_mode, 1, &ctx->left, 0);
+		if(rval.code != RC_OK) {
+			ASN_DEBUG("%s tagging check failed: %d",
+				td->name, rval.code);
+			return rval;
+		}
+
+		if(ctx->left >= 0)
+			ctx->left += rval.consumed; /* ?Substracted below! */
+		ADVANCE(rval.consumed);
+
+		NEXT_PHASE(ctx);
+
+		ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
+			(long)ctx->left, (long)size);
+
+		/* Fall through */
+	case 1:
+		/*
+		 * PHASE 1.
+		 * From the place where we've left it previously,
+		 * try to decode the next member from the list of
+		 * this structure's elements.
+		 * (ctx->step) stores the member being processed
+		 * between invocations and the microphase {0,1} of parsing
+		 * that member:
+		 * 	step = (<member_number> * 2 + <microphase>).
+		 */
+	  for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count;
+			edx++, ctx->step = (ctx->step & ~1) + 2) {
+		void *memb_ptr;		/* Pointer to the member */
+		void **memb_ptr2;	/* Pointer to that pointer */
+		ssize_t tag_len;	/* Length of TLV's T */
+		size_t opt_edx_end;	/* Next non-optional element */
+		size_t n;
+		int use_bsearch;
+
+		if(ctx->step & 1)
+			goto microphase2;
+
+		/*
+		 * MICROPHASE 1: Synchronize decoding.
+		 */
+		ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d"
+				" opt=%d ec=%d",
+			td->name, (int)ctx->left, edx,
+			elements[edx].flags, elements[edx].optional,
+			td->elements_count);
+
+        if(ctx->left == 0 /* No more stuff is expected */
+           && (
+                  /* Explicit OPTIONAL specification reaches the end */
+                  (edx + elements[edx].optional == td->elements_count) ||
+                  /* All extensions are optional */
+                  IN_EXTENSION_GROUP(specs, edx))) {
+            ASN_DEBUG("End of SEQUENCE %s", td->name);
+            /*
+             * Found the legitimate end of the structure.
+             */
+            PHASE_OUT(ctx);
+            RETURN(RC_OK);
+        }
+
+		/*
+		 * Fetch the T from TLV.
+		 */
+		tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+		ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " "
+			"(%s) is %s encoded in %d bytes, of frame %ld",
+			td->name, edx, elements[edx].name,
+			ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT);
+		switch(tag_len) {
+		case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+			/* Fall through */
+		case -1: RETURN(RC_FAIL);
+		}
+
+        if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
+            if(LEFT < 2) {
+                if(SIZE_VIOLATION) {
+                    RETURN(RC_FAIL);
+                } else {
+                    RETURN(RC_WMORE);
+                }
+            } else if(((const uint8_t *)ptr)[1] == 0) {
+                ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx,
+                          elements[edx].optional, td->elements_count);
+                if((edx + elements[edx].optional == td->elements_count)
+                   || IN_EXTENSION_GROUP(specs, edx)) {
+                    /*
+                     * Yeah, baby! Found the terminator
+                     * of the indefinite length structure.
+                     */
+                    /*
+                     * Proceed to the canonical
+                     * finalization function.
+                     * No advancing is necessary.
+                     */
+                    goto phase3;
+                }
+            }
+        }
+
+		/*
+		 * Find the next available type with this tag.
+		 */
+		use_bsearch = 0;
+		opt_edx_end = edx + elements[edx].optional + 1;
+		if(opt_edx_end > td->elements_count)
+			opt_edx_end = td->elements_count;	/* Cap */
+		else if(opt_edx_end - edx > 8) {
+			/* Limit the scope of linear search... */
+			opt_edx_end = edx + 8;
+			use_bsearch = 1;
+			/* ... and resort to bsearch() */
+		}
+		for(n = edx; n < opt_edx_end; n++) {
+			if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) {
+				/*
+				 * Found element corresponding to the tag
+				 * being looked at.
+				 * Reposition over the right element.
+				 */
+				edx = n;
+				ctx->step = 1 + 2 * edx;	/* Remember! */
+				goto microphase2;
+			} else if(elements[n].flags & ATF_ANY_TYPE) {
+				/*
+				 * This is the ANY type, which may bear
+				 * any flag whatsoever.
+				 */
+				edx = n;
+				ctx->step = 1 + 2 * edx;	/* Remember! */
+				goto microphase2;
+			} else if(elements[n].tag == (ber_tlv_tag_t)-1) {
+				use_bsearch = 1;
+				break;
+			}
+		}
+		if(use_bsearch) {
+			/*
+			 * Resort to a binary search over
+			 * sorted array of tags.
+			 */
+			const asn_TYPE_tag2member_t *t2m;
+			asn_TYPE_tag2member_t key = {0, 0, 0, 0};
+			key.el_tag = tlv_tag;
+			key.el_no = edx;
+			t2m = (const asn_TYPE_tag2member_t *)bsearch(&key,
+				specs->tag2el, specs->tag2el_count,
+				sizeof(specs->tag2el[0]), _t2e_cmp);
+			if(t2m) {
+				const asn_TYPE_tag2member_t *best = 0;
+				const asn_TYPE_tag2member_t *t2m_f, *t2m_l;
+				size_t edx_max = edx + elements[edx].optional;
+				/*
+				 * Rewind to the first element with that tag,
+				 * `cause bsearch() does not guarantee order.
+				 */
+				t2m_f = t2m + t2m->toff_first;
+				t2m_l = t2m + t2m->toff_last;
+				for(t2m = t2m_f; t2m <= t2m_l; t2m++) {
+					if(t2m->el_no > edx_max) break;
+					if(t2m->el_no < edx) continue;
+					best = t2m;
+				}
+				if(best) {
+					edx = best->el_no;
+					ctx->step = 1 + 2 * edx;
+					goto microphase2;
+				}
+			}
+			n = opt_edx_end;
+		}
+		if(n == opt_edx_end) {
+			/*
+			 * If tag is unknown, it may be either
+			 * an unknown (thus, incorrect) tag,
+			 * or an extension (...),
+			 * or an end of the indefinite-length structure.
+			 */
+			if(!IN_EXTENSION_GROUP(specs,
+				edx + elements[edx].optional)) {
+				ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")",
+					ber_tlv_tag_string(tlv_tag), edx);
+				ASN_DEBUG("Expected tag %s (%s)%s",
+					ber_tlv_tag_string(elements[edx].tag),
+					elements[edx].name,
+					elements[edx].optional
+						?" or alternatives":"");
+				RETURN(RC_FAIL);
+			} else {
+				/* Skip this tag */
+				ssize_t skip;
+				edx += elements[edx].optional;
+
+				ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")",
+					ber_tlv_tag_string(tlv_tag), edx);
+				skip = ber_skip_length(opt_codec_ctx,
+					BER_TLV_CONSTRUCTED(ptr),
+					(const char *)ptr + tag_len,
+					LEFT - tag_len);
+				ASN_DEBUG("Skip length %d in %s",
+					(int)skip, td->name);
+				switch(skip) {
+				case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+					/* Fall through */
+				case -1: RETURN(RC_FAIL);
+				}
+
+				ADVANCE(skip + tag_len);
+				ctx->step -= 2;
+				edx--;
+				continue;  /* Try again with the next tag */
+			}
+		}
+
+		/*
+		 * MICROPHASE 2: Invoke the member-specific decoder.
+		 */
+		ctx->step |= 1;		/* Confirm entering next microphase */
+	microphase2:
+		ASN_DEBUG("Inside SEQUENCE %s MF2", td->name);
+		
+		/*
+		 * Compute the position of the member inside a structure,
+		 * and also a type of containment (it may be contained
+		 * as pointer or using inline inclusion).
+		 */
+		if(elements[edx].flags & ATF_POINTER) {
+			/* Member is a pointer to another structure */
+			memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset);
+		} else {
+			/*
+			 * A pointer to a pointer
+			 * holding the start of the structure
+			 */
+			memb_ptr = (char *)st + elements[edx].memb_offset;
+			memb_ptr2 = &memb_ptr;
+		}
+		/*
+		 * Invoke the member fetch routine according to member's type
+		 */
+		if(elements[edx].flags & ATF_OPEN_TYPE) {
+			rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT);
+        } else {
+			rval = elements[edx].type->op->ber_decoder(opt_codec_ctx,
+					elements[edx].type,
+					memb_ptr2, ptr, LEFT,
+					elements[edx].tag_mode);
+		}
+		ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d "
+			"in %d bytes rval.code %d, size=%d",
+			td->name, edx, elements[edx].type->name,
+			(int)LEFT, (int)rval.consumed, rval.code, (int)size);
+		switch(rval.code) {
+		case RC_OK:
+			break;
+		case RC_WMORE: /* More data expected */
+			if(!SIZE_VIOLATION) {
+				ADVANCE(rval.consumed);
+				RETURN(RC_WMORE);
+			}
+			ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)",
+				(long)ctx->left, (long)size);
+			/* Fall through */
+		case RC_FAIL: /* Fatal error */
+			RETURN(RC_FAIL);
+		} /* switch(rval) */
+		
+		ADVANCE(rval.consumed);
+	  }	/* for(all structure members) */
+
+	phase3:
+		ctx->phase = 3;
+        /* Fall through */
+	case 3:	/* 00 and other tags expected */
+	case 4:	/* only 00's expected */
+
+		ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld",
+			td->name, (long)ctx->left, (long)size);
+
+		/*
+		 * Skip everything until the end of the SEQUENCE.
+		 */
+		while(ctx->left) {
+			ssize_t tl, ll;
+
+			tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+			switch(tl) {
+			case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+				/* Fall through */
+			case -1: RETURN(RC_FAIL);
+			}
+
+			/*
+			 * If expected <0><0>...
+			 */
+			if(ctx->left < 0
+				&& ((const uint8_t *)ptr)[0] == 0) {
+				if(LEFT < 2) {
+					if(SIZE_VIOLATION)
+						RETURN(RC_FAIL);
+					else
+						RETURN(RC_WMORE);
+				} else if(((const uint8_t *)ptr)[1] == 0) {
+					/*
+					 * Correctly finished with <0><0>.
+					 */
+					ADVANCE(2);
+					ctx->left++;
+					ctx->phase = 4;
+					continue;
+				}
+			}
+
+			if(!IN_EXTENSION_GROUP(specs, td->elements_count)
+			|| ctx->phase == 4) {
+				ASN_DEBUG("Unexpected continuation "
+					"of a non-extensible type "
+					"%s (SEQUENCE): %s",
+					td->name,
+					ber_tlv_tag_string(tlv_tag));
+				RETURN(RC_FAIL);
+			}
+
+			ll = ber_skip_length(opt_codec_ctx,
+				BER_TLV_CONSTRUCTED(ptr),
+				(const char *)ptr + tl, LEFT - tl);
+			switch(ll) {
+			case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+				/* Fall through */
+			case -1: RETURN(RC_FAIL);
+			}
+
+			ADVANCE(tl + ll);
+		}
+
+		PHASE_OUT(ctx);
+	}
+	
+	RETURN(RC_OK);
+}
+
+
+/*
+ * The DER encoder of the SEQUENCE type.
+ */
+asn_enc_rval_t
+SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int tag_mode, ber_tlv_tag_t tag,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t computed_size = 0;
+	asn_enc_rval_t erval = {0,0,0};
+	ssize_t ret;
+	size_t edx;
+
+	ASN_DEBUG("%s %s as SEQUENCE",
+		cb?"Encoding":"Estimating", td->name);
+
+	/*
+	 * Gather the length of the underlying members sequence.
+	 */
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+
+		const void *memb_ptr;		/* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) {
+				ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present",
+					elm->name, edx);
+				if(elm->optional)
+					continue;
+				/* Mandatory element is missing */
+				ASN__ENCODE_FAILED;
+			}
+		} else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+		}
+
+		/* Eliminate default values */
+		if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+			continue;
+
+		erval = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+			elm->tag_mode, elm->tag,
+			0, 0);
+		if(erval.encoded == -1)
+			return erval;
+		computed_size += erval.encoded;
+		ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes",
+			edx, elm->name, (long)erval.encoded);
+	}
+
+	/*
+	 * Encode the TLV for the sequence itself.
+	 */
+	ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
+	ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size);
+	if(ret == -1)
+		ASN__ENCODE_FAILED;
+	erval.encoded = computed_size + ret;
+
+	if(!cb) ASN__ENCODED_OK(erval);
+
+	/*
+	 * Encode all members.
+	 */
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		asn_enc_rval_t tmperval = {0,0,0};
+        const void *memb_ptr;           /* Pointer to the member */
+        const void *const *memb_ptr2;   /* Pointer to that pointer */
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) continue;
+		} else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+		}
+
+		/* Eliminate default values */
+        if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+            continue;
+
+		tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+			elm->tag_mode, elm->tag, cb, app_key);
+		if(tmperval.encoded == -1)
+			return tmperval;
+		computed_size -= tmperval.encoded;
+		ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes",
+			edx, elm->name, td->name, (long)tmperval.encoded);
+	}
+
+	if(computed_size != 0)
+		/*
+		 * Encoded size is not equal to the computed size.
+		 */
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(erval);
+}
+
+
+#undef	XER_ADVANCE
+#define XER_ADVANCE(num_bytes)           \
+    do {                                 \
+        size_t num = (num_bytes);        \
+        ptr = ((const char *)ptr) + num; \
+        size -= num;                     \
+        consumed_myself += num;          \
+    } while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                    const char *opt_mname, const void *ptr, size_t size) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_SEQUENCE_specifics_t *specs
+		= (const asn_SEQUENCE_specifics_t *)td->specifics;
+	asn_TYPE_member_t *elements = td->elements;
+	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+	/*
+	 * ... and parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	asn_dec_rval_t rval;		/* Return value from a decoder */
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+	size_t edx;			/* Element index */
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) RETURN(RC_FAIL);
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+
+	/*
+	 * Phases of XER/XML processing:
+	 * Phase 0: Check that the opening tag matches our expectations.
+	 * Phase 1: Processing body and reacting on closing tag.
+	 * Phase 2: Processing inner type.
+	 * Phase 3: Skipping unknown extensions.
+	 * Phase 4: PHASED OUT
+	 */
+	for(edx = ctx->step; ctx->phase <= 3;) {
+		pxer_chunk_type_e ch_type;	/* XER chunk type */
+		ssize_t ch_size;		/* Chunk size */
+		xer_check_tag_e tcv;		/* Tag check value */
+		asn_TYPE_member_t *elm;
+
+		/*
+		 * Go inside the inner member of a sequence.
+		 */
+		if(ctx->phase == 2) {
+			asn_dec_rval_t tmprval;
+			void *memb_ptr_dontuse;		/* Pointer to the member */
+			void **memb_ptr2;	/* Pointer to that pointer */
+
+			elm = &td->elements[edx];
+
+			if(elm->flags & ATF_POINTER) {
+				/* Member is a pointer to another structure */
+				memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+			} else {
+				memb_ptr_dontuse = (char *)st + elm->memb_offset;
+				memb_ptr2 = &memb_ptr_dontuse;  /* Only use of memb_ptr_dontuse */
+			}
+
+			if(elm->flags & ATF_OPEN_TYPE) {
+				tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size);
+			} else {
+				/* Invoke the inner type decoder, m.b. multiple times */
+				tmprval = elm->type->op->xer_decoder(opt_codec_ctx,
+						elm->type, memb_ptr2, elm->name,
+						ptr, size);
+			}
+			XER_ADVANCE(tmprval.consumed);
+			if(tmprval.code != RC_OK)
+				RETURN(tmprval.code);
+			ctx->phase = 1;	/* Back to body processing */
+			ctx->step = ++edx;
+			ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d",
+				ctx->phase, ctx->step);
+			/* Fall through */
+		}
+
+		/*
+		 * Get the next part of the XML stream.
+		 */
+		ch_size = xer_next_token(&ctx->context, ptr, size,
+			&ch_type);
+		if(ch_size == -1) {
+		    RETURN(RC_FAIL);
+		} else {
+			switch(ch_type) {
+			case PXER_WMORE:
+				RETURN(RC_WMORE);
+			case PXER_COMMENT:	/* Got XML comment */
+			case PXER_TEXT:		/* Ignore free-standing text */
+				XER_ADVANCE(ch_size);	/* Skip silently */
+				continue;
+			case PXER_TAG:
+				break;	/* Check the rest down there */
+			}
+		}
+
+		tcv = xer_check_tag(ptr, ch_size, xml_tag);
+		ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]",
+			tcv, ctx->phase, xml_tag);
+
+		/* Skip the extensions section */
+		if(ctx->phase == 3) {
+			switch(xer_skip_unknown(tcv, &ctx->left)) {
+			case -1:
+				ctx->phase = 4;
+				RETURN(RC_FAIL);
+			case 0:
+				XER_ADVANCE(ch_size);
+				continue;
+			case 1:
+				XER_ADVANCE(ch_size);
+				ctx->phase = 1;
+				continue;
+			case 2:
+				ctx->phase = 1;
+				break;
+			}
+		}
+
+		switch(tcv) {
+		case XCT_CLOSING:
+			if(ctx->phase == 0) break;
+			ctx->phase = 0;
+			/* Fall through */
+		case XCT_BOTH:
+            if(ctx->phase == 0) {
+                if(edx >= td->elements_count ||
+                   /* Explicit OPTIONAL specs reaches the end */
+                   (edx + elements[edx].optional == td->elements_count) ||
+                   /* All extensions are optional */
+                   IN_EXTENSION_GROUP(specs, edx)) {
+                    XER_ADVANCE(ch_size);
+					ctx->phase = 4;	/* Phase out */
+					RETURN(RC_OK);
+				} else {
+					ASN_DEBUG("Premature end of XER SEQUENCE");
+					RETURN(RC_FAIL);
+				}
+			}
+			/* Fall through */
+		case XCT_OPENING:
+			if(ctx->phase == 0) {
+				XER_ADVANCE(ch_size);
+				ctx->phase = 1;	/* Processing body phase */
+				continue;
+			}
+			/* Fall through */
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
+
+			ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "",
+				tcv, ctx->phase, edx);
+			if(ctx->phase != 1) {
+				break;	/* Really unexpected */
+			}
+
+			if(edx < td->elements_count) {
+				/*
+				 * Search which member corresponds to this tag.
+				 */
+				size_t n;
+				size_t edx_end = edx + elements[edx].optional + 1;
+				if(edx_end > td->elements_count)
+					edx_end = td->elements_count;
+				for(n = edx; n < edx_end; n++) {
+					elm = &td->elements[n];
+					tcv = xer_check_tag(ptr, ch_size, elm->name);
+					switch(tcv) {
+					case XCT_BOTH:
+					case XCT_OPENING:
+						/*
+						 * Process this member.
+						 */
+						ctx->step = edx = n;
+						ctx->phase = 2;
+						break;
+					case XCT_UNKNOWN_OP:
+					case XCT_UNKNOWN_BO:
+						continue;
+					default:
+						n = edx_end;
+						break;	/* Phase out */
+					}
+					break;
+				}
+				if(n != edx_end)
+					continue;
+			} else {
+				ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u",
+					edx, td->elements_count);
+			}
+
+			/* It is expected extension */
+			if(IN_EXTENSION_GROUP(specs,
+				edx + (edx < td->elements_count
+					? elements[edx].optional : 0))) {
+				ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "",
+					edx);
+				/*
+				 * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+				 * By using a mask. Only record a pure
+				 * <opening> tags.
+				 */
+				if(tcv & XCT_CLOSING) {
+					/* Found </extension> without body */
+				} else {
+					ctx->left = 1;
+					ctx->phase = 3;	/* Skip ...'s */
+				}
+				XER_ADVANCE(ch_size);
+				continue;
+			}
+
+			/* Fall through */
+		default:
+			break;
+		}
+
+		ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]",
+			size>0?((const char *)ptr)[0]:'.',
+			size>1?((const char *)ptr)[1]:'.',
+			size>2?((const char *)ptr)[2]:'.',
+			size>3?((const char *)ptr)[3]:'.',
+			size>4?((const char *)ptr)[4]:'.',
+			size>5?((const char *)ptr)[5]:'.');
+		break;
+	}
+
+	ctx->phase = 4;	/* "Phase out" on hard failure */
+	RETURN(RC_FAIL);
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int ilevel, enum xer_encoder_flags_e flags,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+    int xcan = (flags & XER_F_CANONICAL);
+    asn_TYPE_descriptor_t *tmp_def_val_td = 0;
+    void *tmp_def_val = 0;
+    size_t edx;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    er.encoded = 0;
+
+    for(edx = 0; edx < td->elements_count; edx++) {
+        asn_enc_rval_t tmper = {0,0,0};
+        asn_TYPE_member_t *elm = &td->elements[edx];
+        const void *memb_ptr;
+        const char *mname = elm->name;
+        unsigned int mlen = strlen(mname);
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!memb_ptr) {
+                assert(tmp_def_val == 0);
+                if(elm->default_value_set) {
+                    if(elm->default_value_set(&tmp_def_val)) {
+                        ASN__ENCODE_FAILED;
+                    } else {
+                        memb_ptr = tmp_def_val;
+                        tmp_def_val_td = elm->type;
+                    }
+                } else if(elm->optional) {
+                    continue;
+                } else {
+                    /* Mandatory element is missing */
+                    ASN__ENCODE_FAILED;
+                }
+            }
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+
+        if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+        ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+        /* Print the member itself */
+        tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1,
+                                           flags, cb, app_key);
+        if(tmp_def_val) {
+            ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val);
+            tmp_def_val = 0;
+        }
+        if(tmper.encoded == -1) return tmper;
+        er.encoded += tmper.encoded;
+
+        ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+    }
+
+    if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+    ASN__ENCODED_OK(er);
+cb_failed:
+    if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val);
+    ASN__ENCODE_FAILED;
+}
+
+int
+SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t edx;
+	int ret;
+
+	if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	/* Dump preamble */
+	if(cb(td->name, strlen(td->name), app_key) < 0
+	|| cb(" ::= {", 6, app_key) < 0)
+		return -1;
+
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+			if(!memb_ptr) {
+				if(elm->optional) continue;
+				/* Print <absent> line */
+				/* Fall through */
+			}
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+		}
+
+		/* Indentation */
+		_i_INDENT(1);
+
+		/* Print the member's name and stuff */
+		if(cb(elm->name, strlen(elm->name), app_key) < 0
+		|| cb(": ", 2, app_key) < 0)
+			return -1;
+
+		/* Print the member itself */
+		ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1,
+			cb, app_key);
+		if(ret) return ret;
+	}
+
+	ilevel--;
+	_i_INDENT(1);
+
+	return (cb("}", 1, app_key) < 0) ? -1 : 0;
+}
+
+void
+SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr,
+              enum asn_struct_free_method method) {
+    size_t edx;
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    asn_struct_ctx_t *ctx; /* Decoder context */
+
+	if(!td || !sptr)
+		return;
+
+	ASN_DEBUG("Freeing %s as SEQUENCE", td->name);
+
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		void *memb_ptr;
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
+			if(memb_ptr)
+				ASN_STRUCT_FREE(*elm->type, memb_ptr);
+		} else {
+			memb_ptr = (void *)((char *)sptr + elm->memb_offset);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
+		}
+	}
+
+	/* Clean parsing context */
+	ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset);
+	FREEMEM(ctx->ptr);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(
+            sptr, 0,
+            ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size);
+        break;
+    }
+}
+
+int
+SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    size_t edx;
+
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	/*
+	 * Iterate over structure members and check their validity.
+	 */
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *memb_ptr;
+
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+			if(!memb_ptr) {
+				if(elm->optional)
+					continue;
+				ASN__CTFAIL(app_key, td, sptr,
+				"%s: mandatory element %s absent (%s:%d)",
+				td->name, elm->name, __FILE__, __LINE__);
+				return -1;
+			}
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+		}
+
+		if(elm->encoding_constraints.general_constraints) {
+			int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr,
+				ctfailcb, app_key);
+			if(ret) return ret;
+		} else {
+			return elm->type->encoding_constraints.general_constraints(elm->type,
+				memb_ptr, ctfailcb, app_key);
+		}
+	}
+
+	return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, void **sptr,
+                     asn_per_data_t *pd) {
+    const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+	void *st = *sptr;	/* Target structure. */
+	int extpresent;		/* Extension additions are present */
+	uint8_t *opres;		/* Presence of optional root members */
+	asn_per_data_t opmd;
+	asn_dec_rval_t rv;
+	size_t edx;
+
+	(void)constraints;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name);
+
+	/* Handle extensions */
+	if(specs->first_extension < 0) {
+		extpresent = 0;
+	} else {
+		extpresent = per_get_few_bits(pd, 1);
+		if(extpresent < 0) ASN__DECODE_STARVED;
+	}
+
+	/* Prepare a place and read-in the presence bitmap */
+	memset(&opmd, 0, sizeof(opmd));
+	if(specs->roms_count) {
+		opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1);
+		if(!opres) ASN__DECODE_FAILED;
+		/* Get the presence map */
+		if(per_get_many_bits(pd, opres, 0, specs->roms_count)) {
+			FREEMEM(opres);
+			ASN__DECODE_STARVED;
+		}
+		opmd.buffer = opres;
+		opmd.nbits = specs->roms_count;
+		ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)",
+			td->name, specs->roms_count, *opres);
+	} else {
+		opres = 0;
+	}
+
+	/*
+	 * Get the sequence ROOT elements.
+	 */
+    for(edx = 0;
+        edx < (specs->first_extension < 0 ? td->elements_count
+                                          : (size_t)specs->first_extension);
+        edx++) {
+        asn_TYPE_member_t *elm = &td->elements[edx];
+		void *memb_ptr;		/* Pointer to the member */
+		void **memb_ptr2;	/* Pointer to that pointer */
+
+		assert(!IN_EXTENSION_GROUP(specs, edx));
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+		} else {
+			memb_ptr = (char *)st + elm->memb_offset;
+			memb_ptr2 = &memb_ptr;
+		}
+
+		/* Deal with optionality */
+		if(elm->optional) {
+			int present = per_get_few_bits(&opmd, 1);
+			ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)",
+				td->name, elm->name, present,
+				(int)opmd.nboff, (int)opmd.nbits);
+			if(present == 0) {
+				/* This element is not present */
+				if(elm->default_value_set) {
+					/* Fill-in DEFAULT */
+					if(elm->default_value_set(memb_ptr2)) {
+						FREEMEM(opres);
+						ASN__DECODE_FAILED;
+					}
+					ASN_DEBUG("Filled-in default");
+				}
+				/* The member is just not present */
+				continue;
+			}
+			/* Fall through */
+		}
+
+		/* Fetch the member from the stream */
+		ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name);
+
+		if(elm->flags & ATF_OPEN_TYPE) {
+			rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd);
+		} else {
+			rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+					elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+		}
+		if(rv.code != RC_OK) {
+			ASN_DEBUG("Failed decode %s in %s",
+				elm->name, td->name);
+			FREEMEM(opres);
+			return rv;
+		}
+	}
+
+	/* Optionality map is not needed anymore */
+	FREEMEM(opres);
+
+	/*
+	 * Deal with extensions.
+	 */
+	if(extpresent) {
+		ssize_t bmlength;
+		uint8_t *epres;		/* Presence of extension members */
+		asn_per_data_t epmd;
+
+		bmlength = uper_get_nslength(pd);
+		if(bmlength < 0) ASN__DECODE_STARVED;
+
+		ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name);
+
+		epres = (uint8_t *)MALLOC((bmlength + 15) >> 3);
+		if(!epres) ASN__DECODE_STARVED;
+
+		/* Get the extensions map */
+		if(per_get_many_bits(pd, epres, 0, bmlength)) {
+			FREEMEM(epres);
+			ASN__DECODE_STARVED;
+		}
+
+		memset(&epmd, 0, sizeof(epmd));
+		epmd.buffer = epres;
+		epmd.nbits = bmlength;
+		ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)",
+			td->name, (long)bmlength, *epres);
+
+	    /* Go over extensions and read them in */
+        for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+            asn_TYPE_member_t *elm = &td->elements[edx];
+            void *memb_ptr;   /* Pointer to the member */
+            void **memb_ptr2; /* Pointer to that pointer */
+            int present;
+
+            /* Fetch the pointer to this member */
+            if(elm->flags & ATF_POINTER) {
+                memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+            } else {
+                memb_ptr = (void *)((char *)st + elm->memb_offset);
+                memb_ptr2 = &memb_ptr;
+            }
+
+            present = per_get_few_bits(&epmd, 1);
+            if(present <= 0) {
+                if(present < 0) break; /* No more extensions */
+                continue;
+            }
+
+            ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name,
+                      *memb_ptr2);
+            rv = uper_open_type_get(opt_codec_ctx, elm->type,
+                                    elm->encoding_constraints.per_constraints,
+                                    memb_ptr2, pd);
+            if(rv.code != RC_OK) {
+                FREEMEM(epres);
+                return rv;
+            }
+	    }
+
+		/* Skip over overflow extensions which aren't present
+		 * in this system's version of the protocol */
+		for(;;) {
+			ASN_DEBUG("Getting overflow extensions");
+			switch(per_get_few_bits(&epmd, 1)) {
+			case -1: break;
+			case 0: continue;
+			default:
+				if(uper_open_type_skip(opt_codec_ctx, pd)) {
+					FREEMEM(epres);
+					ASN__DECODE_STARVED;
+				}
+                ASN_DEBUG("Skipped overflow extension");
+                continue;
+			}
+			break;
+		}
+
+		FREEMEM(epres);
+	}
+
+    if(specs->first_extension >= 0) {
+        unsigned i;
+        /* Fill DEFAULT members in extensions */
+        for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count;
+            i++) {
+            asn_TYPE_member_t *elm;
+            void **memb_ptr2; /* Pointer to member pointer */
+
+            edx = specs->oms[i];
+            elm = &td->elements[edx];
+
+            if(!elm->default_value_set) continue;
+
+            /* Fetch the pointer to this member */
+            if(elm->flags & ATF_POINTER) {
+                memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+                if(*memb_ptr2) continue;
+            } else {
+                continue; /* Extensions are all optionals */
+            }
+
+            /* Set default value */
+            if(elm->default_value_set(memb_ptr2)) {
+                ASN__DECODE_FAILED;
+            }
+        }
+    }
+
+	rv.consumed = 0;
+	rv.code = RC_OK;
+	return rv;
+}
+
+static int
+SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr,
+                            asn_per_outp_t *po1, asn_per_outp_t *po2) {
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    int exts_present = 0;
+    int exts_count = 0;
+    size_t edx;
+
+    if(specs->first_extension < 0) {
+        return 0;
+    }
+
+    /* Find out which extensions are present */
+    for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+        asn_TYPE_member_t *elm = &td->elements[edx];
+        const void *memb_ptr;         /* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+        int present;
+
+        /* Fetch the pointer to this member */
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            present = (*memb_ptr2 != 0);
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+			present = 1;
+		}
+
+        ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name,
+                  elm->type->name, edx, present);
+        exts_count++;
+        exts_present += present;
+
+        /* Encode as presence marker */
+        if(po1 && per_put_few_bits(po1, present, 1)) {
+            return -1;
+        }
+        /* Encode as open type field */
+        if(po2 && present
+           && uper_open_type_put(elm->type,
+                                 elm->encoding_constraints.per_constraints,
+                                 *memb_ptr2, po2))
+            return -1;
+    }
+
+    return exts_present ? exts_count : 0;
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, const void *sptr,
+                     asn_per_outp_t *po) {
+    const asn_SEQUENCE_specifics_t *specs
+		= (const asn_SEQUENCE_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	int n_extensions;
+	size_t edx;
+	size_t i;
+
+	(void)constraints;
+
+	if(!sptr)
+		ASN__ENCODE_FAILED;
+
+	er.encoded = 0;
+
+	ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name);
+
+	/*
+	 * X.691#18.1 Whether structure is extensible
+	 * and whether to encode extensions
+	 */
+    if(specs->first_extension < 0) {
+        n_extensions = 0; /* There are no extensions to encode */
+    } else {
+        n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0);
+        if(n_extensions < 0) ASN__ENCODE_FAILED;
+        if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) {
+            ASN__ENCODE_FAILED;
+        }
+    }
+
+	/* Encode a presence bitmap */
+	for(i = 0; i < specs->roms_count; i++) {
+		asn_TYPE_member_t *elm;
+		const void *memb_ptr;		/* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+        int present;
+
+		edx = specs->oms[i];
+		elm = &td->elements[edx];
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            present = (*memb_ptr2 != 0);
+		} else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+			present = 1;
+		}
+
+		/* Eliminate default values */
+        if(present && elm->default_value_cmp
+           && elm->default_value_cmp(*memb_ptr2) == 0)
+            present = 0;
+
+		ASN_DEBUG("Element %s %s %s->%s is %s",
+			elm->flags & ATF_POINTER ? "ptr" : "inline",
+			elm->default_value_cmp ? "def" : "wtv",
+			td->name, elm->name, present ? "present" : "absent");
+		if(per_put_few_bits(po, present, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+	/*
+	 * Encode the sequence ROOT elements.
+	 */
+    ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension,
+              td->elements_count);
+	for(edx = 0;
+		edx < ((specs->first_extension < 0) ? td->elements_count
+                                            : (size_t)specs->first_extension);
+		edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *memb_ptr;         /* Pointer to the member */
+		const void *const *memb_ptr2; /* Pointer to that pointer */
+
+		ASN_DEBUG("About to encode %s", elm->type->name);
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) {
+				ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present",
+					elm->name, edx);
+				if(elm->optional)
+					continue;
+				/* Mandatory element is missing */
+				ASN__ENCODE_FAILED;
+			}
+		} else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+		}
+
+		/* Eliminate default values */
+		if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+			continue;
+
+        ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name);
+        er = elm->type->op->uper_encoder(
+            elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2,
+            po);
+        if(er.encoded == -1) return er;
+    }
+
+	/* No extensions to encode */
+	if(!n_extensions) ASN__ENCODED_OK(er);
+
+	ASN_DEBUG("Length of extensions %d bit-map", n_extensions);
+	/* #18.8. Write down the presence bit-map length. */
+	if(uper_put_nslength(po, n_extensions))
+		ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Bit-map of %d elements", n_extensions);
+	/* #18.7. Encoding the extensions presence bit-map. */
+	/* TODO: act upon NOTE in #18.7 for canonical PER */
+	if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions)
+		ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Writing %d extensions", n_extensions);
+	/* #18.9. Encode extensions as open type fields. */
+	if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions)
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+	void *st = *sptr;	/* Target structure. */
+	int extpresent;		/* Extension additions are present */
+	uint8_t *opres;		/* Presence of optional root members */
+	asn_per_data_t opmd;
+	asn_dec_rval_t rv;
+	size_t edx;
+
+	(void)constraints;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}
+
+	ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name);
+
+	/* Handle extensions */
+	if(specs->first_extension < 0) {
+		extpresent = 0;
+	} else {
+		extpresent = per_get_few_bits(pd, 1);
+		if(extpresent < 0) ASN__DECODE_STARVED;
+	}
+
+	/* Prepare a place and read-in the presence bitmap */
+	memset(&opmd, 0, sizeof(opmd));
+	if(specs->roms_count) {
+		opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1);
+		if(!opres) ASN__DECODE_FAILED;
+		/* Get the presence map */
+		if(per_get_many_bits(pd, opres, 0, specs->roms_count)) {
+			FREEMEM(opres);
+			ASN__DECODE_STARVED;
+		}
+		opmd.buffer = opres;
+		opmd.nbits = specs->roms_count;
+		ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)",
+		          td->name, specs->roms_count, *opres);
+	} else {
+		opres = 0;
+	}
+
+	/*
+	 * Get the sequence ROOT elements.
+	 */
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		void *memb_ptr;		/* Pointer to the member */
+		void **memb_ptr2;	/* Pointer to that pointer */
+#if 0
+		int padding;
+#endif
+
+		if(IN_EXTENSION_GROUP(specs, edx))
+			continue;
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+		} else {
+			memb_ptr = (char *)st + elm->memb_offset;
+			memb_ptr2 = &memb_ptr;
+		}
+#if 0
+		/* Get Padding */
+		padding = (8 - (pd->moved % 8)) % 8;
+		if(padding > 0)
+			ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding);
+#if 0 /* old way of removing padding */
+		per_get_few_bits(pd, padding);
+#else /* Experimental fix proposed by @mhanna123 */
+		if(edx != (td->elements_count-1))
+			per_get_few_bits(pd, padding);
+		else {
+			if(specs->roms_count && (padding > 0))
+				ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count);
+			else
+				per_get_few_bits(pd, padding);
+		}
+#endif /* dealing with padding */
+#endif
+		/* Deal with optionality */
+		if(elm->optional) {
+			int present = per_get_few_bits(&opmd, 1);
+			ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)",
+			          td->name, elm->name, present,
+			          (int)opmd.nboff, (int)opmd.nbits);
+			if(present == 0) {
+				/* This element is not present */
+				if(elm->default_value_set) {
+					/* Fill-in DEFAULT */
+					if(elm->default_value_set(memb_ptr2)) {
+						FREEMEM(opres);
+						ASN__DECODE_FAILED;
+					}
+					ASN_DEBUG("Filled-in default");
+				}
+				/* The member is just not present */
+				continue;
+			}
+			/* Fall through */
+		}
+
+		/* Fetch the member from the stream */
+		ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name);
+
+		if(elm->flags & ATF_OPEN_TYPE) {
+			rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd);
+		} else {
+			rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+					elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+		}
+		if(rv.code != RC_OK) {
+			ASN_DEBUG("Failed decode %s in %s",
+			          elm->name, td->name);
+			FREEMEM(opres);
+			return rv;
+		}
+	}
+
+	/* Optionality map is not needed anymore */
+	FREEMEM(opres);
+
+	/*
+	 * Deal with extensions.
+	 */
+	if(extpresent) {
+		ssize_t bmlength;
+		uint8_t *epres;		/* Presence of extension members */
+		asn_per_data_t epmd;
+
+		bmlength = aper_get_nslength(pd);
+		if(bmlength < 0) ASN__DECODE_STARVED;
+
+		ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name);
+
+		epres = (uint8_t *)MALLOC((bmlength + 15) >> 3);
+		if(!epres) ASN__DECODE_STARVED;
+
+		/* Get the extensions map */
+		if(per_get_many_bits(pd, epres, 0, bmlength))
+			ASN__DECODE_STARVED;
+
+		memset(&epmd, 0, sizeof(epmd));
+		epmd.buffer = epres;
+		epmd.nbits = bmlength;
+		ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)",
+		          td->name, bmlength, *epres);
+
+		/* Go over extensions and read them in */
+		for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+			asn_TYPE_member_t *elm = &td->elements[edx];
+			void *memb_ptr;		/* Pointer to the member */
+			void **memb_ptr2;	/* Pointer to that pointer */
+			int present;
+
+			if(!IN_EXTENSION_GROUP(specs, edx)) {
+				ASN_DEBUG("%ld is not extension", edx);
+				continue;
+			}
+
+			/* Fetch the pointer to this member */
+			if(elm->flags & ATF_POINTER) {
+				memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+			} else {
+				memb_ptr = (void *)((char *)st + elm->memb_offset);
+				memb_ptr2 = &memb_ptr;
+			}
+
+			present = per_get_few_bits(&epmd, 1);
+			if(present <= 0) {
+				if(present < 0) break;	/* No more extensions */
+				continue;
+			}
+
+			ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2);
+			rv = aper_open_type_get(opt_codec_ctx, elm->type,
+			                        elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+			if(rv.code != RC_OK) {
+				FREEMEM(epres);
+				return rv;
+			}
+		}
+
+		/* Skip over overflow extensions which aren't present
+		 * in this system's version of the protocol */
+		for(;;) {
+			ASN_DEBUG("Getting overflow extensions");
+			switch(per_get_few_bits(&epmd, 1)) {
+			case -1:
+				break;
+			case 0:
+				continue;
+			default:
+				if(aper_open_type_skip(opt_codec_ctx, pd)) {
+					FREEMEM(epres);
+					ASN__DECODE_STARVED;
+				}
+			}
+			break;
+		}
+
+		FREEMEM(epres);
+	}
+
+	/* Fill DEFAULT members in extensions */
+	for(edx = specs->roms_count; edx < specs->roms_count
+	        + specs->aoms_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		void **memb_ptr2;	/* Pointer to member pointer */
+
+		if(!elm->default_value_set) continue;
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (void **)((char *)st
+			                      + elm->memb_offset);
+			if(*memb_ptr2) continue;
+		} else {
+			continue;	/* Extensions are all optionals */
+		}
+
+		/* Set default value */
+		if(elm->default_value_set(memb_ptr2)) {
+			ASN__DECODE_FAILED;
+		}
+	}
+
+	rv.consumed = 0;
+	rv.code = RC_OK;
+	return rv;
+}
+
+static int
+SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td,
+                                const void *sptr,
+                                asn_per_outp_t *po1, asn_per_outp_t *po2) {
+	const asn_SEQUENCE_specifics_t *specs
+	    = (const asn_SEQUENCE_specifics_t *)td->specifics;
+	int exts_present = 0;
+	int exts_count = 0;
+	size_t edx;
+
+	if(specs->first_extension < 0) {
+		return 0;
+	}
+
+	/* Find out which extensions are present */
+	for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *memb_ptr;           /* Pointer to the member */
+		const void * const *memb_ptr2;  /* Pointer to that pointer */
+		int present;
+
+		if(!IN_EXTENSION_GROUP(specs, edx)) {
+			ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx);
+			continue;
+		}
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+			present = (*memb_ptr2 != 0);
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+			memb_ptr2 = &memb_ptr;
+			present = 1;
+		}
+
+		ASN_DEBUG("checking %s (@%ld) present => %d",
+		          elm->type->name, edx, present);
+		exts_count++;
+		exts_present += present;
+
+		/* Encode as presence marker */
+		if(po1 && per_put_few_bits(po1, present, 1))
+			return -1;
+		/* Encode as open type field */
+		if(po2 && present && aper_open_type_put(elm->type,
+		                                        elm->encoding_constraints.per_constraints, *memb_ptr2, po2))
+			return -1;
+
+	}
+
+	return exts_present ? exts_count : 0;
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints,
+                     const void *sptr, asn_per_outp_t *po) {
+	const asn_SEQUENCE_specifics_t *specs
+	    = (const asn_SEQUENCE_specifics_t *)td->specifics;
+	asn_enc_rval_t er = {0,0,0};
+	int n_extensions;
+	size_t edx;
+	size_t i;
+
+	(void)constraints;
+
+	if(!sptr)
+		ASN__ENCODE_FAILED;
+
+	er.encoded = 0;
+
+	ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name);
+
+	/*
+	 * X.691#18.1 Whether structure is extensible
+	 * and whether to encode extensions
+	 */
+	if(specs->first_extension < 0) {
+		n_extensions = 0; /* There are no extensions to encode */
+	} else {
+		n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0);
+		if(n_extensions < 0) ASN__ENCODE_FAILED;
+		if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) {
+			ASN__ENCODE_FAILED;
+		}
+	}
+
+	/* Encode a presence bitmap */
+	for(i = 0; i < specs->roms_count; i++) {
+		asn_TYPE_member_t *elm;
+		const void *memb_ptr;	 /* Pointer to the member */
+		const void * const *memb_ptr2;       /* Pointer to that pointer */
+		int present;
+
+		edx = specs->oms[i];
+		elm = &td->elements[edx];
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+			present = (*memb_ptr2 != 0);
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+			memb_ptr2 = &memb_ptr;
+			present = 1;
+		}
+
+		/* Eliminate default values */
+		if(present && elm->default_value_cmp
+		        && elm->default_value_cmp(memb_ptr2) == 1)
+			present = 0;
+
+		ASN_DEBUG("Element %s %s %s->%s is %s",
+		          elm->flags & ATF_POINTER ? "ptr" : "inline",
+		          elm->default_value_cmp ? "def" : "wtv",
+		          td->name, elm->name, present ? "present" : "absent");
+		if(per_put_few_bits(po, present, 1))
+			ASN__ENCODE_FAILED;
+	}
+
+	/*
+	 * Encode the sequence ROOT elements.
+	 */
+	ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension,
+              td->elements_count);
+	for(edx = 0;
+		edx < ((specs->first_extension < 0) ? td->elements_count
+                                            : (size_t)specs->first_extension);
+		edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *memb_ptr;          /* Pointer to the member */
+		const void * const *memb_ptr2; /* Pointer to that pointer */
+
+		if(IN_EXTENSION_GROUP(specs, edx))
+			continue;
+
+		ASN_DEBUG("About to encode %s", elm->type->name);
+
+		/* Fetch the pointer to this member */
+		if(elm->flags & ATF_POINTER) {
+			memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+			if(!*memb_ptr2) {
+				ASN_DEBUG("Element %s %ld not present",
+				          elm->name, edx);
+				if(elm->optional)
+					continue;
+				/* Mandatory element is missing */
+				ASN__ENCODE_FAILED;
+			}
+		} else {
+			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+			memb_ptr2 = &memb_ptr;
+		}
+
+		/* Eliminate default values */
+		if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1)
+			continue;
+
+		ASN_DEBUG("Encoding %s->%s", td->name, elm->name);
+		er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints,
+		                                 *memb_ptr2, po);
+		if(er.encoded == -1)
+			return er;
+	}
+
+	/* No extensions to encode */
+	if(!n_extensions) ASN__ENCODED_OK(er);
+
+	ASN_DEBUG("Length of %d bit-map", n_extensions);
+	/* #18.8. Write down the presence bit-map length. */
+	if(aper_put_nslength(po, n_extensions))
+		ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Bit-map of %d elements", n_extensions);
+	/* #18.7. Encoding the extensions presence bit-map. */
+	/* TODO: act upon NOTE in #18.7 for canonical PER */
+	if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions)
+		ASN__ENCODE_FAILED;
+
+	ASN_DEBUG("Writing %d extensions", n_extensions);
+	/* #18.9. Encode extensions as open type fields. */
+	if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions)
+		ASN__ENCODE_FAILED;
+
+	ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                 const void *bptr) {
+    size_t edx;
+
+	for(edx = 0; edx < td->elements_count; edx++) {
+		asn_TYPE_member_t *elm = &td->elements[edx];
+		const void *amemb;
+		const void *bmemb;
+        int ret;
+
+		if(elm->flags & ATF_POINTER) {
+            amemb =
+                *(const void *const *)((const char *)aptr + elm->memb_offset);
+            bmemb =
+                *(const void *const *)((const char *)bptr + elm->memb_offset);
+            if(!amemb) {
+                if(!bmemb) continue;
+                if(elm->default_value_cmp
+                   && elm->default_value_cmp(bmemb) == 0) {
+                    /* A is absent, but B is present and equal to DEFAULT */
+                    continue;
+                }
+                return -1;
+            } else if(!bmemb) {
+                if(elm->default_value_cmp
+                   && elm->default_value_cmp(amemb) == 0) {
+                    /* B is absent, but A is present and equal to DEFAULT */
+                    continue;
+                }
+                return 1;
+            }
+		} else {
+            amemb = (const void *)((const char *)aptr + elm->memb_offset);
+            bmemb = (const void *)((const char *)bptr + elm->memb_offset);
+		}
+
+        ret = elm->type->op->compare_struct(elm->type, amemb, bmemb);
+        if(ret != 0) return ret;
+    }
+
+    return 0;
+}
+
+asn_TYPE_operation_t asn_OP_SEQUENCE = {
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_compare,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	SEQUENCE_decode_oer,
+	SEQUENCE_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+	SEQUENCE_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+
+
+asn_random_fill_result_t
+SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constr,
+                   size_t max_length) {
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    void *st = *sptr;
+    size_t edx;
+
+    if(max_length == 0) return result_skipped;
+
+    (void)constr;
+
+    if(st == NULL) {
+        st = CALLOC(1, specs->struct_size);
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    for(edx = 0; edx < td->elements_count; edx++) {
+        const asn_TYPE_member_t *elm = &td->elements[edx];
+        void *memb_ptr;   /* Pointer to the member */
+        void **memb_ptr2; /* Pointer to that pointer */
+        asn_random_fill_result_t tmpres;
+
+        if(elm->optional && asn_random_between(0, 4) == 2) {
+            /* Sometimes decide not to fill the optional value */
+            continue;
+        }
+
+        if(elm->flags & ATF_POINTER) {
+            /* Member is a pointer to another structure */
+            memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+        } else {
+            memb_ptr = (char *)st + elm->memb_offset;
+            memb_ptr2 = &memb_ptr;
+        }
+
+        tmpres = elm->type->op->random_fill(
+            elm->type, memb_ptr2, &elm->encoding_constraints,
+            max_length > result_ok.length ? max_length - result_ok.length : 0);
+        switch(tmpres.code) {
+        case ARFILL_OK:
+            result_ok.length += tmpres.length;
+            continue;
+        case ARFILL_SKIPPED:
+            assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL);
+            continue;
+        case ARFILL_FAILED:
+            if(st == *sptr) {
+                ASN_STRUCT_RESET(*td, st);
+            } else {
+                ASN_STRUCT_FREE(*td, st);
+            }
+            return tmpres;
+        }
+    }
+
+    *sptr = st;
+
+    return result_ok;
+}
+
diff --git a/asn1c_defs/constr_SEQUENCE.h b/asn1c_defs/constr_SEQUENCE.h
new file mode 100644
index 0000000..a22ed3a
--- /dev/null
+++ b/asn1c_defs/constr_SEQUENCE.h
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_CONSTR_SEQUENCE_H_
+#define	_CONSTR_SEQUENCE_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SEQUENCE_specifics_s {
+	/*
+	 * Target structure description.
+	 */
+	unsigned struct_size;	/* Size of the target structure. */
+	unsigned ctx_offset;	/* Offset of the asn_struct_ctx_t member */
+
+	/*
+	 * Tags to members mapping table (sorted).
+	 */
+	const asn_TYPE_tag2member_t *tag2el;
+	unsigned tag2el_count;
+
+	/*
+	 * Optional members of the extensions root (roms) or additions (aoms).
+	 * Meaningful for PER.
+	 */
+	const int *oms;         /* Optional MemberS */
+	unsigned roms_count;    /* Root optional members count */
+	unsigned aoms_count;    /* Additions optional members count */
+
+	/*
+	 * Description of an extensions group.
+	 * Root components are clustered at the beginning of the structure,
+	 * whereas extensions are clustered at the end. -1 means not extensible.
+	 */
+	signed first_extension;       /* First extension addition */
+} asn_SEQUENCE_specifics_t;
+
+
+/*
+ * A set specialized functions dealing with the SEQUENCE type.
+ */
+asn_struct_free_f SEQUENCE_free;
+asn_struct_print_f SEQUENCE_print;
+asn_struct_compare_f SEQUENCE_compare;
+asn_constr_check_f SEQUENCE_constraint;
+ber_type_decoder_f SEQUENCE_decode_ber;
+der_type_encoder_f SEQUENCE_encode_der;
+xer_type_decoder_f SEQUENCE_decode_xer;
+xer_type_encoder_f SEQUENCE_encode_xer;
+oer_type_decoder_f SEQUENCE_decode_oer;
+oer_type_encoder_f SEQUENCE_encode_oer;
+per_type_decoder_f SEQUENCE_decode_uper;
+per_type_encoder_f SEQUENCE_encode_uper;
+per_type_decoder_f SEQUENCE_decode_aper;
+per_type_encoder_f SEQUENCE_encode_aper;
+asn_random_fill_f  SEQUENCE_random_fill;
+extern asn_TYPE_operation_t asn_OP_SEQUENCE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _CONSTR_SEQUENCE_H_ */
diff --git a/asn1c_defs/constr_SEQUENCE_OF.c b/asn1c_defs/constr_SEQUENCE_OF.c
new file mode 100644
index 0000000..10f18cf
--- /dev/null
+++ b/asn1c_defs/constr_SEQUENCE_OF.c
@@ -0,0 +1,358 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SEQUENCE_OF.h>
+#include <asn_SEQUENCE_OF.h>
+
+/*
+ * The DER encoder of the SEQUENCE OF type.
+ */
+asn_enc_rval_t
+SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr,
+                       int tag_mode, ber_tlv_tag_t tag,
+                       asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_TYPE_member_t *elm = td->elements;
+	const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr);
+	size_t computed_size = 0;
+	ssize_t encoding_size = 0;
+	asn_enc_rval_t erval = {0,0,0};
+	int edx;
+
+	ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name);
+
+	/*
+	 * Gather the length of the underlying members sequence.
+	 */
+	for(edx = 0; edx < list->count; edx++) {
+		void *memb_ptr = list->array[edx];
+		if(!memb_ptr) continue;
+		erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+			0, elm->tag,
+			0, 0);
+		if(erval.encoded == -1)
+			return erval;
+		computed_size += erval.encoded;
+	}
+
+	/*
+	 * Encode the TLV for the sequence itself.
+	 */
+	encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag,
+		cb, app_key);
+	if(encoding_size == -1) {
+		erval.encoded = -1;
+		erval.failed_type = td;
+		erval.structure_ptr = ptr;
+		return erval;
+	}
+
+	computed_size += encoding_size;
+	if(!cb) {
+		erval.encoded = computed_size;
+		ASN__ENCODED_OK(erval);
+	}
+
+	ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name);
+
+	/*
+	 * Encode all members.
+	 */
+	for(edx = 0; edx < list->count; edx++) {
+		void *memb_ptr = list->array[edx];
+		if(!memb_ptr) continue;
+		erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+			0, elm->tag,
+			cb, app_key);
+		if(erval.encoded == -1)
+			return erval;
+		encoding_size += erval.encoded;
+	}
+
+	if(computed_size != (size_t)encoding_size) {
+		/*
+		 * Encoded size is not equal to the computed size.
+		 */
+		erval.encoded = -1;
+		erval.failed_type = td;
+		erval.structure_ptr = ptr;
+	} else {
+		erval.encoded = computed_size;
+		erval.structure_ptr = 0;
+		erval.failed_type = 0;
+	}
+
+	return erval;
+}
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       int ilevel, enum xer_encoder_flags_e flags,
+                       asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+    const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr);
+    const char *mname = specs->as_XMLValueList
+                            ? 0
+                            : ((*elm->name) ? elm->name : elm->type->xml_tag);
+    size_t mlen = mname ? strlen(mname) : 0;
+    int xcan = (flags & XER_F_CANONICAL);
+    int i;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    er.encoded = 0;
+
+    for(i = 0; i < list->count; i++) {
+        asn_enc_rval_t tmper = {0,0,0};
+        void *memb_ptr = list->array[i];
+        if(!memb_ptr) continue;
+
+        if(mname) {
+            if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+            ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+        }
+
+        tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1,
+                                           flags, cb, app_key);
+        if(tmper.encoded == -1) return tmper;
+        er.encoded += tmper.encoded;
+        if(tmper.encoded == 0 && specs->as_XMLValueList) {
+            const char *name = elm->type->xml_tag;
+            size_t len = strlen(name);
+            if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1);
+            ASN__CALLBACK3("<", 1, name, len, "/>", 2);
+        }
+
+        if(mname) {
+            ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+        }
+    }
+
+    if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+    ASN__ENCODED_OK(er);
+cb_failed:
+    ASN__ENCODE_FAILED;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td,
+                        const asn_per_constraints_t *constraints,
+                        const void *sptr, asn_per_outp_t *po) {
+    const asn_anonymous_sequence_ *list;
+	const asn_per_constraint_t *ct;
+	asn_enc_rval_t er = {0,0,0};
+	const asn_TYPE_member_t *elm = td->elements;
+	size_t encoded_edx;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+    list = _A_CSEQUENCE_FROM_VOID(sptr);
+
+    er.encoded = 0;
+
+	ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count);
+
+    if(constraints) ct = &constraints->size;
+    else if(td->encoding_constraints.per_constraints)
+        ct = &td->encoding_constraints.per_constraints->size;
+    else ct = 0;
+
+    /* If extensible constraint, check if size is in root */
+    if(ct) {
+        int not_in_root =
+            (list->count < ct->lower_bound || list->count > ct->upper_bound);
+        ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound,
+                  ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+        if(ct->flags & APC_EXTENSIBLE) {
+            /* Declare whether size is in extension root */
+            if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED;
+            if(not_in_root) ct = 0;
+        } else if(not_in_root && ct->effective_bits >= 0) {
+            ASN__ENCODE_FAILED;
+        }
+
+    }
+
+    if(ct && ct->effective_bits >= 0) {
+        /* X.691, #19.5: No length determinant */
+        if(per_put_few_bits(po, list->count - ct->lower_bound,
+                            ct->effective_bits))
+            ASN__ENCODE_FAILED;
+    } else if(list->count == 0) {
+        /* When the list is empty add only the length determinant
+         * X.691, #20.6 and #11.9.4.1
+         */
+        if (uper_put_length(po, 0, 0)) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+    for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) {
+        ssize_t may_encode;
+        size_t edx;
+        int need_eom = 0;
+
+        if(ct && ct->effective_bits >= 0) {
+            may_encode = list->count;
+        } else {
+            may_encode =
+                uper_put_length(po, list->count - encoded_edx, &need_eom);
+            if(may_encode < 0) ASN__ENCODE_FAILED;
+        }
+
+        for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) {
+            void *memb_ptr = list->array[edx];
+            if(!memb_ptr) ASN__ENCODE_FAILED;
+            er = elm->type->op->uper_encoder(
+                elm->type, elm->encoding_constraints.per_constraints, memb_ptr,
+                po);
+            if(er.encoded == -1) ASN__ENCODE_FAILED;
+        }
+
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+
+        encoded_edx += may_encode;
+    }
+
+	ASN__ENCODED_OK(er);
+}
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td,
+                        const asn_per_constraints_t *constraints,
+                        const void *sptr, asn_per_outp_t *po) {
+	const asn_anonymous_sequence_ *list;
+	const asn_per_constraint_t *ct;
+	asn_enc_rval_t er = {0,0,0};
+	asn_TYPE_member_t *elm = td->elements;
+	int seq;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+	list = _A_CSEQUENCE_FROM_VOID(sptr);
+
+	er.encoded = 0;
+
+	ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count);
+
+	if(constraints) ct = &constraints->size;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->size;
+	else ct = 0;
+
+	/* If extensible constraint, check if size is in root */
+	if(ct) {
+		int not_in_root = (list->count < ct->lower_bound
+				|| list->count > ct->upper_bound);
+		ASN_DEBUG("lb %ld ub %ld %s",
+			ct->lower_bound, ct->upper_bound,
+			ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+		if(ct->flags & APC_EXTENSIBLE) {
+			/* Declare whether size is in extension root */
+			if(per_put_few_bits(po, not_in_root, 1))
+				ASN__ENCODE_FAILED;
+			if(not_in_root) ct = 0;
+		} else if(not_in_root && ct->effective_bits >= 0)
+			ASN__ENCODE_FAILED;
+	}
+
+	if(ct && ct->effective_bits >= 0) {
+		/* X.691, #19.5: No length determinant */
+/*		 if(per_put_few_bits(po, list->count - ct->lower_bound,
+				 ct->effective_bits))
+			 ASN__ENCODE_FAILED;
+*/
+		if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0)
+			ASN__ENCODE_FAILED;
+	}
+
+	for(seq = -1; seq < list->count;) {
+		ssize_t mayEncode;
+		if(seq < 0) seq = 0;
+		if(ct && ct->effective_bits >= 0) {
+			mayEncode = list->count;
+		} else {
+			mayEncode = aper_put_length(po, -1, list->count - seq);
+			if(mayEncode < 0) ASN__ENCODE_FAILED;
+		}
+
+		while(mayEncode--) {
+			void *memb_ptr = list->array[seq++];
+			if(!memb_ptr) ASN__ENCODE_FAILED;
+			er = elm->type->op->aper_encoder(elm->type,
+				elm->encoding_constraints.per_constraints, memb_ptr, po);
+			if(er.encoded == -1)
+				ASN__ENCODE_FAILED;
+		}
+	}
+
+	ASN__ENCODED_OK(er);
+}
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+               const void *bptr) {
+    const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr);
+    const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr);
+    ssize_t idx;
+
+    if(a && b) {
+        ssize_t common_length = (a->count < b->count ? a->count : b->count);
+        for(idx = 0; idx < common_length; idx++) {
+            int ret = td->elements->type->op->compare_struct(
+                td->elements->type, a->array[idx], b->array[idx]);
+            if(ret) return ret;
+        }
+
+        if(idx < b->count) /* more elements in b */
+            return -1;    /* a is shorter, so put it first */
+        if(idx < a->count) return 1;
+
+    } else if(!a) {
+        return -1;
+    } else if(!b) {
+        return 1;
+    }
+
+    return 0;
+}
+
+
+asn_TYPE_operation_t asn_OP_SEQUENCE_OF = {
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_compare,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+#ifdef	ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */
+	SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+	SEQUENCE_OF_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+
diff --git a/asn1c_defs/constr_SEQUENCE_OF.h b/asn1c_defs/constr_SEQUENCE_OF.h
new file mode 100644
index 0000000..6857f0f
--- /dev/null
+++ b/asn1c_defs/constr_SEQUENCE_OF.h
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_CONSTR_SEQUENCE_OF_H_
+#define	_CONSTR_SEQUENCE_OF_H_
+
+#include <asn_application.h>
+#include <constr_SET_OF.h>		/* Implemented using SET OF */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A set specialized functions dealing with the SEQUENCE OF type.
+ * Generally implemented using SET OF.
+ */
+asn_struct_compare_f SEQUENCE_OF_compare;
+der_type_encoder_f SEQUENCE_OF_encode_der;
+xer_type_encoder_f SEQUENCE_OF_encode_xer;
+per_type_encoder_f SEQUENCE_OF_encode_uper;
+per_type_encoder_f SEQUENCE_OF_encode_aper;
+extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF;
+
+#define	SEQUENCE_OF_free	SET_OF_free
+#define	SEQUENCE_OF_print	SET_OF_print
+#define	SEQUENCE_OF_constraint	SET_OF_constraint
+#define	SEQUENCE_OF_decode_ber	SET_OF_decode_ber
+#define	SEQUENCE_OF_decode_xer	SET_OF_decode_xer
+#define	SEQUENCE_OF_decode_oer  SET_OF_decode_oer
+#define	SEQUENCE_OF_encode_oer  SET_OF_encode_oer
+#define	SEQUENCE_OF_decode_uper	SET_OF_decode_uper
+#define	SEQUENCE_OF_decode_aper	SET_OF_decode_aper
+#define	SEQUENCE_OF_random_fill SET_OF_random_fill
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _CONSTR_SET_OF_H_ */
diff --git a/asn1c_defs/constr_SET_OF.c b/asn1c_defs/constr_SET_OF.c
new file mode 100644
index 0000000..bf1dc27
--- /dev/null
+++ b/asn1c_defs/constr_SET_OF.c
@@ -0,0 +1,1441 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SET_OF.h>
+#include <asn_SET_OF.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define	LEFT	((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define	SIZE_VIOLATION	(ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {		\
+		size_t num = num_bytes;		\
+		ptr = ((const char *)ptr) + num;\
+		size -= num;			\
+		if(ctx->left >= 0)		\
+			ctx->left -= num;	\
+		consumed_myself += num;		\
+	} while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef	NEXT_PHASE
+#undef	PHASE_OUT
+#define	NEXT_PHASE(ctx)	do {			\
+		ctx->phase++;			\
+		ctx->step = 0;			\
+	} while(0)
+#define	PHASE_OUT(ctx)	do { ctx->phase = 10; } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef	RETURN
+#define	RETURN(_code)	do {			\
+		rval.code = _code;		\
+		rval.consumed = consumed_myself;\
+		return rval;			\
+	} while(0)
+
+/*
+ * The decoder of the SET OF type.
+ */
+asn_dec_rval_t
+SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const void *ptr, size_t size, int tag_mode) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements; /* Single one */
+
+    /*
+	 * Parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	ber_tlv_tag_t tlv_tag;	/* T from TLV */
+	asn_dec_rval_t rval;	/* Return code from subparsers */
+
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+
+	ASN_DEBUG("Decoding %s as SET OF", td->name);
+	
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) {
+			RETURN(RC_FAIL);
+		}
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+	
+	/*
+	 * Start to parse where left previously
+	 */
+	switch(ctx->phase) {
+	case 0:
+		/*
+		 * PHASE 0.
+		 * Check that the set of tags associated with given structure
+		 * perfectly fits our expectations.
+		 */
+
+		rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+			tag_mode, 1, &ctx->left, 0);
+		if(rval.code != RC_OK) {
+			ASN_DEBUG("%s tagging check failed: %d",
+				td->name, rval.code);
+			return rval;
+		}
+
+		if(ctx->left >= 0)
+			ctx->left += rval.consumed; /* ?Substracted below! */
+		ADVANCE(rval.consumed);
+
+		ASN_DEBUG("Structure consumes %ld bytes, "
+			"buffer %ld", (long)ctx->left, (long)size);
+
+		NEXT_PHASE(ctx);
+		/* Fall through */
+	case 1:
+		/*
+		 * PHASE 1.
+		 * From the place where we've left it previously,
+		 * try to decode the next item.
+		 */
+	  for(;; ctx->step = 0) {
+		ssize_t tag_len;	/* Length of TLV's T */
+
+		if(ctx->step & 1)
+			goto microphase2;
+
+		/*
+		 * MICROPHASE 1: Synchronize decoding.
+		 */
+
+		if(ctx->left == 0) {
+			ASN_DEBUG("End of SET OF %s", td->name);
+			/*
+			 * No more things to decode.
+			 * Exit out of here.
+			 */
+			PHASE_OUT(ctx);
+			RETURN(RC_OK);
+		}
+
+		/*
+		 * Fetch the T from TLV.
+		 */
+		tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+		switch(tag_len) {
+		case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+			/* Fall through */
+		case -1: RETURN(RC_FAIL);
+		}
+
+		if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
+			if(LEFT < 2) {
+				if(SIZE_VIOLATION)
+					RETURN(RC_FAIL);
+				else
+					RETURN(RC_WMORE);
+			} else if(((const uint8_t *)ptr)[1] == 0) {
+				/*
+				 * Found the terminator of the
+				 * indefinite length structure.
+				 */
+				break;
+			}
+		}
+
+		/* Outmost tag may be unknown and cannot be fetched/compared */
+		if(elm->tag != (ber_tlv_tag_t)-1) {
+		    if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) {
+			/*
+			 * The new list member of expected type has arrived.
+			 */
+		    } else {
+			ASN_DEBUG("Unexpected tag %s fixed SET OF %s",
+				ber_tlv_tag_string(tlv_tag), td->name);
+			ASN_DEBUG("%s SET OF has tag %s",
+				td->name, ber_tlv_tag_string(elm->tag));
+			RETURN(RC_FAIL);
+		    }
+		}
+
+		/*
+		 * MICROPHASE 2: Invoke the member-specific decoder.
+		 */
+		ctx->step |= 1;		/* Confirm entering next microphase */
+	microphase2:
+		
+		/*
+		 * Invoke the member fetch routine according to member's type
+		 */
+		rval = elm->type->op->ber_decoder(opt_codec_ctx,
+				elm->type, &ctx->ptr, ptr, LEFT, 0);
+		ASN_DEBUG("In %s SET OF %s code %d consumed %d",
+			td->name, elm->type->name,
+			rval.code, (int)rval.consumed);
+		switch(rval.code) {
+		case RC_OK:
+			{
+				asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+				if(ASN_SET_ADD(list, ctx->ptr) != 0)
+					RETURN(RC_FAIL);
+				else
+					ctx->ptr = 0;
+			}
+			break;
+		case RC_WMORE: /* More data expected */
+			if(!SIZE_VIOLATION) {
+				ADVANCE(rval.consumed);
+				RETURN(RC_WMORE);
+			}
+			/* Fall through */
+		case RC_FAIL: /* Fatal error */
+			ASN_STRUCT_FREE(*elm->type, ctx->ptr);
+			ctx->ptr = 0;
+			RETURN(RC_FAIL);
+		} /* switch(rval) */
+		
+		ADVANCE(rval.consumed);
+	  }	/* for(all list members) */
+
+		NEXT_PHASE(ctx);
+	case 2:
+		/*
+		 * Read in all "end of content" TLVs.
+		 */
+		while(ctx->left < 0) {
+			if(LEFT < 2) {
+				if(LEFT > 0 && ((const char *)ptr)[0] != 0) {
+					/* Unexpected tag */
+					RETURN(RC_FAIL);
+				} else {
+					RETURN(RC_WMORE);
+				}
+			}
+			if(((const char *)ptr)[0] == 0
+			&& ((const char *)ptr)[1] == 0) {
+				ADVANCE(2);
+				ctx->left++;
+			} else {
+				RETURN(RC_FAIL);
+			}
+		}
+
+		PHASE_OUT(ctx);
+	}
+	
+	RETURN(RC_OK);
+}
+
+/*
+ * Internally visible buffer holding a single encoded element.
+ */
+struct _el_buffer {
+	uint8_t *buf;
+	size_t length;
+	size_t allocated_size;
+    unsigned bits_unused;
+};
+/* Append bytes to the above structure */
+static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) {
+    struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr;
+
+    if(el_buf->length + size > el_buf->allocated_size) {
+        size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8;
+        void *p;
+
+        do {
+            new_size <<= 2;
+        } while(el_buf->length + size > new_size);
+
+        p = REALLOC(el_buf->buf, new_size);
+        if(p) {
+            el_buf->buf = p;
+            el_buf->allocated_size = new_size;
+        } else {
+            return -1;
+        }
+    }
+
+    memcpy(el_buf->buf + el_buf->length, buffer, size);
+
+    el_buf->length += size;
+    return 0;
+}
+
+static void assert_unused_bits(const struct _el_buffer* p) {
+    if(p->length) {
+        assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0);
+    } else {
+        assert(p->bits_unused == 0);
+    }
+}
+
+static int _el_buf_cmp(const void *ap, const void *bp) {
+    const struct _el_buffer *a = (const struct _el_buffer *)ap;
+    const struct _el_buffer *b = (const struct _el_buffer *)bp;
+    size_t common_len;
+    int ret = 0;
+
+    if(a->length < b->length)
+        common_len = a->length;
+    else
+        common_len = b->length;
+
+    if (a->buf && b->buf) {
+        ret = memcmp(a->buf, b->buf, common_len);
+    }
+    if(ret == 0) {
+        if(a->length < b->length)
+            ret = -1;
+        else if(a->length > b->length)
+            ret = 1;
+        /* Ignore unused bits. */
+        assert_unused_bits(a);
+        assert_unused_bits(b);
+    }
+
+    return ret;
+}
+
+static void
+SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) {
+    size_t i;
+
+    for(i = 0; i < count; i++) {
+        FREEMEM(el_buf[i].buf);
+    }
+
+    FREEMEM(el_buf);
+}
+
+enum SET_OF__encode_method {
+    SOES_DER,   /* Distinguished Encoding Rules */
+    SOES_CUPER  /* Canonical Unaligned Packed Encoding Rules */
+};
+
+static struct _el_buffer *
+SET_OF__encode_sorted(const asn_TYPE_member_t *elm,
+                      const asn_anonymous_set_ *list,
+                      enum SET_OF__encode_method method) {
+    struct _el_buffer *encoded_els;
+    int edx;
+
+    encoded_els =
+        (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0]));
+    if(encoded_els == NULL) {
+        return NULL;
+    }
+
+	/*
+	 * Encode all members.
+	 */
+    for(edx = 0; edx < list->count; edx++) {
+        const void *memb_ptr = list->array[edx];
+        struct _el_buffer *encoding_el = &encoded_els[edx];
+        asn_enc_rval_t erval = {0,0,0};
+
+        if(!memb_ptr) break;
+
+        /*
+		 * Encode the member into the prepared space.
+		 */
+        switch(method) {
+        case SOES_DER:
+            erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag,
+                                               _el_addbytes, encoding_el);
+            break;
+        case SOES_CUPER:
+            erval = uper_encode(elm->type,
+                                elm->encoding_constraints.per_constraints,
+                                memb_ptr, _el_addbytes, encoding_el);
+            if(erval.encoded != -1) {
+                size_t extra_bits = erval.encoded % 8;
+                assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8);
+                encoding_el->bits_unused = (8 - extra_bits) & 0x7;
+            }
+            break;
+        default:
+            assert(!"Unreachable");
+            break;
+        }
+        if(erval.encoded < 0) break;
+	}
+
+    if(edx == list->count) {
+        /*
+         * Sort the encoded elements according to their encoding.
+         */
+        qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp);
+
+        return encoded_els;
+    } else {
+        SET_OF__encode_sorted_free(encoded_els, edx);
+        return NULL;
+    }
+}
+
+
+/*
+ * The DER encoder of the SET OF type.
+ */
+asn_enc_rval_t
+SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+    size_t computed_size = 0;
+    ssize_t encoding_size = 0;
+    struct _el_buffer *encoded_els;
+    int edx;
+
+	ASN_DEBUG("Estimating size for SET OF %s", td->name);
+
+    /*
+     * Gather the length of the underlying members sequence.
+     */
+    for(edx = 0; edx < list->count; edx++) {
+        void *memb_ptr = list->array[edx];
+        asn_enc_rval_t erval = {0,0,0};
+
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+
+        erval =
+            elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0);
+        if(erval.encoded == -1) return erval;
+        computed_size += erval.encoded;
+	}
+
+
+    /*
+     * Encode the TLV for the sequence itself.
+     */
+    encoding_size =
+        der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
+    if(encoding_size < 0) {
+        ASN__ENCODE_FAILED;
+    }
+    computed_size += encoding_size;
+
+    if(!cb || list->count == 0) {
+        asn_enc_rval_t erval = {0,0,0};
+        erval.encoded = computed_size;
+        ASN__ENCODED_OK(erval);
+    }
+
+    ASN_DEBUG("Encoding members of %s SET OF", td->name);
+
+    /*
+     * DER mandates dynamic sorting of the SET OF elements
+     * according to their encodings. Build an array of the
+     * encoded elements.
+     */
+    encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER);
+
+    /*
+     * Report encoded elements to the application.
+     * Dispose of temporary sorted members table.
+     */
+    for(edx = 0; edx < list->count; edx++) {
+        struct _el_buffer *encoded_el = &encoded_els[edx];
+        /* Report encoded chunks to the application */
+        if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) {
+            break;
+        } else {
+            encoding_size += encoded_el->length;
+        }
+    }
+
+    SET_OF__encode_sorted_free(encoded_els, list->count);
+
+    if(edx == list->count) {
+        asn_enc_rval_t erval = {0,0,0};
+        assert(computed_size == (size_t)encoding_size);
+        erval.encoded = computed_size;
+        ASN__ENCODED_OK(erval);
+    } else {
+        ASN__ENCODE_FAILED;
+    }
+}
+
+#undef	XER_ADVANCE
+#define	XER_ADVANCE(num_bytes)	do {			\
+		size_t num = num_bytes;			\
+		buf_ptr = ((const char *)buf_ptr) + num;\
+		size -= num;				\
+		consumed_myself += num;			\
+	} while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const char *opt_mname, const void *buf_ptr, size_t size) {
+    /*
+	 * Bring closer parts of structure description.
+	 */
+	const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+	const asn_TYPE_member_t *element = td->elements;
+	const char *elm_tag;
+	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+	/*
+	 * ... and parts of the structure being constructed.
+	 */
+	void *st = *struct_ptr;	/* Target structure. */
+	asn_struct_ctx_t *ctx;	/* Decoder context */
+
+	asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */
+	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(st == 0) {
+		st = *struct_ptr = CALLOC(1, specs->struct_size);
+		if(st == 0) RETURN(RC_FAIL);
+	}
+
+	/* Which tag is expected for the downstream */
+	if(specs->as_XMLValueList) {
+		elm_tag = (specs->as_XMLValueList == 1) ? 0 : "";
+	} else {
+		elm_tag = (*element->name)
+				? element->name : element->type->xml_tag;
+	}
+
+	/*
+	 * Restore parsing context.
+	 */
+	ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+	/*
+	 * Phases of XER/XML processing:
+	 * Phase 0: Check that the opening tag matches our expectations.
+	 * Phase 1: Processing body and reacting on closing tag.
+	 * Phase 2: Processing inner type.
+	 */
+	for(; ctx->phase <= 2;) {
+		pxer_chunk_type_e ch_type;	/* XER chunk type */
+		ssize_t ch_size;		/* Chunk size */
+		xer_check_tag_e tcv;		/* Tag check value */
+
+		/*
+		 * Go inside the inner member of a set.
+		 */
+		if(ctx->phase == 2) {
+			asn_dec_rval_t tmprval = {RC_OK, 0};
+
+			/* Invoke the inner type decoder, m.b. multiple times */
+			ASN_DEBUG("XER/SET OF element [%s]", elm_tag);
+			tmprval = element->type->op->xer_decoder(opt_codec_ctx,
+					element->type, &ctx->ptr, elm_tag,
+					buf_ptr, size);
+			if(tmprval.code == RC_OK) {
+				asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+				if(ASN_SET_ADD(list, ctx->ptr) != 0)
+					RETURN(RC_FAIL);
+				ctx->ptr = 0;
+				XER_ADVANCE(tmprval.consumed);
+			} else {
+				XER_ADVANCE(tmprval.consumed);
+				RETURN(tmprval.code);
+			}
+			ctx->phase = 1;	/* Back to body processing */
+			ASN_DEBUG("XER/SET OF phase => %d", ctx->phase);
+			/* Fall through */
+		}
+
+		/*
+		 * Get the next part of the XML stream.
+		 */
+		ch_size = xer_next_token(&ctx->context,
+			buf_ptr, size, &ch_type);
+		if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+			switch(ch_type) {
+            case PXER_WMORE:
+                RETURN(RC_WMORE);
+			case PXER_COMMENT:	/* Got XML comment */
+			case PXER_TEXT:		/* Ignore free-standing text */
+				XER_ADVANCE(ch_size);	/* Skip silently */
+				continue;
+			case PXER_TAG:
+				break;	/* Check the rest down there */
+			}
+		}
+
+		tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+		ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s",
+			tcv, ctx->phase, xml_tag);
+		switch(tcv) {
+		case XCT_CLOSING:
+			if(ctx->phase == 0) break;
+			ctx->phase = 0;
+			/* Fall through */
+		case XCT_BOTH:
+			if(ctx->phase == 0) {
+				/* No more things to decode */
+				XER_ADVANCE(ch_size);
+				ctx->phase = 3;	/* Phase out */
+				RETURN(RC_OK);
+			}
+			/* Fall through */
+		case XCT_OPENING:
+			if(ctx->phase == 0) {
+				XER_ADVANCE(ch_size);
+				ctx->phase = 1;	/* Processing body phase */
+				continue;
+			}
+			/* Fall through */
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
+
+			ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase);
+			if(ctx->phase == 1) {
+				/*
+				 * Process a single possible member.
+				 */
+				ctx->phase = 2;
+				continue;
+			}
+			/* Fall through */
+		default:
+			break;
+		}
+
+		ASN_DEBUG("Unexpected XML tag in SET OF");
+		break;
+	}
+
+	ctx->phase = 3;	/* "Phase out" on hard failure */
+	RETURN(RC_FAIL);
+}
+
+
+
+typedef struct xer_tmp_enc_s {
+	void *buffer;
+	size_t offset;
+	size_t size;
+} xer_tmp_enc_t;
+static int
+SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) {
+	xer_tmp_enc_t *t = (xer_tmp_enc_t *)key;
+	if(t->offset + size >= t->size) {
+		size_t newsize = (t->size << 2) + size;
+		void *p = REALLOC(t->buffer, newsize);
+		if(!p) return -1;
+		t->buffer = p;
+		t->size = newsize;
+	}
+	memcpy((char *)t->buffer + t->offset, buffer, size);
+	t->offset += size;
+	return 0;
+}
+static int
+SET_OF_xer_order(const void *aptr, const void *bptr) {
+	const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr;
+	const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr;
+	size_t minlen = a->offset;
+	int ret;
+	if(b->offset < minlen) minlen = b->offset;
+	/* Well-formed UTF-8 has this nice lexicographical property... */
+	ret = memcmp(a->buffer, b->buffer, minlen);
+	if(ret != 0) return ret;
+	if(a->offset == b->offset)
+		return 0;
+	if(a->offset == minlen)
+		return -1;
+	return 1;
+}
+
+
+asn_enc_rval_t
+SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                  enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+	const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+	const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+    const char *mname = specs->as_XMLValueList
+		? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag);
+	size_t mlen = mname ? strlen(mname) : 0;
+	int xcan = (flags & XER_F_CANONICAL);
+	xer_tmp_enc_t *encs = 0;
+	size_t encs_count = 0;
+	void *original_app_key = app_key;
+	asn_app_consume_bytes_f *original_cb = cb;
+	int i;
+
+	if(!sptr) ASN__ENCODE_FAILED;
+
+	if(xcan) {
+		encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0]));
+		if(!encs) ASN__ENCODE_FAILED;
+		cb = SET_OF_encode_xer_callback;
+	}
+
+	er.encoded = 0;
+
+	for(i = 0; i < list->count; i++) {
+		asn_enc_rval_t tmper = {0,0,0};
+
+		void *memb_ptr = list->array[i];
+		if(!memb_ptr) continue;
+
+		if(encs) {
+			memset(&encs[encs_count], 0, sizeof(encs[0]));
+			app_key = &encs[encs_count];
+			encs_count++;
+		}
+
+		if(mname) {
+			if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+			ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+		}
+
+		if(!xcan && specs->as_XMLValueList == 1)
+			ASN__TEXT_INDENT(1, ilevel + 1);
+		tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
+				ilevel + (specs->as_XMLValueList != 2),
+				flags, cb, app_key);
+		if(tmper.encoded == -1) return tmper;
+		er.encoded += tmper.encoded;
+		if(tmper.encoded == 0 && specs->as_XMLValueList) {
+			const char *name = elm->type->xml_tag;
+			size_t len = strlen(name);
+			ASN__CALLBACK3("<", 1, name, len, "/>", 2);
+		}
+
+		if(mname) {
+			ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+		}
+
+	}
+
+	if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+	if(encs) {
+		xer_tmp_enc_t *enc = encs;
+		xer_tmp_enc_t *end = encs + encs_count;
+		ssize_t control_size = 0;
+
+		er.encoded = 0;
+		cb = original_cb;
+		app_key = original_app_key;
+		qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order);
+
+		for(; enc < end; enc++) {
+			ASN__CALLBACK(enc->buffer, enc->offset);
+			FREEMEM(enc->buffer);
+			enc->buffer = 0;
+			control_size += enc->offset;
+		}
+		assert(control_size == er.encoded);
+	}
+
+	goto cleanup;
+cb_failed:
+	ASN__ENCODE_FAILED;
+cleanup:
+	if(encs) {
+		size_t n;
+		for(n = 0; n < encs_count; n++) {
+			FREEMEM(encs[n].buffer);
+		}
+		FREEMEM(encs);
+	}
+	ASN__ENCODED_OK(er);
+}
+
+int
+SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+             asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_TYPE_member_t *elm = td->elements;
+	const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+	int ret;
+	int i;
+
+	if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+	/* Dump preamble */
+	if(cb(td->name, strlen(td->name), app_key) < 0
+	|| cb(" ::= {", 6, app_key) < 0)
+		return -1;
+
+	for(i = 0; i < list->count; i++) {
+		const void *memb_ptr = list->array[i];
+		if(!memb_ptr) continue;
+
+		_i_INDENT(1);
+
+		ret = elm->type->op->print_struct(elm->type, memb_ptr,
+			ilevel + 1, cb, app_key);
+		if(ret) return ret;
+	}
+
+	ilevel--;
+	_i_INDENT(1);
+
+	return (cb("}", 1, app_key) < 0) ? -1 : 0;
+}
+
+void
+SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr,
+            enum asn_struct_free_method method) {
+    if(td && ptr) {
+		const asn_SET_OF_specifics_t *specs;
+		asn_TYPE_member_t *elm = td->elements;
+		asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr);
+		asn_struct_ctx_t *ctx;	/* Decoder context */
+		int i;
+
+		/*
+		 * Could not use set_of_empty() because of (*free)
+		 * incompatibility.
+		 */
+		for(i = 0; i < list->count; i++) {
+			void *memb_ptr = list->array[i];
+			if(memb_ptr)
+			ASN_STRUCT_FREE(*elm->type, memb_ptr);
+		}
+		list->count = 0;	/* No meaningful elements left */
+
+		asn_set_empty(list);	/* Remove (list->array) */
+
+		specs = (const asn_SET_OF_specifics_t *)td->specifics;
+		ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset);
+		if(ctx->ptr) {
+			ASN_STRUCT_FREE(*elm->type, ctx->ptr);
+			ctx->ptr = 0;
+		}
+
+        switch(method) {
+        case ASFM_FREE_EVERYTHING:
+            FREEMEM(ptr);
+            break;
+        case ASFM_FREE_UNDERLYING:
+            break;
+        case ASFM_FREE_UNDERLYING_AND_RESET:
+            memset(ptr, 0, specs->struct_size);
+            break;
+        }
+    }
+}
+
+int
+SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const asn_TYPE_member_t *elm = td->elements;
+	asn_constr_check_f *constr;
+	const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+	int i;
+
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+
+	constr = elm->encoding_constraints.general_constraints;
+	if(!constr) constr = elm->type->encoding_constraints.general_constraints;
+
+	/*
+	 * Iterate over the members of an array.
+	 * Validate each in turn, until one fails.
+	 */
+	for(i = 0; i < list->count; i++) {
+		const void *memb_ptr = list->array[i];
+		int ret;
+
+		if(!memb_ptr) continue;
+
+		ret = constr(elm->type, memb_ptr, ctfailcb, app_key);
+		if(ret) return ret;
+	}
+
+	return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    asn_dec_rval_t rv = {RC_OK, 0};
+	const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements; /* Single one */
+    void *st = *sptr;
+	asn_anonymous_set_ *list;
+	const asn_per_constraint_t *ct;
+	int repeat = 0;
+	ssize_t nelems;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}                                                                       
+	list = _A_SET_FROM_VOID(st);
+
+	/* Figure out which constraints to use */
+	if(constraints) ct = &constraints->size;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->size;
+	else ct = 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		int value = per_get_few_bits(pd, 1);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value) ct = 0;	/* Not restricted! */
+	}
+
+	if(ct && ct->effective_bits >= 0) {
+		/* X.691, #19.5: No length determinant */
+		nelems = per_get_few_bits(pd, ct->effective_bits);
+		ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s",
+			(long)nelems, ct->lower_bound, td->name);
+		if(nelems < 0)  ASN__DECODE_STARVED;
+		nelems += ct->lower_bound;
+	} else {
+		nelems = -1;
+	}
+
+	do {
+		int i;
+		if(nelems < 0) {
+			nelems = uper_get_length(pd, -1, 0, &repeat);
+            ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)",
+                      nelems, (int)(ct ? ct->effective_bits : -1));
+            if(nelems < 0) ASN__DECODE_STARVED;
+		}
+
+		for(i = 0; i < nelems; i++) {
+			void *ptr = 0;
+			ASN_DEBUG("SET OF %s decoding", elm->type->name);
+			rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+				elm->encoding_constraints.per_constraints, &ptr, pd);
+			ASN_DEBUG("%s SET OF %s decoded %d, %p",
+				td->name, elm->type->name, rv.code, ptr);
+			if(rv.code == RC_OK) {
+				if(ASN_SET_ADD(list, ptr) == 0) {
+                    if(rv.consumed == 0 && nelems > 200) {
+                        /* Protect from SET OF NULL compression bombs. */
+                        ASN__DECODE_FAILED;
+                    }
+					continue;
+                }
+				ASN_DEBUG("Failed to add element into %s",
+					td->name);
+				/* Fall through */
+				rv.code = RC_FAIL;
+			} else {
+				ASN_DEBUG("Failed decoding %s of %s (SET OF)",
+					elm->type->name, td->name);
+			}
+			if(ptr) ASN_STRUCT_FREE(*elm->type, ptr);
+			return rv;
+		}
+
+		nelems = -1;	/* Allow uper_get_length() */
+	} while(repeat);
+
+	ASN_DEBUG("Decoded %s as SET OF", td->name);
+
+	rv.code = RC_OK;
+	rv.consumed = 0;
+	return rv;
+}
+
+asn_enc_rval_t
+SET_OF_encode_uper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+    const asn_anonymous_set_ *list;
+    const asn_per_constraint_t *ct;
+    const asn_TYPE_member_t *elm = td->elements;
+    struct _el_buffer *encoded_els;
+    asn_enc_rval_t er = {0,0,0};
+    size_t encoded_edx;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    list = _A_CSET_FROM_VOID(sptr);
+
+    er.encoded = 0;
+
+    ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count);
+
+    if(constraints) ct = &constraints->size;
+    else if(td->encoding_constraints.per_constraints)
+        ct = &td->encoding_constraints.per_constraints->size;
+    else ct = 0;
+
+    /* If extensible constraint, check if size is in root */
+    if(ct) {
+        int not_in_root =
+            (list->count < ct->lower_bound || list->count > ct->upper_bound);
+        ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound,
+                  ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+        if(ct->flags & APC_EXTENSIBLE) {
+            /* Declare whether size is in extension root */
+            if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED;
+            if(not_in_root) ct = 0;
+        } else if(not_in_root && ct->effective_bits >= 0) {
+            ASN__ENCODE_FAILED;
+        }
+
+    }
+
+    if(ct && ct->effective_bits >= 0) {
+        /* X.691, #19.5: No length determinant */
+        if(per_put_few_bits(po, list->count - ct->lower_bound,
+                            ct->effective_bits))
+            ASN__ENCODE_FAILED;
+    } else if(list->count == 0) {
+        /* When the list is empty add only the length determinant
+         * X.691, #20.6 and #11.9.4.1
+         */
+        if (uper_put_length(po, 0, 0)) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+
+    /*
+     * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements
+     * according to their encodings. Build an array of the encoded elements.
+     */
+    encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER);
+
+    for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) {
+        ssize_t may_encode;
+        size_t edx;
+        int need_eom = 0;
+
+        if(ct && ct->effective_bits >= 0) {
+            may_encode = list->count;
+        } else {
+            may_encode =
+                uper_put_length(po, list->count - encoded_edx, &need_eom);
+            if(may_encode < 0) ASN__ENCODE_FAILED;
+        }
+
+        for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) {
+            const struct _el_buffer *el = &encoded_els[edx];
+            if(asn_put_many_bits(po, el->buf,
+                                 (8 * el->length) - el->bits_unused) < 0) {
+                break;
+            }
+        }
+
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+
+        encoded_edx += may_encode;
+    }
+
+    SET_OF__encode_sorted_free(encoded_els, list->count);
+
+    if((ssize_t)encoded_edx == list->count) {
+        ASN__ENCODED_OK(er);
+    } else {
+        ASN__ENCODE_FAILED;
+    }
+}
+
+asn_dec_rval_t
+SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	asn_dec_rval_t rv = {RC_OK, 0};
+	const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+	const asn_TYPE_member_t *elm = td->elements; /* Single one */
+	void *st = *sptr;
+	asn_anonymous_set_ *list;
+	const asn_per_constraint_t *ct;
+	int repeat = 0;
+	ssize_t nelems;
+
+	if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Create the target structure if it is not present already.
+	 */
+	if(!st) {
+		st = *sptr = CALLOC(1, specs->struct_size);
+		if(!st) ASN__DECODE_FAILED;
+	}
+	list = _A_SET_FROM_VOID(st);
+
+	/* Figure out which constraints to use */
+	if(constraints) ct = &constraints->size;
+	else if(td->encoding_constraints.per_constraints)
+		ct = &td->encoding_constraints.per_constraints->size;
+	else ct = 0;
+
+	if(ct && ct->flags & APC_EXTENSIBLE) {
+		int value = per_get_few_bits(pd, 1);
+		if(value < 0) ASN__DECODE_STARVED;
+		if(value) ct = 0;	/* Not restricted! */
+	}
+
+	if(ct && ct->effective_bits >= 0) {
+		/* X.691, #19.5: No length determinant */
+		nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1);
+		ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s",
+		          (long)nelems, ct->lower_bound, td->name);
+		if(nelems < 0)  ASN__DECODE_STARVED;
+		nelems += ct->lower_bound;
+	} else {
+		nelems = -1;
+	}
+
+	do {
+		int i;
+		if(nelems < 0) {
+			nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1,
+			                         ct ? ct->effective_bits : -1, &repeat);
+			ASN_DEBUG("Got to decode %d elements (eff %d)",
+			          (int)nelems, (int)(ct ? ct->effective_bits : -1));
+			if(nelems < 0) ASN__DECODE_STARVED;
+		}
+
+		for(i = 0; i < nelems; i++) {
+			void *ptr = 0;
+			ASN_DEBUG("SET OF %s decoding", elm->type->name);
+			rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+			                                 elm->encoding_constraints.per_constraints, &ptr, pd);
+			ASN_DEBUG("%s SET OF %s decoded %d, %p",
+			          td->name, elm->type->name, rv.code, ptr);
+			if(rv.code == RC_OK) {
+				if(ASN_SET_ADD(list, ptr) == 0)
+					continue;
+				ASN_DEBUG("Failed to add element into %s",
+				          td->name);
+				/* Fall through */
+				rv.code = RC_FAIL;
+			} else {
+				ASN_DEBUG("Failed decoding %s of %s (SET OF)",
+				          elm->type->name, td->name);
+			}
+			if(ptr) ASN_STRUCT_FREE(*elm->type, ptr);
+			return rv;
+		}
+
+		nelems = -1;	/* Allow uper_get_length() */
+	} while(repeat);
+
+	ASN_DEBUG("Decoded %s as SET OF", td->name);
+
+	rv.code = RC_OK;
+	rv.consumed = 0;
+	return rv;
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+struct comparable_ptr {
+    const asn_TYPE_descriptor_t *td;
+    const void *sptr;
+};
+
+static int
+SET_OF__compare_cb(const void *aptr, const void *bptr) {
+    const struct comparable_ptr *a = aptr;
+    const struct comparable_ptr *b = bptr;
+    assert(a->td == b->td);
+    return a->td->op->compare_struct(a->td, a->sptr, b->sptr);
+}
+
+int
+SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+               const void *bptr) {
+    const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr);
+    const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr);
+
+    if(a && b) {
+        struct comparable_ptr *asorted;
+        struct comparable_ptr *bsorted;
+        ssize_t common_length;
+        ssize_t idx;
+
+        if(a->count == 0) {
+            if(b->count) return -1;
+            return 0;
+        } else if(b->count == 0) {
+            return 1;
+        }
+
+        asorted = MALLOC(a->count * sizeof(asorted[0]));
+        bsorted = MALLOC(b->count * sizeof(bsorted[0]));
+        if(!asorted || !bsorted) {
+            FREEMEM(asorted);
+            FREEMEM(bsorted);
+            return -1;
+        }
+
+        for(idx = 0; idx < a->count; idx++) {
+            asorted[idx].td = td->elements->type;
+            asorted[idx].sptr = a->array[idx];
+        }
+
+        for(idx = 0; idx < b->count; idx++) {
+            bsorted[idx].td = td->elements->type;
+            bsorted[idx].sptr = b->array[idx];
+        }
+
+        qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb);
+        qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb);
+
+        common_length = (a->count < b->count ? a->count : b->count);
+        for(idx = 0; idx < common_length; idx++) {
+            int ret = td->elements->type->op->compare_struct(
+                td->elements->type, asorted[idx].sptr, bsorted[idx].sptr);
+            if(ret) {
+                FREEMEM(asorted);
+                FREEMEM(bsorted);
+                return ret;
+            }
+        }
+
+        FREEMEM(asorted);
+        FREEMEM(bsorted);
+
+        if(idx < b->count) /* more elements in b */
+            return -1;     /* a is shorter, so put it first */
+        if(idx < a->count) return 1;
+    } else if(!a) {
+        return -1;
+    } else if(!b) {
+        return 1;
+    }
+
+	return 0;
+}
+
+
+asn_TYPE_operation_t asn_OP_SET_OF = {
+	SET_OF_free,
+	SET_OF_print,
+	SET_OF_compare,
+	SET_OF_decode_ber,
+	SET_OF_encode_der,
+	SET_OF_decode_xer,
+	SET_OF_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+	0,
+	0,
+#else
+	SET_OF_decode_oer,
+	SET_OF_encode_oer,
+#endif
+#ifdef ASN_DISABLE_PER_SUPPORT
+	0,
+	0,
+	0,
+	0,
+#else
+	SET_OF_decode_uper,
+	SET_OF_encode_uper,
+	SET_OF_decode_aper,
+	0,	/* SET_OF_encode_aper */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+	SET_OF_random_fill,
+	0	/* Use generic outmost tag fetcher */
+};
+
+
+asn_random_fill_result_t
+SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constraints,
+                   size_t max_length) {
+    const asn_SET_OF_specifics_t *specs =
+        (const asn_SET_OF_specifics_t *)td->specifics;
+    asn_random_fill_result_t res_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    const asn_TYPE_member_t *elm = td->elements;
+    void *st = *sptr;
+    long max_elements = 5;
+    long slb = 0;   /* Lower size bound */
+    long sub = 0;   /* Upper size bound */
+    size_t rnd_len;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (*sptr = CALLOC(1, specs->struct_size));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    switch(asn_random_between(0, 6)) {
+    case 0: max_elements = 0; break;
+    case 1: max_elements = 1; break;
+    case 2: max_elements = 5; break;
+    case 3: max_elements = max_length; break;
+    case 4: max_elements = max_length / 2; break;
+    case 5: max_elements = max_length / 4; break;
+    default: break;
+    }
+    sub = slb + max_elements;
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_SEMI_CONSTRAINED) {
+            slb = pc->lower_bound;
+            sub = pc->lower_bound + max_elements;
+        } else if(pc->flags & APC_CONSTRAINED) {
+            slb = pc->lower_bound;
+            sub = pc->upper_bound;
+            if(sub - slb > max_elements) sub = slb + max_elements;
+        }
+    }
+
+    /* Bias towards edges of allowed space */
+    switch(asn_random_between(-1, 4)) {
+    default:
+    case -1:
+        /* Prepare lengths somewhat outside of constrained range. */
+        if(constraints->per_constraints
+           && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) {
+            switch(asn_random_between(0, 5)) {
+            default:
+            case 0:
+                rnd_len = 0;
+                break;
+            case 1:
+                if(slb > 0) {
+                    rnd_len = slb - 1;
+                } else {
+                    rnd_len = 0;
+                }
+                break;
+            case 2:
+                rnd_len = asn_random_between(0, slb);
+                break;
+            case 3:
+                if(sub < (ssize_t)max_length) {
+                    rnd_len = sub + 1;
+                } else {
+                    rnd_len = max_length;
+                }
+                break;
+            case 4:
+                if(sub < (ssize_t)max_length) {
+                    rnd_len = asn_random_between(sub + 1, max_length);
+                } else {
+                    rnd_len = max_length;
+                }
+                break;
+            case 5:
+                rnd_len = max_length;
+                break;
+            }
+            break;
+        }
+        /* Fall through */
+    case 0:
+        rnd_len = asn_random_between(slb, sub);
+        break;
+    case 1:
+        if(slb < sub) {
+            rnd_len = asn_random_between(slb + 1, sub);
+            break;
+        }
+        /* Fall through */
+    case 2:
+        rnd_len = asn_random_between(slb, slb);
+        break;
+    case 3:
+        if(slb < sub) {
+            rnd_len = asn_random_between(slb, sub - 1);
+            break;
+        }
+        /* Fall through */
+    case 4:
+        rnd_len = asn_random_between(sub, sub);
+        break;
+    }
+
+    for(; rnd_len > 0; rnd_len--) {
+        asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+        void *ptr = 0;
+        asn_random_fill_result_t tmpres = elm->type->op->random_fill(
+            elm->type, &ptr, &elm->encoding_constraints,
+            (max_length > res_ok.length ? max_length - res_ok.length : 0)
+                / rnd_len);
+        switch(tmpres.code) {
+        case ARFILL_OK:
+            ASN_SET_ADD(list, ptr);
+            res_ok.length += tmpres.length;
+            break;
+        case ARFILL_SKIPPED:
+            break;
+        case ARFILL_FAILED:
+            assert(ptr == 0);
+            return tmpres;
+        }
+    }
+
+    return res_ok;
+}
+
diff --git a/asn1c_defs/constr_SET_OF.h b/asn1c_defs/constr_SET_OF.h
new file mode 100644
index 0000000..7681062
--- /dev/null
+++ b/asn1c_defs/constr_SET_OF.h
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	CONSTR_SET_OF_H
+#define	CONSTR_SET_OF_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SET_OF_specifics_s {
+    /*
+     * Target structure description.
+     */
+    unsigned struct_size;       /* Size of the target structure. */
+    unsigned ctx_offset;        /* Offset of the asn_struct_ctx_t member */
+
+    /* XER-specific stuff */
+    int as_XMLValueList; /* The member type must be encoded like this */
+} asn_SET_OF_specifics_t;
+
+/*
+ * A set specialized functions dealing with the SET OF type.
+ */
+asn_struct_free_f SET_OF_free;
+asn_struct_print_f SET_OF_print;
+asn_struct_compare_f SET_OF_compare;
+asn_constr_check_f SET_OF_constraint;
+ber_type_decoder_f SET_OF_decode_ber;
+der_type_encoder_f SET_OF_encode_der;
+xer_type_decoder_f SET_OF_decode_xer;
+xer_type_encoder_f SET_OF_encode_xer;
+oer_type_decoder_f SET_OF_decode_oer;
+oer_type_encoder_f SET_OF_encode_oer;
+per_type_decoder_f SET_OF_decode_uper;
+per_type_encoder_f SET_OF_encode_uper;
+per_type_decoder_f SET_OF_decode_aper;
+per_type_encoder_f SET_OF_encode_aper;
+asn_random_fill_f  SET_OF_random_fill;
+extern asn_TYPE_operation_t asn_OP_SET_OF;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* CONSTR_SET_OF_H */
diff --git a/asn1c_defs/constr_TYPE.c b/asn1c_defs/constr_TYPE.c
new file mode 100644
index 0000000..aefaefd
--- /dev/null
+++ b/asn1c_defs/constr_TYPE.c
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_TYPE.h>
+#include <errno.h>
+
+/*
+ * Version of the ASN.1 infrastructure shipped with compiler.
+ */
+int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; }
+
+static asn_app_consume_bytes_f _print2fp;
+
+/*
+ * Return the outmost tag of the type.
+ */
+ber_tlv_tag_t
+asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor,
+		const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) {
+
+	if(tag_mode)
+		return tag;
+
+	if(type_descriptor->tags_count)
+		return type_descriptor->tags[0];
+
+	return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0);
+}
+
+/*
+ * Print the target language's structure in human readable form.
+ */
+int
+asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td,
+           const void *struct_ptr) {
+    if(!stream) stream = stdout;
+    if(!td || !struct_ptr) {
+        errno = EINVAL;
+        return -1;
+	}
+
+	/* Invoke type-specific printer */
+    if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) {
+        return -1;
+    }
+
+    /* Terminate the output */
+    if(_print2fp("\n", 1, stream)) {
+        return -1;
+    }
+
+    return fflush(stream);
+}
+
+/* Dump the data into the specified stdio stream */
+static int
+_print2fp(const void *buffer, size_t size, void *app_key) {
+	FILE *stream = (FILE *)app_key;
+
+	if(fwrite(buffer, 1, size, stream) != size)
+		return -1;
+
+	return 0;
+}
+
+
+/*
+ * Some compilers do not support variable args macros.
+ * This function is a replacement of ASN_DEBUG() macro.
+ */
+void ASN_DEBUG_f(const char *fmt, ...);
+void ASN_DEBUG_f(const char *fmt, ...) {
+	va_list ap;
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+	fprintf(stderr, "\n");
+	va_end(ap);
+}
diff --git a/asn1c_defs/constr_TYPE.h b/asn1c_defs/constr_TYPE.h
new file mode 100644
index 0000000..d80dea5
--- /dev/null
+++ b/asn1c_defs/constr_TYPE.h
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This file contains the declaration structure called "ASN.1 Type Definition",
+ * which holds all information necessary for encoding and decoding routines.
+ * This structure even contains pointer to these encoding and decoding routines
+ * for each defined ASN.1 type.
+ */
+#ifndef	_CONSTR_TYPE_H_
+#define	_CONSTR_TYPE_H_
+
+#include <ber_tlv_length.h>
+#include <ber_tlv_tag.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+struct asn_TYPE_member_s;	/* Forward declaration */
+
+/*
+ * This type provides the context information for various ASN.1 routines,
+ * primarily ones doing decoding. A member _asn_ctx of this type must be
+ * included into certain target language's structures, such as compound types.
+ */
+typedef struct asn_struct_ctx_s {
+	short phase;		/* Decoding phase */
+	short step;		/* Elementary step of a phase */
+	int context;		/* Other context information */
+	void *ptr;		/* Decoder-specific stuff (stack elements) */
+	ber_tlv_len_t left;	/* Number of bytes left, -1 for indefinite */
+} asn_struct_ctx_t;
+
+#include <ber_decoder.h>	/* Basic Encoding Rules decoder */
+#include <der_encoder.h>	/* Distinguished Encoding Rules encoder */
+#include <xer_decoder.h>	/* Decoder of XER (XML, text) */
+#include <xer_encoder.h>	/* Encoder into XER (XML, text) */
+#include <per_decoder.h>	/* Packet Encoding Rules decoder */
+#include <per_encoder.h>	/* Packet Encoding Rules encoder */
+#include <constraints.h>	/* Subtype constraints support */
+#include <asn_random_fill.h>	/* Random structures support */
+
+#ifdef  ASN_DISABLE_OER_SUPPORT
+typedef void (oer_type_decoder_f)(void);
+typedef void (oer_type_encoder_f)(void);
+typedef void asn_oer_constraints_t;
+#else
+#include <oer_decoder.h>	/* Octet Encoding Rules encoder */
+#include <oer_encoder.h>	/* Octet Encoding Rules encoder */
+#endif
+
+/*
+ * Free the structure according to its specification.
+ * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead.
+ * Do not use directly.
+ */
+enum asn_struct_free_method {
+    ASFM_FREE_EVERYTHING,   /* free(struct_ptr) and underlying members */
+    ASFM_FREE_UNDERLYING,   /* free underlying members */
+    ASFM_FREE_UNDERLYING_AND_RESET   /* FREE_UNDERLYING + memset(0) */
+};
+typedef void (asn_struct_free_f)(
+		const struct asn_TYPE_descriptor_s *type_descriptor,
+		void *struct_ptr, enum asn_struct_free_method);
+
+/*
+ * Free the structure including freeing the memory pointed to by ptr itself.
+ */
+#define ASN_STRUCT_FREE(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING)
+
+/*
+ * Free the memory used by the members of the structure without freeing the
+ * the structure pointer itself.
+ * ZERO-OUT the structure to the safe clean state.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ *  statically or arranged on the stack, yet its elements are dynamic.)
+ */
+#define ASN_STRUCT_RESET(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET)
+
+/*
+ * Free memory used by the members of the structure without freeing
+ * the structure pointer itself.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ *  statically or arranged on the stack, yet its elements are dynamic.)
+ * AVOID using it in the application code;
+ * Use a safer ASN_STRUCT_RESET() instead.
+ */
+#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING)
+
+/*
+ * Print the structure according to its specification.
+ */
+typedef int(asn_struct_print_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr,
+    int level, /* Indentation level */
+    asn_app_consume_bytes_f *callback, void *app_key);
+
+/*
+ * Compare two structs between each other.
+ * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater",
+ * and =0 if "equal to", for some type-specific, stable definition of
+ * "smaller", "greater" and "equal to".
+ */
+typedef int (asn_struct_compare_f)(
+		const struct asn_TYPE_descriptor_s *type_descriptor,
+		const void *struct_A,
+		const void *struct_B);
+
+/*
+ * Return the outmost tag of the type.
+ * If the type is untagged CHOICE, the dynamic operation is performed.
+ * NOTE: This function pointer type is only useful internally.
+ * Do not use it in your application.
+ */
+typedef ber_tlv_tag_t (asn_outmost_tag_f)(
+		const struct asn_TYPE_descriptor_s *type_descriptor,
+		const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag);
+/* The instance of the above function type; used internally. */
+asn_outmost_tag_f asn_TYPE_outmost_tag;
+
+/*
+ * Fetch the desired type of the Open Type based on the
+ * Information Object Set driven constraints.
+ */
+typedef struct asn_type_selector_result_s {
+    const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */
+    unsigned presence_index; /* Associated choice variant. */
+} asn_type_selector_result_t;
+typedef asn_type_selector_result_t(asn_type_selector_f)(
+    const struct asn_TYPE_descriptor_s *parent_type_descriptor,
+    const void *parent_structure_ptr);
+
+/*
+ * Generalized functions for dealing with the speciic type.
+ * May be directly invoked by applications.
+ */
+typedef struct asn_TYPE_operation_s {
+    asn_struct_free_f *free_struct;     /* Free the structure */
+    asn_struct_print_f *print_struct;   /* Human readable output */
+    asn_struct_compare_f *compare_struct; /* Compare two structures */
+    ber_type_decoder_f *ber_decoder;      /* Generic BER decoder */
+    der_type_encoder_f *der_encoder;      /* Canonical DER encoder */
+    xer_type_decoder_f *xer_decoder;      /* Generic XER decoder */
+    xer_type_encoder_f *xer_encoder;      /* [Canonical] XER encoder */
+    oer_type_decoder_f *oer_decoder;      /* Generic OER decoder */
+    oer_type_encoder_f *oer_encoder;      /* Canonical OER encoder */
+    per_type_decoder_f *uper_decoder;     /* Unaligned PER decoder */
+    per_type_encoder_f *uper_encoder;     /* Unaligned PER encoder */
+    per_type_decoder_f *aper_decoder;     /* Aligned PER decoder */
+    per_type_encoder_f *aper_encoder;     /* Aligned PER encoder */
+    asn_random_fill_f *random_fill;       /* Initialize with a random value */
+    asn_outmost_tag_f *outmost_tag;       /* <optional, internal> */
+} asn_TYPE_operation_t;
+
+/*
+ * A constraints tuple specifying both the OER and PER constraints.
+ */
+typedef struct asn_encoding_constraints_s {
+    const struct asn_oer_constraints_s *oer_constraints;
+    const struct asn_per_constraints_s *per_constraints;
+    asn_constr_check_f *general_constraints;
+} asn_encoding_constraints_t;
+
+/*
+ * The definitive description of the destination language's structure.
+ */
+typedef struct asn_TYPE_descriptor_s {
+    const char *name;       /* A name of the ASN.1 type. "" in some cases. */
+    const char *xml_tag;    /* Name used in XML tag */
+
+    /*
+     * Generalized functions for dealing with the specific type.
+     * May be directly invoked by applications.
+     */
+    asn_TYPE_operation_t *op;
+
+    /***********************************************************************
+     * Internally useful members. Not to be used by applications directly. *
+     **********************************************************************/
+
+    /*
+     * Tags that are expected to occur.
+     */
+    const ber_tlv_tag_t *tags;      /* Effective tags sequence for this type */
+    unsigned tags_count;            /* Number of tags which are expected */
+    const ber_tlv_tag_t *all_tags;  /* Every tag for BER/containment */
+    unsigned all_tags_count;        /* Number of tags */
+
+    /* OER, PER, and general constraints */
+    asn_encoding_constraints_t encoding_constraints;
+
+    /*
+     * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE).
+     */
+    struct asn_TYPE_member_s *elements;
+    unsigned elements_count;
+
+    /*
+     * Additional information describing the type, used by appropriate
+     * functions above.
+     */
+    const void *specifics;
+} asn_TYPE_descriptor_t;
+
+/*
+ * This type describes an element of the constructed type,
+ * i.e. SEQUENCE, SET, CHOICE, etc.
+ */
+  enum asn_TYPE_flags_e {
+    ATF_NOFLAGS,
+    ATF_POINTER = 0x01,   /* Represented by the pointer */
+    ATF_OPEN_TYPE = 0x02, /* Open Type */
+    ATF_ANY_TYPE = 0x04   /* ANY type (deprecated!) */
+  };
+typedef struct asn_TYPE_member_s {
+    enum asn_TYPE_flags_e flags; /* Element's presentation flags */
+    unsigned optional;      /* Following optional members, including current */
+    unsigned memb_offset;   /* Offset of the element */
+    ber_tlv_tag_t tag;      /* Outmost (most immediate) tag */
+    int tag_mode;           /* IMPLICIT/no/EXPLICIT tag at current level */
+    asn_TYPE_descriptor_t *type;            /* Member type descriptor */
+    asn_type_selector_f *type_selector;     /* IoS runtime type selector */
+    asn_encoding_constraints_t encoding_constraints;
+    int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT <value> */
+    int (*default_value_set)(void **sptr);      /* Set DEFAULT <value> */
+    const char *name; /* ASN.1 identifier of the element */
+} asn_TYPE_member_t;
+
+/*
+ * BER tag to element number mapping.
+ */
+typedef struct asn_TYPE_tag2member_s {
+    ber_tlv_tag_t el_tag;   /* Outmost tag of the member */
+    unsigned el_no;         /* Index of the associated member, base 0 */
+    int toff_first;         /* First occurence of the el_tag, relative */
+    int toff_last;          /* Last occurence of the el_tag, relative */
+} asn_TYPE_tag2member_t;
+
+/*
+ * This function prints out the contents of the target language's structure
+ * (struct_ptr) into the file pointer (stream) in human readable form.
+ * RETURN VALUES:
+ * 	 0: The structure is printed.
+ * 	-1: Problem dumping the structure.
+ * (See also xer_fprint() in xer_encoder.h)
+ */
+int asn_fprint(FILE *stream, /* Destination stream descriptor */
+               const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */
+               const void *struct_ptr);         /* Structure to be printed */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _CONSTR_TYPE_H_ */
diff --git a/asn1c_defs/constraints.c b/asn1c_defs/constraints.c
new file mode 100644
index 0000000..df3c6c1
--- /dev/null
+++ b/asn1c_defs/constraints.c
@@ -0,0 +1,93 @@
+#include <asn_internal.h>
+#include <constraints.h>
+
+int
+asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor,
+                          const void *struct_ptr,
+                          asn_app_constraint_failed_f *cb, void *key) {
+    (void)type_descriptor;	/* Unused argument */
+	(void)struct_ptr;	/* Unused argument */
+	(void)cb;	/* Unused argument */
+	(void)key;	/* Unused argument */
+
+	/* Nothing to check */
+	return 0;
+}
+
+int
+asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor,
+                               const void *struct_ptr,
+                               asn_app_constraint_failed_f *cb, void *key) {
+    (void)type_descriptor;	/* Unused argument */
+	(void)struct_ptr;	/* Unused argument */
+	(void)cb;	/* Unused argument */
+	(void)key;	/* Unused argument */
+
+	/* Unknown how to check */
+	return 0;
+}
+
+struct errbufDesc {
+    const asn_TYPE_descriptor_t *failed_type;
+    const void *failed_struct_ptr;
+	char *errbuf;
+	size_t errlen;
+};
+
+static void
+_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr,
+                const char *fmt, ...) {
+    struct errbufDesc *arg = key;
+	va_list ap;
+	ssize_t vlen;
+	ssize_t maxlen;
+
+	arg->failed_type = td;
+	arg->failed_struct_ptr = sptr;
+
+	maxlen = arg->errlen;
+	if(maxlen <= 0)
+		return;
+
+	va_start(ap, fmt);
+	vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap);
+	va_end(ap);
+	if(vlen >= maxlen) {
+		arg->errbuf[maxlen-1] = '\0';	/* Ensuring libc correctness */
+		arg->errlen = maxlen - 1;	/* Not counting termination */
+		return;
+	} else if(vlen >= 0) {
+		arg->errbuf[vlen] = '\0';	/* Ensuring libc correctness */
+		arg->errlen = vlen;		/* Not counting termination */
+	} else {
+		/*
+		 * The libc on this system is broken.
+		 */
+		vlen = sizeof("<broken vsnprintf>") - 1;
+		maxlen--;
+		arg->errlen = vlen < maxlen ? vlen : maxlen;
+		memcpy(arg->errbuf, "<broken vsnprintf>", arg->errlen);
+		arg->errbuf[arg->errlen] = 0;
+	}
+
+	return;
+}
+
+int
+asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor,
+                      const void *struct_ptr, char *errbuf, size_t *errlen) {
+    struct errbufDesc arg;
+    int ret;
+
+    arg.failed_type = 0;
+    arg.failed_struct_ptr = 0;
+    arg.errbuf = errbuf;
+    arg.errlen = errlen ? *errlen : 0;
+
+    ret = type_descriptor->encoding_constraints.general_constraints(
+        type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg);
+    if(ret == -1 && errlen) *errlen = arg.errlen;
+
+    return ret;
+}
+
diff --git a/asn1c_defs/constraints.h b/asn1c_defs/constraints.h
new file mode 100644
index 0000000..0bd86a9
--- /dev/null
+++ b/asn1c_defs/constraints.h
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	ASN1_CONSTRAINTS_VALIDATOR_H
+#define	ASN1_CONSTRAINTS_VALIDATOR_H
+
+#include <asn_system.h>		/* Platform-dependent types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;		/* Forward declaration */
+
+/*
+ * Validate the structure according to the ASN.1 constraints.
+ * If errbuf and errlen are given, they shall be pointing to the appropriate
+ * buffer space and its length before calling this function. Alternatively,
+ * they could be passed as NULL's. If constraints validation fails,
+ * errlen will contain the actual number of bytes taken from the errbuf
+ * to encode an error message (properly 0-terminated).
+ * 
+ * RETURN VALUES:
+ * This function returns 0 in case all ASN.1 constraints are met
+ * and -1 if one or more constraints were failed.
+ */
+int asn_check_constraints(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Target language's structure */
+    char *errbuf,           /* Returned error description */
+    size_t *errlen          /* Length of the error description */
+);
+
+
+/*
+ * Generic type for constraint checking callback,
+ * associated with every type descriptor.
+ */
+typedef int(asn_constr_check_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr,
+    asn_app_constraint_failed_f *optional_callback, /* Log the error */
+    void *optional_app_key /* Opaque key passed to a callback */
+);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+asn_constr_check_f asn_generic_no_constraint;	/* No constraint whatsoever */
+asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */
+
+/*
+ * Invoke the callback with a complete error message.
+ */
+#define	ASN__CTFAIL	if(ctfailcb) ctfailcb
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ASN1_CONSTRAINTS_VALIDATOR_H */
diff --git a/asn1c_defs/der_encoder.c b/asn1c_defs/der_encoder.c
new file mode 100644
index 0000000..2c6a6f7
--- /dev/null
+++ b/asn1c_defs/der_encoder.c
@@ -0,0 +1,194 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <errno.h>
+
+static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len,
+	asn_app_consume_bytes_f *cb, void *app_key, int constructed);
+
+/*
+ * The DER encoder of any type.
+ */
+asn_enc_rval_t
+der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr,
+           asn_app_consume_bytes_f *consume_bytes, void *app_key) {
+    ASN_DEBUG("DER encoder invoked for %s",
+		type_descriptor->name);
+
+	/*
+	 * Invoke type-specific encoder.
+	 */
+    return type_descriptor->op->der_encoder(
+        type_descriptor, struct_ptr, /* Pointer to the destination structure */
+        0, 0, consume_bytes, app_key);
+}
+
+/*
+ * Argument type and callback necessary for der_encode_to_buffer().
+ */
+typedef struct enc_to_buf_arg {
+	void *buffer;
+	size_t left;
+} enc_to_buf_arg;
+static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) {
+	enc_to_buf_arg *arg = (enc_to_buf_arg *)key;
+
+	if(arg->left < size)
+		return -1;	/* Data exceeds the available buffer size */
+
+	memcpy(arg->buffer, buffer, size);
+	arg->buffer = ((char *)arg->buffer) + size;
+	arg->left -= size;
+
+	return 0;
+}
+
+/*
+ * A variant of the der_encode() which encodes the data into the provided buffer
+ */
+asn_enc_rval_t
+der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor,
+                     const void *struct_ptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg arg;
+	asn_enc_rval_t ec;
+
+	arg.buffer = buffer;
+	arg.left = buffer_size;
+
+	ec = type_descriptor->op->der_encoder(type_descriptor,
+		struct_ptr,	/* Pointer to the destination structure */
+		0, 0, encode_to_buffer_cb, &arg);
+	if(ec.encoded != -1) {
+		assert(ec.encoded == (ssize_t)(buffer_size - arg.left));
+		/* Return the encoded contents size */
+	}
+	return ec;
+}
+
+
+/*
+ * Write out leading TL[v] sequence according to the type definition.
+ */
+ssize_t
+der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length,
+               int tag_mode, int last_tag_form,
+               ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */
+               asn_app_consume_bytes_f *cb, void *app_key) {
+#define ASN1_DER_MAX_TAGS_COUNT 4
+    ber_tlv_tag_t
+        tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)];
+    ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)];
+    const ber_tlv_tag_t *tags; /* Copy of tags stream */
+    int tags_count;            /* Number of tags */
+    size_t overall_length;
+    int i;
+
+    ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)",
+		sd->name, tag_mode, sd->tags_count,
+		ber_tlv_tag_string(tag),
+		tag_mode
+			?(sd->tags_count+1
+				-((tag_mode == -1) && sd->tags_count))
+			:sd->tags_count
+	);
+
+    if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) {
+        ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT);
+        return -1;
+    }
+
+	if(tag_mode) {
+		/*
+		 * Instead of doing shaman dance like we do in ber_check_tags(),
+		 * allocate a small array on the stack
+		 * and initialize it appropriately.
+		 */
+		int stag_offset;
+		ber_tlv_tag_t *tags_buf = tags_buf_scratch;
+		tags_count = sd->tags_count
+			+ 1	/* EXPLICIT or IMPLICIT tag is given */
+			- ((tag_mode == -1) && sd->tags_count);
+		/* Copy tags over */
+		tags_buf[0] = tag;
+		stag_offset = -1 + ((tag_mode == -1) && sd->tags_count);
+		for(i = 1; i < tags_count; i++)
+			tags_buf[i] = sd->tags[i + stag_offset];
+		tags = tags_buf;
+	} else {
+		tags = sd->tags;
+		tags_count = sd->tags_count;
+	}
+
+	/* No tags to write */
+	if(tags_count == 0)
+		return 0;
+
+	/*
+	 * Array of tags is initialized.
+	 * Now, compute the size of the TLV pairs, from right to left.
+	 */
+	overall_length = struct_length;
+	for(i = tags_count - 1; i >= 0; --i) {
+		lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0);
+		if(lens[i] == -1) return -1;
+		overall_length += lens[i];
+		lens[i] = overall_length - lens[i];
+	}
+
+	if(!cb) return overall_length - struct_length;
+
+	ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name,
+                  tags_count);
+
+	/*
+	 * Encode the TL sequence for real.
+	 */
+	for(i = 0; i < tags_count; i++) {
+		ssize_t len;
+		int _constr;
+
+		/* Check if this tag happens to be constructed */
+		_constr = (last_tag_form || i < (tags_count - 1));
+
+		len = der_write_TL(tags[i], lens[i], cb, app_key, _constr);
+		if(len == -1) return -1;
+	}
+
+	return overall_length - struct_length;
+}
+
+static ssize_t
+der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len,
+		asn_app_consume_bytes_f *cb, void *app_key,
+		int constructed) {
+	uint8_t buf[32];
+	size_t size = 0;
+	int buf_size = cb?sizeof(buf):0;
+	ssize_t tmp;
+
+	/* Serialize tag (T from TLV) into possibly zero-length buffer */
+	tmp = ber_tlv_tag_serialize(tag, buf, buf_size);
+	if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1;
+	size += tmp;
+
+	/* Serialize length (L from TLV) into possibly zero-length buffer */
+	tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0);
+	if(tmp == -1) return -1;
+	size += tmp;
+
+	if(size > sizeof(buf))
+		return -1;
+
+	/*
+	 * If callback is specified, invoke it, and check its return value.
+	 */
+	if(cb) {
+		if(constructed) *buf |= 0x20;
+		if(cb(buf, size, app_key) < 0)
+			return -1;
+	}
+
+	return size;
+}
diff --git a/asn1c_defs/der_encoder.h b/asn1c_defs/der_encoder.h
new file mode 100644
index 0000000..e93944e
--- /dev/null
+++ b/asn1c_defs/der_encoder.h
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_DER_ENCODER_H_
+#define	_DER_ENCODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/*
+ * The DER encoder of any type. May be invoked by the application.
+ * Produces DER- and BER-compliant encoding. (DER is a subset of BER).
+ *
+ * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data
+ * produced by der_encode().
+ */
+asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/* A variant of der_encode() which encodes data into the pre-allocated buffer */
+asn_enc_rval_t der_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    void *buffer,           /* Pre-allocated buffer */
+    size_t buffer_size      /* Initial buffer size (maximum) */
+);
+
+/*
+ * Type of the generic DER encoder.
+ */
+typedef asn_enc_rval_t(der_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    int tag_mode,           /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+    ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key /* Arbitrary callback argument */
+);
+
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Write out leading TL[v] sequence according to the type definition.
+ */
+ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor,
+                       size_t struct_length,
+                       int tag_mode,      /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+                       int last_tag_form, /* {0,!0}: prim, constructed */
+                       ber_tlv_tag_t tag,
+                       asn_app_consume_bytes_f *consume_bytes_cb,
+                       void *app_key);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _DER_ENCODER_H_ */
diff --git a/asn1c_defs/per_decoder.c b/asn1c_defs/per_decoder.c
new file mode 100644
index 0000000..8a3e39d
--- /dev/null
+++ b/asn1c_defs/per_decoder.c
@@ -0,0 +1,185 @@
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <per_decoder.h>
+
+/*
+ * Decode a "Production of a complete encoding", X.691#10.1.
+ * The complete encoding contains at least one byte, and is an integral
+ * multiple of 8 bytes.
+ */
+asn_dec_rval_t
+uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buffer, size_t size) {
+    asn_dec_rval_t rval;
+
+	rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0);
+	if(rval.consumed) {
+		/*
+		 * We've always given 8-aligned data,
+		 * so convert bits to integral bytes.
+		 */
+		rval.consumed += 7;
+		rval.consumed >>= 3;
+	} else if(rval.code == RC_OK) {
+		if(size) {
+			if(((const uint8_t *)buffer)[0] == 0) {
+				rval.consumed = 1;	/* 1 byte */
+			} else {
+				ASN_DEBUG("Expecting single zeroed byte");
+				rval.code = RC_FAIL;
+			}
+		} else {
+			/* Must contain at least 8 bits. */
+			rval.code = RC_WMORE;
+		}
+	}
+
+	return rval;
+}
+
+asn_dec_rval_t
+uper_decode(const asn_codec_ctx_t *opt_codec_ctx,
+            const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer,
+            size_t size, int skip_bits, int unused_bits) {
+    asn_codec_ctx_t s_codec_ctx;
+	asn_dec_rval_t rval;
+	asn_per_data_t pd;
+
+	if(skip_bits < 0 || skip_bits > 7
+	|| unused_bits < 0 || unused_bits > 7
+	|| (unused_bits > 0 && !size))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Stack checker requires that the codec context
+	 * must be allocated on the stack.
+	 */
+	if(opt_codec_ctx) {
+		if(opt_codec_ctx->max_stack_size) {
+			s_codec_ctx = *opt_codec_ctx;
+			opt_codec_ctx = &s_codec_ctx;
+		}
+	} else {
+		/* If context is not given, be security-conscious anyway */
+		memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+		s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+		opt_codec_ctx = &s_codec_ctx;
+	}
+
+	/* Fill in the position indicator */
+	memset(&pd, 0, sizeof(pd));
+	pd.buffer = (const uint8_t *)buffer;
+	pd.nboff = skip_bits;
+	pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from <limits.h> */
+	if(pd.nboff > pd.nbits)
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Invoke type-specific decoder.
+	 */
+	if(!td->op->uper_decoder)
+		ASN__DECODE_FAILED;	/* PER is not compiled in */
+	rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
+	if(rval.code == RC_OK) {
+		/* Return the number of consumed bits */
+		rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)
+					+ pd.nboff - skip_bits;
+		ASN_DEBUG("PER decoding consumed %ld, counted %ld",
+			(long)rval.consumed, (long)pd.moved);
+		assert(rval.consumed == pd.moved);
+	} else {
+		/* PER codec is not a restartable */
+		rval.consumed = 0;
+	}
+	return rval;
+}
+
+asn_dec_rval_t
+aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buffer, size_t size) {
+	asn_dec_rval_t rval;
+
+	rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0);
+	if(rval.consumed) {
+		/*
+		 * We've always given 8-aligned data,
+		 * so convert bits to integral bytes.
+		 */
+		rval.consumed += 7;
+		rval.consumed >>= 3;
+	} else if(rval.code == RC_OK) {
+		if(size) {
+			if(((const uint8_t *)buffer)[0] == 0) {
+				rval.consumed = 1;	/* 1 byte */
+			} else {
+				ASN_DEBUG("Expecting single zeroed byte");
+				rval.code = RC_FAIL;
+			}
+		} else {
+			/* Must contain at least 8 bits. */
+			rval.code = RC_WMORE;
+		}
+	}
+
+	return rval;
+}
+
+asn_dec_rval_t
+aper_decode(const asn_codec_ctx_t *opt_codec_ctx,
+            const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer,
+            size_t size, int skip_bits, int unused_bits) {
+	asn_codec_ctx_t s_codec_ctx;
+	asn_dec_rval_t rval;
+	asn_per_data_t pd;
+
+	if(skip_bits < 0 || skip_bits > 7
+		|| unused_bits < 0 || unused_bits > 7
+		|| (unused_bits > 0 && !size))
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Stack checker requires that the codec context
+	 * must be allocated on the stack.
+	 */
+	if(opt_codec_ctx) {
+		if(opt_codec_ctx->max_stack_size) {
+			s_codec_ctx = *opt_codec_ctx;
+			opt_codec_ctx = &s_codec_ctx;
+		}
+	} else {
+		/* If context is not given, be security-conscious anyway */
+		memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+		s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+		opt_codec_ctx = &s_codec_ctx;
+	}
+
+	/* Fill in the position indicator */
+	memset(&pd, 0, sizeof(pd));
+	pd.buffer = (const uint8_t *)buffer;
+	pd.nboff = skip_bits;
+	pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from <limits.h> */
+	if(pd.nboff > pd.nbits)
+		ASN__DECODE_FAILED;
+
+	/*
+	 * Invoke type-specific decoder.
+	 */
+	if(!td->op->aper_decoder)
+		ASN__DECODE_FAILED;	/* PER is not compiled in */
+		rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
+	if(rval.code == RC_OK) {
+		/* Return the number of consumed bits */
+		rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)
+		+ pd.nboff - skip_bits;
+		ASN_DEBUG("PER decoding consumed %zu, counted %zu",
+				  rval.consumed, pd.moved);
+		assert(rval.consumed == pd.moved);
+	} else {
+		/* PER codec is not a restartable */
+		rval.consumed = 0;
+	}
+	return rval;
+}
+
diff --git a/asn1c_defs/per_decoder.h b/asn1c_defs/per_decoder.h
new file mode 100644
index 0000000..eea474a
--- /dev/null
+++ b/asn1c_defs/per_decoder.h
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PER_DECODER_H_
+#define	_PER_DECODER_H_
+
+#include <asn_application.h>
+#include <per_support.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/*
+ * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1.
+ * On success, this call always returns (.consumed >= 1), as per #11.1.3.
+ */
+asn_dec_rval_t uper_decode_complete(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of data buffer */
+);
+
+/*
+ * Unaligned PER decoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This call returns the number of BITS read from the stream. Beware.
+ */
+asn_dec_rval_t uper_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size,        /* Size of the input data buffer, in bytes */
+    int skip_bits,      /* Number of unused leading bits, 0..7 */
+    int unused_bits     /* Number of unused tailing bits, 0..7 */
+);
+
+/*
+ * Aligned PER decoder of a "complete encoding" as per X.691#10.1.
+ * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3.
+ */
+asn_dec_rval_t aper_decode_complete(
+       const struct asn_codec_ctx_s *opt_codec_ctx,
+       const struct asn_TYPE_descriptor_s *type_descriptor,	/* Type to decode */
+       void **struct_ptr,	/* Pointer to a target structure's pointer */
+       const void *buffer,	/* Data to be decoded */
+       size_t size		/* Size of data buffer */
+									);
+
+/*
+ * Aligned PER decoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This call returns the number of BITS read from the stream. Beware.
+ */
+asn_dec_rval_t aper_decode(
+      const struct asn_codec_ctx_s *opt_codec_ctx,
+      const struct asn_TYPE_descriptor_s *type_descriptor,	/* Type to decode */
+      void **struct_ptr,	/* Pointer to a target structure's pointer */
+      const void *buffer,	/* Data to be decoded */
+      size_t size,		/* Size of data buffer */
+      int skip_bits,		/* Number of unused leading bits, 0..7 */
+      int unused_bits		/* Number of unused tailing bits, 0..7 */
+      );
+
+/*
+ * Type of the type-specific PER decoder function.
+ */
+typedef asn_dec_rval_t(per_type_decoder_f)(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints, void **struct_ptr,
+    asn_per_data_t *per_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PER_DECODER_H_ */
diff --git a/asn1c_defs/per_encoder.c b/asn1c_defs/per_encoder.c
new file mode 100644
index 0000000..a35e1f0
--- /dev/null
+++ b/asn1c_defs/per_encoder.c
@@ -0,0 +1,265 @@
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <per_encoder.h>
+
+static int _uper_encode_flush_outp(asn_per_outp_t *po);
+
+static int
+ignore_output(const void *data, size_t size, void *app_key) {
+    (void)data;
+    (void)size;
+    (void)app_key;
+    return 0;
+}
+
+asn_enc_rval_t
+uper_encode(const asn_TYPE_descriptor_t *td,
+            const asn_per_constraints_t *constraints, const void *sptr,
+            asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_per_outp_t po;
+    asn_enc_rval_t er = {0,0,0};
+
+    /*
+     * Invoke type-specific encoder.
+     */
+    if(!td || !td->op->uper_encoder)
+        ASN__ENCODE_FAILED;	/* PER is not compiled in */
+
+    po.buffer = po.tmpspace;
+    po.nboff = 0;
+    po.nbits = 8 * sizeof(po.tmpspace);
+    po.output = cb ? cb : ignore_output;
+    po.op_key = app_key;
+    po.flushed_bytes = 0;
+
+    er = td->op->uper_encoder(td, constraints, sptr, &po);
+    if(er.encoded != -1) {
+        size_t bits_to_flush;
+
+        bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff;
+
+        /* Set number of bits encoded to a firm value */
+        er.encoded = (po.flushed_bytes << 3) + bits_to_flush;
+
+        if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED;
+    }
+
+    return er;
+}
+
+/*
+ * Argument type and callback necessary for uper_encode_to_buffer().
+ */
+typedef struct enc_to_buf_arg {
+	void *buffer;
+	size_t left;
+} enc_to_buf_arg;
+static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) {
+	enc_to_buf_arg *arg = (enc_to_buf_arg *)key;
+
+	if(arg->left < size)
+		return -1;	/* Data exceeds the available buffer size */
+
+	memcpy(arg->buffer, buffer, size);
+	arg->buffer = ((char *)arg->buffer) + size;
+	arg->left -= size;
+
+	return 0;
+}
+
+asn_enc_rval_t
+uper_encode_to_buffer(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg key;
+
+    key.buffer = buffer;
+    key.left = buffer_size;
+
+    if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name);
+
+    return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key);
+}
+
+typedef struct enc_dyn_arg {
+	void *buffer;
+	size_t length;
+	size_t allocated;
+} enc_dyn_arg;
+static int
+encode_dyn_cb(const void *buffer, size_t size, void *key) {
+    enc_dyn_arg *arg = key;
+    if(arg->length + size >= arg->allocated) {
+        size_t new_size = arg->allocated ? arg->allocated : 8;
+        void *p;
+
+        do {
+            new_size <<= 2;
+        } while(arg->length + size >= new_size);
+
+        p = REALLOC(arg->buffer, new_size);
+        if(!p) {
+            FREEMEM(arg->buffer);
+            memset(arg, 0, sizeof(*arg));
+            return -1;
+        }
+        arg->buffer = p;
+        arg->allocated = new_size;
+    }
+    memcpy(((char *)arg->buffer) + arg->length, buffer, size);
+    arg->length += size;
+    return 0;
+}
+ssize_t
+uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, void **buffer_r) {
+    asn_enc_rval_t er = {0,0,0};
+	enc_dyn_arg key;
+
+	memset(&key, 0, sizeof(key));
+
+	er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key);
+	switch(er.encoded) {
+	case -1:
+		FREEMEM(key.buffer);
+		return -1;
+	case 0:
+		FREEMEM(key.buffer);
+		key.buffer = MALLOC(1);
+		if(key.buffer) {
+			*(char *)key.buffer = '\0';
+			*buffer_r = key.buffer;
+			return 1;
+		} else {
+			return -1;
+		}
+	default:
+		*buffer_r = key.buffer;
+		ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+		return ((er.encoded + 7) >> 3);
+	}
+}
+
+/*
+ * Internally useful functions.
+ */
+
+/* Flush partially filled buffer */
+static int
+_uper_encode_flush_outp(asn_per_outp_t *po) {
+	uint8_t *buf;
+
+	if(po->nboff == 0 && po->buffer == po->tmpspace)
+		return 0;
+
+	buf = po->buffer + (po->nboff >> 3);
+	/* Make sure we account for the last, partially filled */
+	if(po->nboff & 0x07) {
+		buf[0] &= 0xff << (8 - (po->nboff & 0x07));
+		buf++;
+	}
+
+	return po->output(po->tmpspace, buf - po->tmpspace, po->op_key);
+}
+
+asn_enc_rval_t
+aper_encode_to_buffer(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg key;
+
+    key.buffer = buffer;
+    key.left = buffer_size;
+
+    if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name);
+
+    return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key);
+}
+
+ssize_t
+aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, void **buffer_r) {
+    asn_enc_rval_t er = {0,0,0};
+	enc_dyn_arg key;
+
+	memset(&key, 0, sizeof(key));
+
+	er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key);
+	switch(er.encoded) {
+	case -1:
+		FREEMEM(key.buffer);
+		return -1;
+	case 0:
+		FREEMEM(key.buffer);
+		key.buffer = MALLOC(1);
+		if(key.buffer) {
+			*(char *)key.buffer = '\0';
+			*buffer_r = key.buffer;
+			return 1;
+		} else {
+			return -1;
+		}
+	default:
+		*buffer_r = key.buffer;
+		ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+		return ((er.encoded + 7) >> 3);
+	}
+}
+
+static int
+_aper_encode_flush_outp(asn_per_outp_t *po) {
+	uint8_t *buf;
+
+	if(po->nboff == 0 && po->buffer == po->tmpspace)
+		return 0;
+
+	buf = po->buffer + (po->nboff >> 3);
+	/* Make sure we account for the last, partially filled */
+	if(po->nboff & 0x07) {
+		buf[0] &= 0xff << (8 - (po->nboff & 0x07));
+		buf++;
+	}
+
+	if (po->output) {
+		return po->output(po->tmpspace, buf - po->tmpspace, po->op_key);
+	}
+	return 0;
+}
+
+asn_enc_rval_t
+aper_encode(const asn_TYPE_descriptor_t *td,
+        const asn_per_constraints_t *constraints,
+        const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) {
+	asn_per_outp_t po;
+	asn_enc_rval_t er = {0,0,0};
+
+	/*
+	 * Invoke type-specific encoder.
+	 */
+	if(!td || !td->op->aper_encoder)
+		ASN__ENCODE_FAILED;	 /* PER is not compiled in */
+
+	po.buffer = po.tmpspace;
+	po.nboff = 0;
+	po.nbits = 8 * sizeof(po.tmpspace);
+	po.output = cb;
+	po.op_key = app_key;
+	po.flushed_bytes = 0;
+
+	er = td->op->aper_encoder(td, constraints, sptr, &po);
+	if(er.encoded != -1) {
+		size_t bits_to_flush;
+
+		bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff;
+
+		/* Set number of bits encoded to a firm value */
+		er.encoded = (po.flushed_bytes << 3) + bits_to_flush;
+
+		if(_aper_encode_flush_outp(&po))
+			ASN__ENCODE_FAILED;
+	}
+
+	return er;
+}
diff --git a/asn1c_defs/per_encoder.h b/asn1c_defs/per_encoder.h
new file mode 100644
index 0000000..b615ef0
--- /dev/null
+++ b/asn1c_defs/per_encoder.h
@@ -0,0 +1,93 @@
+/*-
+ * Copyright (c) 2006-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PER_ENCODER_H_
+#define	_PER_ENCODER_H_
+
+#include <asn_application.h>
+#include <per_support.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/*
+ * Unaligned PER encoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value. Use the following formula to convert to bytes:
+ * 	bytes = ((.encoded + 7) / 8)
+ */
+asn_enc_rval_t uper_encode(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,                    /* Structure to be encoded */
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+asn_enc_rval_t aper_encode(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,                     /* Structure to be encoded */
+    asn_app_consume_bytes_f *consume_bytes_cb,  /* Data collector */
+    void *app_key                               /* Arbitrary callback argument */
+);
+
+/*
+ * A variant of uper_encode() which encodes data into the existing buffer
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value.
+ */
+asn_enc_rval_t uper_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr, /* Structure to be encoded */
+    void *buffer,           /* Pre-allocated buffer */
+    size_t buffer_size      /* Initial buffer size (max) */
+);
+
+asn_enc_rval_t aper_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,  /* Structure to be encoded */
+    void *buffer,            /* Pre-allocated buffer */
+    size_t buffer_size       /* Initial buffer size (max) */
+);
+/*
+ * A variant of uper_encode_to_buffer() which allocates buffer itself.
+ * Returns the number of bytes in the buffer or -1 in case of failure.
+ * WARNING: This function produces a "Production of the complete encoding",
+ * with length of at least one octet. Contrast this to precise bit-packing
+ * encoding of uper_encode() and uper_encode_to_buffer().
+ */
+ssize_t uper_encode_to_new_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr, /* Structure to be encoded */
+    void **buffer_r         /* Buffer allocated and returned */
+);
+
+ssize_t
+aper_encode_to_new_buffer(
+    const struct asn_TYPE_descriptor_s *td,
+    const asn_per_constraints_t *constraints,
+    const void *sptr,
+    void **buffer_r
+);
+
+/*
+ * Type of the generic PER encoder function.
+ */
+typedef asn_enc_rval_t(per_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PER_ENCODER_H_ */
diff --git a/asn1c_defs/per_opentype.c b/asn1c_defs/per_opentype.c
new file mode 100644
index 0000000..28f3cb6
--- /dev/null
+++ b/asn1c_defs/per_opentype.c
@@ -0,0 +1,533 @@
+/*
+ * Copyright (c) 2007 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <per_support.h>
+#include <constr_TYPE.h>
+#include <per_opentype.h>
+
+typedef struct uper_ugot_key {
+	asn_per_data_t oldpd;	/* Old per data source */
+	size_t unclaimed;
+	size_t ot_moved;	/* Number of bits moved by OT processing */
+	int repeat;
+} uper_ugot_key;
+
+static int uper_ugot_refill(asn_per_data_t *pd);
+static int per_skip_bits(asn_per_data_t *pd, int skip_nbits);
+static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *,
+                                    const asn_TYPE_descriptor_t *td,
+                                    const asn_per_constraints_t *constraints,
+                                    void **sptr, asn_per_data_t *pd);
+
+/*
+ * Encode an "open type field".
+ * #10.1, #10.2
+ */
+int
+uper_open_type_put(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+    void *buf;
+    void *bptr;
+    ssize_t size;
+
+    ASN_DEBUG("Open type put %s ...", td->name);
+
+    size = uper_encode_to_new_buffer(td, constraints, sptr, &buf);
+    if(size <= 0) return -1;
+
+    ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name,
+              size);
+
+    bptr = buf;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE
+                  " to %s and allowing to save %" ASN_PRI_SSIZE,
+                  size, td->name, may_save);
+        if(may_save < 0) break;
+        if(per_put_many_bits(po, bptr, may_save * 8)) break;
+        bptr = (char *)bptr + may_save;
+        size -= may_save;
+        if(need_eom && uper_put_length(po, 0, 0)) {
+            FREEMEM(buf);
+            return -1;
+        }
+    } while(size);
+
+    FREEMEM(buf);
+    if(size) return -1;
+
+    return 0;
+}
+
+static asn_dec_rval_t
+uper_open_type_get_simple(const asn_codec_ctx_t *ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr,
+                          asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+	ssize_t chunk_bytes;
+	int repeat;
+	uint8_t *buf = 0;
+	size_t bufLen = 0;
+	size_t bufSize = 0;
+	asn_per_data_t spd;
+	size_t padding;
+
+	ASN__STACK_OVERFLOW_CHECK(ctx);
+
+	ASN_DEBUG("Getting open type %s...", td->name);
+
+	do {
+		chunk_bytes = uper_get_length(pd, -1, 0, &repeat);
+		if(chunk_bytes < 0) {
+			FREEMEM(buf);
+			ASN__DECODE_STARVED;
+		}
+		if(bufLen + chunk_bytes > bufSize) {
+			void *ptr;
+			bufSize = chunk_bytes + (bufSize << 2);
+			ptr = REALLOC(buf, bufSize);
+			if(!ptr) {
+				FREEMEM(buf);
+				ASN__DECODE_FAILED;
+			}
+			buf = ptr;
+		}
+		if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) {
+			FREEMEM(buf);
+			ASN__DECODE_STARVED;
+		}
+		bufLen += chunk_bytes;
+	} while(repeat);
+
+	ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name,
+		(long)bufLen);
+
+	memset(&spd, 0, sizeof(spd));
+	spd.buffer = buf;
+	spd.nbits = bufLen << 3;
+
+	ASN_DEBUG_INDENT_ADD(+4);
+	rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd);
+	ASN_DEBUG_INDENT_ADD(-4);
+
+	if(rv.code == RC_OK) {
+		/* Check padding validity */
+		padding = spd.nbits - spd.nboff;
+                if (((padding > 0 && padding < 8) ||
+		/* X.691#10.1.3 */
+		(spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) &&
+                    per_get_few_bits(&spd, padding) == 0) {
+			/* Everything is cool */
+			FREEMEM(buf);
+			return rv;
+		}
+		FREEMEM(buf);
+		if(padding >= 8) {
+			ASN_DEBUG("Too large padding %d in open type", (int)padding);
+			ASN__DECODE_FAILED;
+		} else {
+			ASN_DEBUG("No padding");
+		}
+	} else {
+		FREEMEM(buf);
+		/* rv.code could be RC_WMORE, nonsense in this context */
+		rv.code = RC_FAIL; /* Noone would give us more */
+	}
+
+	return rv;
+}
+
+static asn_dec_rval_t CC_NOTUSED
+uper_open_type_get_complex(const asn_codec_ctx_t *ctx,
+                           const asn_TYPE_descriptor_t *td,
+                           asn_per_constraints_t *constraints, void **sptr,
+                           asn_per_data_t *pd) {
+    uper_ugot_key arg;
+	asn_dec_rval_t rv;
+	ssize_t padding;
+
+	ASN__STACK_OVERFLOW_CHECK(ctx);
+
+	ASN_DEBUG("Getting open type %s from %s", td->name,
+		asn_bit_data_string(pd));
+	arg.oldpd = *pd;
+	arg.unclaimed = 0;
+	arg.ot_moved = 0;
+	arg.repeat = 1;
+	pd->refill = uper_ugot_refill;
+	pd->refill_key = &arg;
+	pd->nbits = pd->nboff;	/* 0 good bits at this point, will refill */
+	pd->moved = 0;	/* This now counts the open type size in bits */
+
+	ASN_DEBUG_INDENT_ADD(+4);
+	rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd);
+	ASN_DEBUG_INDENT_ADD(-4);
+
+#define	UPDRESTOREPD	do {						\
+	/* buffer and nboff are valid, preserve them. */		\
+	pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved);	\
+	pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved);	\
+	pd->refill = arg.oldpd.refill;					\
+	pd->refill_key = arg.oldpd.refill_key;				\
+  } while(0)
+
+	if(rv.code != RC_OK) {
+		UPDRESTOREPD;
+		return rv;
+	}
+
+	ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name,
+		asn_bit_data_string(pd),
+		asn_bit_data_string(&arg.oldpd),
+		(int)arg.unclaimed, (int)arg.repeat);
+
+	padding = pd->moved % 8;
+	if(padding) {
+		int32_t pvalue;
+		if(padding > 7) {
+			ASN_DEBUG("Too large padding %d in open type",
+				(int)padding);
+			rv.code = RC_FAIL;
+			UPDRESTOREPD;
+			return rv;
+		}
+		padding = 8 - padding;
+		ASN_DEBUG("Getting padding of %d bits", (int)padding);
+		pvalue = per_get_few_bits(pd, padding);
+		switch(pvalue) {
+		case -1:
+			ASN_DEBUG("Padding skip failed");
+			UPDRESTOREPD;
+			ASN__DECODE_STARVED;
+		case 0: break;
+		default:
+			ASN_DEBUG("Non-blank padding (%d bits 0x%02x)",
+				(int)padding, (int)pvalue);
+			UPDRESTOREPD;
+			ASN__DECODE_FAILED;
+		}
+	}
+	if(pd->nboff != pd->nbits) {
+		ASN_DEBUG("Open type %s overhead pd%s old%s", td->name,
+			asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd));
+		if(1) {
+			UPDRESTOREPD;
+			ASN__DECODE_FAILED;
+		} else {
+			arg.unclaimed += pd->nbits - pd->nboff;
+		}
+	}
+
+	/* Adjust pd back so it points to original data */
+	UPDRESTOREPD;
+
+	/* Skip data not consumed by the decoder */
+	if(arg.unclaimed) {
+		ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed);
+		switch(per_skip_bits(pd, arg.unclaimed)) {
+		case -1:
+			ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed);
+			ASN__DECODE_STARVED;
+		case 0:
+			ASN_DEBUG("Got claim of %d", (int)arg.unclaimed);
+			break;
+		default:
+			/* Padding must be blank */
+			ASN_DEBUG("Non-blank unconsumed padding");
+			ASN__DECODE_FAILED;
+		}
+		arg.unclaimed = 0;
+	}
+
+	if(arg.repeat) {
+		ASN_DEBUG("Not consumed the whole thing");
+		rv.code = RC_FAIL;
+		return rv;
+	}
+
+	return rv;
+}
+
+
+asn_dec_rval_t
+uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    return uper_open_type_get_simple(ctx, td, constraints, sptr, pd);
+}
+
+int
+uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) {
+	asn_TYPE_descriptor_t s_td;
+    asn_TYPE_operation_t s_op;
+	asn_dec_rval_t rv;
+
+	s_td.name = "<unknown extension>";
+	s_td.op = &s_op;
+    s_op.uper_decoder = uper_sot_suck;
+
+	rv = uper_open_type_get(ctx, &s_td, 0, 0, pd);
+	if(rv.code != RC_OK)
+		return -1;
+	else
+		return 0;
+}
+
+/*
+ * Internal functions.
+ */
+
+static asn_dec_rval_t
+uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td,
+              const asn_per_constraints_t *constraints, void **sptr,
+              asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+
+	(void)ctx;
+	(void)td;
+	(void)constraints;
+	(void)sptr;
+
+	while(per_get_few_bits(pd, 1) >= 0);
+
+	rv.code = RC_OK;
+	rv.consumed = pd->moved;
+
+	return rv;
+}
+
+static int
+uper_ugot_refill(asn_per_data_t *pd) {
+	uper_ugot_key *arg = pd->refill_key;
+	ssize_t next_chunk_bytes, next_chunk_bits;
+	ssize_t avail;
+
+	asn_per_data_t *oldpd = &arg->oldpd;
+
+	ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld",
+		(long)pd->moved, (long)oldpd->moved);
+
+	/* Advance our position to where pd is */
+	oldpd->buffer = pd->buffer;
+	oldpd->nboff  = pd->nboff;
+	oldpd->nbits -= pd->moved - arg->ot_moved;
+	oldpd->moved += pd->moved - arg->ot_moved;
+	arg->ot_moved = pd->moved;
+
+	if(arg->unclaimed) {
+		/* Refill the container */
+		if(per_get_few_bits(oldpd, 1))
+			return -1;
+		if(oldpd->nboff == 0) {
+			assert(0);
+			return -1;
+		}
+		pd->buffer = oldpd->buffer;
+		pd->nboff = oldpd->nboff - 1;
+		pd->nbits = oldpd->nbits;
+		ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)",
+			(long)pd->moved);
+		return 0;
+	}
+
+	if(!arg->repeat) {
+		ASN_DEBUG("Want more but refill doesn't have it");
+		return -1;
+	}
+
+	next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat);
+	ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld",
+		(long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat);
+	if(next_chunk_bytes < 0) return -1;
+	if(next_chunk_bytes == 0) {
+		pd->refill = 0;	/* No more refills, naturally */
+		assert(!arg->repeat);	/* Implementation guarantee */
+	}
+	next_chunk_bits = next_chunk_bytes << 3;
+	avail = oldpd->nbits - oldpd->nboff;
+	if(avail >= next_chunk_bits) {
+		pd->nbits = oldpd->nboff + next_chunk_bits;
+		arg->unclaimed = 0;
+		ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)",
+			(long)next_chunk_bits, (long)oldpd->moved,
+			(long)oldpd->nboff, (long)oldpd->nbits,
+			(long)(oldpd->nbits - oldpd->nboff));
+	} else {
+		pd->nbits = oldpd->nbits;
+		arg->unclaimed = next_chunk_bits - avail;
+		ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld",
+			(long)avail, (long)next_chunk_bits,
+			(long)arg->unclaimed);
+	}
+	pd->buffer = oldpd->buffer;
+	pd->nboff = oldpd->nboff;
+	ASN_DEBUG("Refilled pd%s old%s",
+		asn_bit_data_string(pd), asn_bit_data_string(oldpd));
+	return 0;
+}
+
+static int
+per_skip_bits(asn_per_data_t *pd, int skip_nbits) {
+	int hasNonZeroBits = 0;
+	while(skip_nbits > 0) {
+		int skip;
+
+		/* per_get_few_bits() is more efficient when nbits <= 24 */
+		if(skip_nbits < 24)
+			skip = skip_nbits;
+		else
+			skip = 24;
+		skip_nbits -= skip;
+
+		switch(per_get_few_bits(pd, skip)) {
+		case -1: return -1;	/* Starving */
+		case 0: continue;	/* Skipped empty space */
+		default: hasNonZeroBits = 1; continue;
+		}
+	}
+	return hasNonZeroBits;
+}
+
+static asn_dec_rval_t
+aper_open_type_get_simple(const asn_codec_ctx_t *ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	asn_dec_rval_t rv;
+	ssize_t chunk_bytes;
+	int repeat;
+	uint8_t *buf = 0;
+	size_t bufLen = 0;
+	size_t bufSize = 0;
+	asn_per_data_t spd;
+	size_t padding;
+
+	ASN__STACK_OVERFLOW_CHECK(ctx);
+
+	ASN_DEBUG("Getting open type %s...", td->name);
+
+	do {
+	        chunk_bytes = aper_get_length(pd, -1, -1, &repeat);
+		if(chunk_bytes < 0) {
+			FREEMEM(buf);
+			ASN__DECODE_STARVED;
+		}
+		if(bufLen + chunk_bytes > bufSize) {
+			void *ptr;
+			bufSize = chunk_bytes + (bufSize << 2);
+			ptr = REALLOC(buf, bufSize);
+			if(!ptr) {
+				FREEMEM(buf);
+				ASN__DECODE_FAILED;
+			}
+			buf = ptr;
+		}
+		if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) {
+			FREEMEM(buf);
+			ASN__DECODE_STARVED;
+		}
+		bufLen += chunk_bytes;
+	} while(repeat);
+
+	ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name,
+		(long)bufLen);
+
+	memset(&spd, 0, sizeof(spd));
+	spd.buffer = buf;
+	spd.nbits = bufLen << 3;
+
+	ASN_DEBUG_INDENT_ADD(+4);
+	rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd);
+	ASN_DEBUG_INDENT_ADD(-4);
+
+	if(rv.code == RC_OK) {
+		/* Check padding validity */
+		padding = spd.nbits - spd.nboff;
+                if (((padding > 0 && padding < 8) ||
+		/* X.691#10.1.3 */
+		(spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) &&
+                    per_get_few_bits(&spd, padding) == 0) {
+			/* Everything is cool */
+			FREEMEM(buf);
+			return rv;
+		}
+		FREEMEM(buf);
+		if(padding >= 8) {
+			ASN_DEBUG("Too large padding %d in open type", (int)padding);
+			ASN__DECODE_FAILED;
+		} else {
+			ASN_DEBUG("No padding");
+		}
+	} else {
+		FREEMEM(buf);
+		/* rv.code could be RC_WMORE, nonsense in this context */
+		rv.code = RC_FAIL; /* Noone would give us more */
+	}
+
+	return rv;
+}
+
+int
+aper_open_type_put(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   const void *sptr, asn_per_outp_t *po) {
+	void *buf;
+	void *bptr;
+	ssize_t size;
+	size_t toGo;
+
+	ASN_DEBUG("Open type put %s ...", td->name);
+
+	size = aper_encode_to_new_buffer(td, constraints, sptr, &buf);
+	if(size <= 0) return -1;
+
+	for(bptr = buf, toGo = size; toGo;) {
+		ssize_t maySave = aper_put_length(po, -1, toGo);
+		if(maySave < 0) break;
+		if(per_put_many_bits(po, bptr, maySave * 8)) break;
+		bptr = (char *)bptr + maySave;
+		toGo -= maySave;
+	}
+
+	FREEMEM(buf);
+	if(toGo) return -1;
+
+	ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)",
+			  td->name, size);
+
+	return 0;
+}
+
+asn_dec_rval_t
+aper_open_type_get(const asn_codec_ctx_t *ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   void **sptr, asn_per_data_t *pd) {
+
+	return aper_open_type_get_simple(ctx, td, constraints, sptr, pd);
+}
+
+int
+aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) {
+	asn_TYPE_descriptor_t s_td;
+	asn_dec_rval_t rv;
+	asn_TYPE_operation_t op_t;
+
+	memset(&op_t, 0, sizeof(op_t));
+	s_td.name = "<unknown extension>";
+	s_td.op = &op_t;
+	s_td.op->aper_decoder = uper_sot_suck;
+
+	rv = aper_open_type_get(ctx, &s_td, 0, 0, pd);
+	if(rv.code != RC_OK)
+		return -1;
+	else
+		return 0;
+}
+
+
diff --git a/asn1c_defs/per_opentype.h b/asn1c_defs/per_opentype.h
new file mode 100644
index 0000000..1493b2d
--- /dev/null
+++ b/asn1c_defs/per_opentype.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2007-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PER_OPENTYPE_H_
+#define	_PER_OPENTYPE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *td,
+                                  const asn_per_constraints_t *constraints,
+                                  void **sptr, asn_per_data_t *pd);
+
+int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx,
+                        asn_per_data_t *pd);
+
+/*
+ * X.691 (2015/08), #11.2
+ * Returns -1 if error is encountered. 0 if all OK.
+ */
+int uper_open_type_put(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po);
+
+asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *td,
+                                  const asn_per_constraints_t *constraints,
+                                  void **sptr, asn_per_data_t *pd);
+
+
+int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd);
+
+int aper_open_type_put(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PER_OPENTYPE_H_ */
diff --git a/asn1c_defs/per_support.c b/asn1c_defs/per_support.c
new file mode 100644
index 0000000..2285677
--- /dev/null
+++ b/asn1c_defs/per_support.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <asn_internal.h>
+#include <per_support.h>
+
+/*
+ * X.691-201508 #10.9 General rules for encoding a length determinant.
+ * Get the optionally constrained length "n" from the stream.
+ */
+ssize_t
+uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound,
+                int *repeat) {
+    ssize_t value;
+
+    *repeat = 0;
+
+    /* #11.9.4.1 Encoding if constrained (according to effective bits) */
+    if(ebits >= 0 && ebits <= 16) {
+        value = per_get_few_bits(pd, ebits);
+        if(value >= 0) value += lower_bound;
+        return value;
+    }
+
+	value = per_get_few_bits(pd, 8);
+    if((value & 0x80) == 0) { /* #11.9.3.6 */
+        return (value & 0x7F);
+    } else if((value & 0x40) == 0) { /* #11.9.3.7 */
+        /* bit 8 ... set to 1 and bit 7 ... set to zero */
+        value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8);
+        return value; /* potential -1 from per_get_few_bits passes through. */
+    } else if(value < 0) {
+        ASN_DEBUG("END of stream reached for PER");
+        return -1;
+    }
+    value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */
+    if(value < 1 || value > 4) {
+        return -1; /* Prohibited by #11.9.3.8 */
+    }
+    *repeat = 1;
+    return (16384 * value);
+}
+
+/*
+ * Get the normally small length "n".
+ * This procedure used to decode length of extensions bit-maps
+ * for SET and SEQUENCE types.
+ */
+ssize_t
+uper_get_nslength(asn_per_data_t *pd) {
+	ssize_t length;
+
+	ASN_DEBUG("Getting normally small length");
+
+	if(per_get_few_bits(pd, 1) == 0) {
+		length = per_get_few_bits(pd, 6) + 1;
+		if(length <= 0) return -1;
+		ASN_DEBUG("l=%d", (int)length);
+		return length;
+	} else {
+		int repeat;
+		length = uper_get_length(pd, -1, 0, &repeat);
+		if(length >= 0 && !repeat) return length;
+		return -1; /* Error, or do not support >16K extensions */
+	}
+}
+
+/*
+ * Get the normally small non-negative whole number.
+ * X.691, #10.6
+ */
+ssize_t
+uper_get_nsnnwn(asn_per_data_t *pd) {
+	ssize_t value;
+
+	value = per_get_few_bits(pd, 7);
+	if(value & 64) {	/* implicit (value < 0) */
+		value &= 63;
+		value <<= 2;
+		value |= per_get_few_bits(pd, 2);
+		if(value & 128)	/* implicit (value < 0) */
+			return -1;
+		if(value == 0)
+			return 0;
+		if(value >= 3)
+			return -1;
+		value = per_get_few_bits(pd, 8 * value);
+		return value;
+	}
+
+	return value;
+}
+
+/*
+ * X.691-11/2008, #11.6
+ * Encoding of a normally small non-negative whole number
+ */
+int
+uper_put_nsnnwn(asn_per_outp_t *po, int n) {
+	int bytes;
+
+	if(n <= 63) {
+		if(n < 0) return -1;
+		return per_put_few_bits(po, n, 7);
+	}
+	if(n < 256)
+		bytes = 1;
+	else if(n < 65536)
+		bytes = 2;
+	else if(n < 256 * 65536)
+		bytes = 3;
+	else
+		return -1;	/* This is not a "normally small" value */
+	if(per_put_few_bits(po, bytes, 8))
+		return -1;
+
+	return per_put_few_bits(po, n, 8 * bytes);
+}
+
+
+/* X.691-2008/11, #11.5.6 -> #11.3 */
+int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) {
+	unsigned long lhalf;    /* Lower half of the number*/
+	long half;
+
+	if(nbits <= 31) {
+		half = per_get_few_bits(pd, nbits);
+		if(half < 0) return -1;
+		*out_value = half;
+		return 0;
+	}
+
+	if((size_t)nbits > 8 * sizeof(*out_value))
+		return -1;  /* RANGE */
+
+	half = per_get_few_bits(pd, 31);
+	if(half < 0) return -1;
+
+	if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31))
+		return -1;
+
+	*out_value = ((unsigned long)half << (nbits - 31)) | lhalf;
+	return 0;
+}
+
+
+/* X.691-2008/11, #11.5.6 -> #11.3 */
+int
+uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v,
+                                    int nbits) {
+    if(nbits <= 31) {
+        return per_put_few_bits(po, v, nbits);
+    } else {
+        /* Put higher portion first, followed by lower 31-bit */
+        if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31))
+            return -1;
+        return per_put_few_bits(po, v, 31);
+    }
+}
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Put the length "n" (or part of it) into the stream.
+ */
+ssize_t
+uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) {
+    int dummy = 0;
+    if(!need_eom) need_eom = &dummy;
+
+    if(length <= 127) {	/* #11.9.3.6 */
+        *need_eom = 0;
+        return per_put_few_bits(po, length, 8)
+            ? -1 : (ssize_t)length;
+    } else if(length < 16384) { /* #10.9.3.7 */
+        *need_eom = 0;
+        return per_put_few_bits(po, length|0x8000, 16)
+            ? -1 : (ssize_t)length;
+    }
+
+    *need_eom = 0 == (length & 16383);
+    length >>= 14;
+    if(length > 4) {
+        *need_eom = 0;
+        length = 4;
+    }
+
+    return per_put_few_bits(po, 0xC0 | length, 8)
+            ? -1 : (ssize_t)(length << 14);
+
+}
+
+
+/*
+ * Put the normally small length "n" into the stream.
+ * This procedure used to encode length of extensions bit-maps
+ * for SET and SEQUENCE types.
+ */
+int
+uper_put_nslength(asn_per_outp_t *po, size_t length) {
+    if(length <= 64) {
+        /* #11.9.3.4 */
+        if(length == 0) return -1;
+        return per_put_few_bits(po, length - 1, 7) ? -1 : 0;
+    } else {
+        int need_eom = 0;
+        if(uper_put_length(po, length, &need_eom) != (ssize_t)length
+           || need_eom) {
+            /* This might happen in case of >16K extensions */
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static int
+per__long_range(long lb, long ub, unsigned long *range_r) {
+    unsigned long bounds_range;
+    if((ub < 0) == (lb < 0)) {
+        bounds_range = ub - lb;
+    } else if(lb < 0) {
+        assert(ub >= 0);
+        bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1));
+    } else {
+        assert(!"Unreachable");
+        return -1;
+    }
+    *range_r = bounds_range;
+    return 0;
+}
+
+int
+per_long_range_rebase(long v, long lb, long ub, unsigned long *output) {
+    unsigned long range;
+
+    assert(lb <= ub);
+
+    if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) {
+        /* Range error. */
+        return -1;
+    }
+
+    /*
+     * Fundamentally what we're doing is returning (v-lb).
+     * However, this triggers undefined behavior when the word width
+     * of signed (v) is the same as the size of unsigned (*output).
+     * In practice, it triggers the UndefinedSanitizer. Therefore we shall
+     * compute the ranges accurately to avoid C's undefined behavior.
+     */
+    if((v < 0) == (lb < 0)) {
+        *output = v-lb;
+        return 0;
+    } else if(v < 0) {
+        unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb;
+        assert(rebased <= range);   /* By construction */
+        *output = rebased;
+        return 0;
+    } else if(lb < 0) {
+        unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v;
+        assert(rebased <= range);   /* By construction */
+        *output = rebased;
+        return 0;
+    } else {
+        assert(!"Unreachable");
+        return -1;
+    }
+}
+
+int
+per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) {
+    unsigned long range;
+
+    if(per__long_range(lb, ub, &range) != 0) {
+        return -1;
+    }
+
+    if(inp > range) {
+        /*
+         * We can encode something in the given number of bits that technically
+         * exceeds the range. This is an avenue for security errors,
+         * so we don't allow that.
+         */
+        return -1;
+    }
+
+    if(inp <= LONG_MAX) {
+        *outp = (long)inp + lb;
+    } else {
+        *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1);
+    }
+
+    return 0;
+}
+
+int32_t
+aper_get_align(asn_per_data_t *pd) {
+
+	if(pd->nboff & 0x7) {
+		ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7));
+		return per_get_few_bits(pd, 8 - (pd->nboff & 0x7));
+	}
+	return 0;
+}
+
+ssize_t
+aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) {
+	ssize_t value;
+
+	*repeat = 0;
+
+	if (range <= 65536 && range >= 0)
+		return aper_get_nsnnwn(pd, range);
+
+	if (aper_get_align(pd) < 0)
+		return -1;
+
+	if(ebits >= 0) return per_get_few_bits(pd, ebits);
+
+	value = per_get_few_bits(pd, 8);
+	if(value < 0) return -1;
+	if((value & 128) == 0)  /* #10.9.3.6 */
+		return (value & 0x7F);
+	if((value & 64) == 0) { /* #10.9.3.7 */
+		value = ((value & 63) << 8) | per_get_few_bits(pd, 8);
+		if(value < 0) return -1;
+		return value;
+	}
+	value &= 63;	/* this is "m" from X.691, #10.9.3.8 */
+	if(value < 1 || value > 4)
+		return -1;
+	*repeat = 1;
+	return (16384 * value);
+}
+
+ssize_t
+aper_get_nslength(asn_per_data_t *pd) {
+	ssize_t length;
+
+	ASN_DEBUG("Getting normally small length");
+
+	if(per_get_few_bits(pd, 1) == 0) {
+		length = per_get_few_bits(pd, 6) + 1;
+		if(length <= 0) return -1;
+		ASN_DEBUG("l=%ld", length);
+		return length;
+	} else {
+		int repeat;
+		length = aper_get_length(pd, -1, -1, &repeat);
+		if(length >= 0 && !repeat) return length;
+		return -1; /* Error, or do not support >16K extensions */
+	}
+}
+
+ssize_t
+aper_get_nsnnwn(asn_per_data_t *pd, int range) {
+	ssize_t value;
+	int bytes = 0;
+
+	ASN_DEBUG("getting nsnnwn with range %d", range);
+
+	if(range <= 255) {
+		int i;
+
+		if (range < 0) return -1;
+		/* 1 -> 8 bits */
+		for (i = 1; i <= 8; i++) {
+			int upper = 1 << i;
+			if (upper >= range)
+				break;
+		}
+		value = per_get_few_bits(pd, i);
+		return value;
+	} else if (range == 256){
+		/* 1 byte */
+		bytes = 1;
+	} else if (range <= 65536) {
+		/* 2 bytes */
+		bytes = 2;
+	} else {
+		return -1;
+	}
+	if (aper_get_align(pd) < 0)
+		return -1;
+	value = per_get_few_bits(pd, 8 * bytes);
+	return value;
+}
+
+int aper_put_align(asn_per_outp_t *po) {
+
+	if(po->nboff & 0x7) {
+		ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7));
+		if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7))))
+			return -1;
+	}
+	return 0;
+}
+
+ssize_t
+aper_put_length(asn_per_outp_t *po, int range, size_t length) {
+
+	ASN_DEBUG("APER put length %zu with range %d", length, range);
+
+	/* 10.9 X.691 Note 2 */
+	if (range <= 65536 && range >= 0)
+		return aper_put_nsnnwn(po, range, length);
+
+	if (aper_put_align(po) < 0)
+		return -1;
+
+	if(length <= 127)	   /* #10.9.3.6 */{
+		return per_put_few_bits(po, length, 8)
+		? -1 : (ssize_t)length;
+	}
+	else if(length < 16384) /* #10.9.3.7 */
+		return per_put_few_bits(po, length|0x8000, 16)
+		? -1 : (ssize_t)length;
+
+	length >>= 14;
+	if(length > 4) length = 4;
+
+	return per_put_few_bits(po, 0xC0 | length, 8)
+	? -1 : (ssize_t)(length << 14);
+}
+
+
+int
+aper_put_nslength(asn_per_outp_t *po, size_t length) {
+
+	if(length <= 64) {
+		/* #10.9.3.4 */
+		if(length == 0) return -1;
+		return per_put_few_bits(po, length-1, 7) ? -1 : 0;
+	} else {
+		if(aper_put_length(po, -1, length) != (ssize_t)length) {
+			/* This might happen in case of >16K extensions */
+			return -1;
+		}
+	}
+
+	return 0;
+}
+
+int
+aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
+	int bytes;
+
+    ASN_DEBUG("aper put nsnnwn %d with range %d", number, range);
+	/* 10.5.7.1 X.691 */
+	if(range < 0) {
+		int i;
+		for (i = 1; ; i++) {
+			int bits = 1 << (8 * i);
+			if (number <= bits)
+				break;
+		}
+		bytes = i;
+		assert(i <= 4);
+	}
+	if(range <= 255) {
+		int i;
+		for (i = 1; i <= 8; i++) {
+			int bits = 1 << i;
+			if (range <= bits)
+				break;
+		}
+		return per_put_few_bits(po, number, i);
+	} else if(range == 256) {
+		bytes = 1;
+	} else if(range <= 65536) {
+		bytes = 2;
+	} else { /* Ranges > 64K */
+		int i;
+		for (i = 1; ; i++) {
+			int bits = 1 << (8 * i);
+			if (range <= bits)
+				break;
+		}
+		assert(i <= 4);
+		bytes = i;
+	}
+	if(aper_put_align(po) < 0) /* Aligning on octet */
+		return -1;
+/* 	if(per_put_few_bits(po, bytes, 8))
+		return -1;
+*/
+    return per_put_few_bits(po, number, 8 * bytes);
+}
diff --git a/asn1c_defs/per_support.h b/asn1c_defs/per_support.h
new file mode 100644
index 0000000..23079c9
--- /dev/null
+++ b/asn1c_defs/per_support.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_PER_SUPPORT_H_
+#define	_PER_SUPPORT_H_
+
+#include <asn_system.h>		/* Platform-specific types */
+#include <asn_bit_data.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Pre-computed PER constraints.
+ */
+typedef struct asn_per_constraint_s {
+	enum asn_per_constraint_flags {
+		APC_UNCONSTRAINED	= 0x0,	/* No PER visible constraints */
+		APC_SEMI_CONSTRAINED	= 0x1,	/* Constrained at "lb" */
+		APC_CONSTRAINED		= 0x2,	/* Fully constrained */
+		APC_EXTENSIBLE		= 0x4	/* May have extension */
+	} flags;
+	int  range_bits;		/* Full number of bits in the range */
+	int  effective_bits;		/* Effective bits */
+	long lower_bound;		/* "lb" value */
+	long upper_bound;		/* "ub" value */
+} asn_per_constraint_t;
+typedef struct asn_per_constraints_s {
+	asn_per_constraint_t value;
+	asn_per_constraint_t size;
+	int (*value2code)(unsigned int value);
+	int (*code2value)(unsigned int code);
+} asn_per_constraints_t;
+
+/* Temporary compatibility layer. Will get removed. */
+typedef struct asn_bit_data_s asn_per_data_t;
+#define per_get_few_bits(data, bits)   asn_get_few_bits(data, bits)
+#define per_get_undo(data, bits)   asn_get_undo(data, bits)
+#define per_get_many_bits(data, dst, align, bits) \
+    asn_get_many_bits(data, dst, align, bits)
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Get the length "n" from the Unaligned PER stream.
+ */
+ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits,
+                        size_t lower_bound, int *repeat);
+
+ssize_t aper_get_length(asn_per_data_t *pd, int range,
+                        int effective_bound_bits, int *repeat);
+
+/*
+ * Get the normally small length "n".
+ */
+ssize_t uper_get_nslength(asn_per_data_t *pd);
+ssize_t aper_get_nslength(asn_per_data_t *pd);
+
+/*
+ * Get the normally small non-negative whole number.
+ */
+ssize_t uper_get_nsnnwn(asn_per_data_t *pd);
+ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range);
+
+/* X.691-2008/11, #11.5.6 */
+int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits);
+
+
+/* Temporary compatibility layer. Will get removed. */
+typedef struct asn_bit_outp_s asn_per_outp_t;
+#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits)
+#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits)
+#define per_put_aligned_flush(out) asn_put_aligned_flush(out)
+
+
+/*
+ * Rebase the given value as an offset into the range specified by the
+ * lower bound (lb) and upper bound (ub).
+ * RETURN VALUES:
+ *  -1: Conversion failed due to range problems.
+ *   0: Conversion was successful.
+ */
+int per_long_range_rebase(long v, long lb, long ub, unsigned long *output);
+/* The inverse operation: restores the value by the offset and its bounds. */
+int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp);
+
+/* X.691-2008/11, #11.5 */
+int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits);
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Put the length "whole_length" to the Unaligned PER stream.
+ * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed.
+ * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block.
+ * This function returns the number of units which may be flushed
+ * in the next units saving iteration.
+ */
+ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length,
+                        int *opt_need_eom);
+
+ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length);
+
+/* Align the current bit position to octet bundary */
+int aper_put_align(asn_per_outp_t *po);
+int32_t aper_get_align(asn_per_data_t *pd);
+
+/*
+ * Put the normally small length "n" to the Unaligned PER stream.
+ * Returns 0 or -1.
+ */
+int uper_put_nslength(asn_per_outp_t *po, size_t length);
+
+int aper_put_nslength(asn_per_outp_t *po, size_t length);
+
+/*
+ * Put the normally small non-negative whole number.
+ */
+int uper_put_nsnnwn(asn_per_outp_t *po, int n);
+
+int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _PER_SUPPORT_H_ */
diff --git a/asn1c_defs/xer_decoder.c b/asn1c_defs/xer_decoder.c
new file mode 100644
index 0000000..5b87703
--- /dev/null
+++ b/asn1c_defs/xer_decoder.c
@@ -0,0 +1,369 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <xer_support.h>		/* XER/XML parsing support */
+
+
+/*
+ * Decode the XER encoding of a given type.
+ */
+asn_dec_rval_t
+xer_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           const asn_TYPE_descriptor_t *td, void **struct_ptr,
+           const void *buffer, size_t size) {
+    asn_codec_ctx_t s_codec_ctx;
+
+	/*
+	 * Stack checker requires that the codec context
+	 * must be allocated on the stack.
+	 */
+	if(opt_codec_ctx) {
+		if(opt_codec_ctx->max_stack_size) {
+			s_codec_ctx = *opt_codec_ctx;
+			opt_codec_ctx = &s_codec_ctx;
+		}
+	} else {
+		/* If context is not given, be security-conscious anyway */
+		memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+		s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+		opt_codec_ctx = &s_codec_ctx;
+	}
+
+	/*
+	 * Invoke type-specific decoder.
+	 */
+	return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size);
+}
+
+
+
+struct xer__cb_arg {
+	pxml_chunk_type_e	chunk_type;
+	size_t			chunk_size;
+	const void		*chunk_buf;
+	int callback_not_invoked;
+};
+
+static int
+xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) {
+	struct xer__cb_arg *arg = (struct xer__cb_arg *)key;
+	arg->chunk_type = type;
+	arg->chunk_size = _chunk_size;
+	arg->chunk_buf = _chunk_data;
+	arg->callback_not_invoked = 0;
+	return -1;	/* Terminate the XML parsing */
+}
+
+/*
+ * Fetch the next token from the XER/XML stream.
+ */
+ssize_t
+xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) {
+	struct xer__cb_arg arg;
+	int new_stateContext = *stateContext;
+	ssize_t ret;
+
+	arg.callback_not_invoked = 1;
+	ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg);
+	if(ret < 0) return -1;
+	if(arg.callback_not_invoked) {
+		assert(ret == 0);	/* No data was consumed */
+        *ch_type = PXER_WMORE;
+		return 0;		/* Try again with more data */
+	} else {
+		assert(arg.chunk_size);
+		assert(arg.chunk_buf == buffer);
+	}
+
+	/*
+	 * Translate the XML chunk types into more convenient ones.
+	 */
+	switch(arg.chunk_type) {
+	case PXML_TEXT:
+		*ch_type = PXER_TEXT;
+		break;
+	case PXML_TAG:
+		*ch_type = PXER_WMORE;
+		return 0;	/* Want more */
+	case PXML_TAG_END:
+		*ch_type = PXER_TAG;
+		break;
+	case PXML_COMMENT:
+	case PXML_COMMENT_END:
+		*ch_type = PXER_COMMENT;
+		break;
+	}
+
+	*stateContext = new_stateContext;
+	return arg.chunk_size;
+}
+
+#define	CSLASH	0x2f	/* '/' */
+#define	LANGLE	0x3c	/* '<' */
+#define	RANGLE	0x3e	/* '>' */
+
+xer_check_tag_e
+xer_check_tag(const void *buf_ptr, int size, const char *need_tag) {
+	const char *buf = (const char *)buf_ptr;
+	const char *end;
+	xer_check_tag_e ct = XCT_OPENING;
+
+	if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) {
+		if(size >= 2)
+			ASN_DEBUG("Broken XML tag: \"%c...%c\"",
+			buf[0], buf[size - 1]);
+		return XCT_BROKEN;
+	}
+
+	/*
+	 * Determine the tag class.
+	 */
+	if(buf[1] == CSLASH) {
+		buf += 2;	/* advance past "</" */
+		size -= 3;	/* strip "</" and ">" */
+		ct = XCT_CLOSING;
+		if(size > 0 && buf[size-1] == CSLASH)
+			return XCT_BROKEN;	/* </abc/> */
+	} else {
+		buf++;		/* advance past "<" */
+		size -= 2;	/* strip "<" and ">" */
+		if(size > 0 && buf[size-1] == CSLASH) {
+			ct = XCT_BOTH;
+			size--;	/* One more, for "/" */
+		}
+	}
+
+	/* Sometimes we don't care about the tag */
+	if(!need_tag || !*need_tag)
+		return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+
+	/*
+	 * Determine the tag name.
+	 */
+	for(end = buf + size; buf < end; buf++, need_tag++) {
+		int b = *buf, n = *need_tag;
+		if(b != n) {
+			if(n == 0) {
+				switch(b) {
+				case 0x09: case 0x0a: case 0x0c: case 0x0d:
+				case 0x20:
+					/* "<abc def/>": whitespace is normal */
+					return ct;
+				}
+			}
+			return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+		}
+		if(b == 0)
+			return XCT_BROKEN;	/* Embedded 0 in buf?! */
+	}
+	if(*need_tag)
+		return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+
+	return ct;
+}
+
+
+#undef	ADVANCE
+#define	ADVANCE(num_bytes)	do {				\
+		size_t num = (num_bytes);			\
+		buf_ptr = ((const char *)buf_ptr) + num;	\
+		size -= num;					\
+		consumed_myself += num;				\
+	} while(0)
+
+#undef	RETURN
+#define	RETURN(_code)	do {					\
+		rval.code = _code;				\
+		rval.consumed = consumed_myself;		\
+		if(rval.code != RC_OK)				\
+			ASN_DEBUG("Failed with %d", rval.code);	\
+		return rval;					\
+	} while(0)
+
+#define	XER_GOT_BODY(chunk_buf, chunk_size, size)	do {	\
+		ssize_t converted_size = body_receiver		\
+			(struct_key, chunk_buf, chunk_size,	\
+				(size_t)chunk_size < size);	\
+		if(converted_size == -1) RETURN(RC_FAIL);	\
+		if(converted_size == 0				\
+			&& size == (size_t)chunk_size)		\
+			RETURN(RC_WMORE);			\
+		chunk_size = converted_size;			\
+	} while(0)
+#define	XER_GOT_EMPTY()	do {					\
+	if(body_receiver(struct_key, 0, 0, size > 0) == -1)	\
+			RETURN(RC_FAIL);			\
+	} while(0)
+
+/*
+ * Generalized function for decoding the primitive values.
+ */
+asn_dec_rval_t
+xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx,
+	asn_struct_ctx_t *ctx,	/* Type decoder context */
+	void *struct_key,
+	const char *xml_tag,	/* Expected XML tag */
+	const void *buf_ptr, size_t size,
+	int (*opt_unexpected_tag_decoder)
+		(void *struct_key, const void *chunk_buf, size_t chunk_size),
+	ssize_t (*body_receiver)
+		(void *struct_key, const void *chunk_buf, size_t chunk_size,
+			int have_more)
+	) {
+
+	asn_dec_rval_t rval;
+	ssize_t consumed_myself = 0;
+
+	(void)opt_codec_ctx;
+
+	/*
+	 * Phases of XER/XML processing:
+	 * Phase 0: Check that the opening tag matches our expectations.
+	 * Phase 1: Processing body and reacting on closing tag.
+	 */
+	if(ctx->phase > 1) RETURN(RC_FAIL);
+	for(;;) {
+		pxer_chunk_type_e ch_type;	/* XER chunk type */
+		ssize_t ch_size;		/* Chunk size */
+		xer_check_tag_e tcv;		/* Tag check value */
+
+		/*
+		 * Get the next part of the XML stream.
+		 */
+		ch_size = xer_next_token(&ctx->context, buf_ptr, size,
+			&ch_type);
+		if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+			switch(ch_type) {
+			case PXER_WMORE:
+                RETURN(RC_WMORE);
+			case PXER_COMMENT:		/* Got XML comment */
+				ADVANCE(ch_size);	/* Skip silently */
+				continue;
+			case PXER_TEXT:
+				if(ctx->phase == 0) {
+					/*
+					 * We have to ignore whitespace here,
+					 * but in order to be forward compatible
+					 * with EXTENDED-XER (EMBED-VALUES, #25)
+					 * any text is just ignored here.
+					 */
+				} else {
+					XER_GOT_BODY(buf_ptr, ch_size, size);
+				}
+				ADVANCE(ch_size);
+				continue;
+			case PXER_TAG:
+				break;	/* Check the rest down there */
+			}
+		}
+
+		assert(ch_type == PXER_TAG && size);
+
+		tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+		/*
+		 * Phase 0:
+		 * 	Expecting the opening tag
+		 * 	for the type being processed.
+		 * Phase 1:
+		 * 	Waiting for the closing XML tag.
+		 */
+		switch(tcv) {
+		case XCT_BOTH:
+			if(ctx->phase) break;
+			/* Finished decoding of an empty element */
+			XER_GOT_EMPTY();
+			ADVANCE(ch_size);
+			ctx->phase = 2;	/* Phase out */
+			RETURN(RC_OK);
+		case XCT_OPENING:
+			if(ctx->phase) break;
+			ADVANCE(ch_size);
+			ctx->phase = 1;	/* Processing body phase */
+			continue;
+		case XCT_CLOSING:
+			if(!ctx->phase) break;
+			ADVANCE(ch_size);
+			ctx->phase = 2;	/* Phase out */
+			RETURN(RC_OK);
+		case XCT_UNKNOWN_BO:
+			/*
+			 * Certain tags in the body may be expected.
+			 */
+			if(opt_unexpected_tag_decoder
+			&& opt_unexpected_tag_decoder(struct_key,
+					buf_ptr, ch_size) >= 0) {
+				/* Tag's processed fine */
+				ADVANCE(ch_size);
+				if(!ctx->phase) {
+					/* We are not expecting
+					 * the closing tag anymore. */
+					ctx->phase = 2;	/* Phase out */
+					RETURN(RC_OK);
+				}
+				continue;
+			}
+			/* Fall through */
+		default:
+			break;		/* Unexpected tag */
+		}
+
+		ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag);
+		break;	/* Dark and mysterious things have just happened */
+	}
+
+	RETURN(RC_FAIL);
+}
+
+
+size_t
+xer_whitespace_span(const void *chunk_buf, size_t chunk_size) {
+	const char *p = (const char *)chunk_buf;
+	const char *pend = p + chunk_size;
+
+	for(; p < pend; p++) {
+		switch(*p) {
+		/* X.693, #8.1.4
+		 * HORISONTAL TAB (9)
+		 * LINE FEED (10) 
+		 * CARRIAGE RETURN (13) 
+		 * SPACE (32)
+		 */
+		case 0x09: case 0x0a: case 0x0d: case 0x20:
+			continue;
+		default:
+			break;
+		}
+		break;
+	}
+	return (p - (const char *)chunk_buf);
+}
+
+/*
+ * This is a vastly simplified, non-validating XML tree skipper.
+ */
+int
+xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) {
+	assert(*depth > 0);
+	switch(tcv) {
+	case XCT_BOTH:
+	case XCT_UNKNOWN_BO:
+		/* These negate each other. */
+		return 0;
+	case XCT_OPENING:
+	case XCT_UNKNOWN_OP:
+		++(*depth);
+		return 0;
+	case XCT_CLOSING:
+	case XCT_UNKNOWN_CL:
+		if(--(*depth) == 0)
+			return (tcv == XCT_CLOSING) ? 2 : 1;
+		return 0;
+	default:
+		return -1;
+	}
+}
diff --git a/asn1c_defs/xer_decoder.h b/asn1c_defs/xer_decoder.h
new file mode 100644
index 0000000..b951c41
--- /dev/null
+++ b/asn1c_defs/xer_decoder.h
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_XER_DECODER_H_
+#define	_XER_DECODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/*
+ * The XER decoder of any ASN.1 type. May be invoked by the application.
+ * Decodes CANONICAL-XER and BASIC-XER.
+ */
+asn_dec_rval_t xer_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of data buffer */
+);
+
+/*
+ * Type of the type-specific XER decoder function.
+ */
+typedef asn_dec_rval_t(xer_type_decoder_f)(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr,
+    const char *opt_mname, /* Member name */
+    const void *buf_ptr, size_t size);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Generalized function for decoding the primitive values.
+ * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8
+ * and others. This function should not be used by applications, as its API
+ * is subject to changes.
+ */
+asn_dec_rval_t xer_decode_general(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    asn_struct_ctx_t *ctx, /* Type decoder context */
+    void *struct_key,      /* Treated as opaque pointer */
+    const char *xml_tag,   /* Expected XML tag name */
+    const void *buf_ptr, size_t size,
+    int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf,
+                                      size_t chunk_size),
+    ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf,
+                             size_t chunk_size, int have_more));
+
+
+/*
+ * Fetch the next XER (XML) token from the stream.
+ * The function returns the number of bytes occupied by the chunk type,
+ * returned in the _ch_type. The _ch_type is only set (and valid) when
+ * the return value is >= 0.
+ */
+  typedef enum pxer_chunk_type {
+	PXER_WMORE,     /* Chunk type is not clear, more data expected. */
+	PXER_TAG,	    /* Complete XER tag */
+	PXER_TEXT,	    /* Plain text between XER tags */
+	PXER_COMMENT	/* A comment, may be part of */
+  } pxer_chunk_type_e;
+ssize_t xer_next_token(int *stateContext,
+	const void *buffer, size_t size, pxer_chunk_type_e *_ch_type);
+
+/*
+ * This function checks the buffer against the tag name is expected to occur.
+ */
+  typedef enum xer_check_tag {
+	XCT_BROKEN	= 0,	/* The tag is broken */
+	XCT_OPENING	= 1,	/* This is the <opening> tag */
+	XCT_CLOSING	= 2,	/* This is the </closing> tag */
+	XCT_BOTH	= 3,	/* This is the <modified/> tag */
+	XCT__UNK__MASK	= 4,	/* Mask of everything unexpected */
+	XCT_UNKNOWN_OP	= 5,	/* Unexpected <opening> tag */
+	XCT_UNKNOWN_CL	= 6,	/* Unexpected </closing> tag */
+	XCT_UNKNOWN_BO	= 7	/* Unexpected <modified/> tag */
+  } xer_check_tag_e;
+xer_check_tag_e xer_check_tag(const void *buf_ptr, int size,
+		const char *need_tag);
+
+/*
+ * Get the number of bytes consisting entirely of XER whitespace characters.
+ * RETURN VALUES:
+ * >=0:	Number of whitespace characters in the string.
+ */
+size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size);
+
+/*
+ * Skip the series of anticipated extensions.
+ */
+int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _XER_DECODER_H_ */
diff --git a/asn1c_defs/xer_encoder.c b/asn1c_defs/xer_encoder.c
new file mode 100644
index 0000000..4177ede
--- /dev/null
+++ b/asn1c_defs/xer_encoder.c
@@ -0,0 +1,237 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <stdio.h>
+#include <errno.h>
+
+/*
+ * The XER encoder of any type. May be invoked by the application.
+ */
+asn_enc_rval_t
+xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr,
+           enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb,
+           void *app_key) {
+    asn_enc_rval_t er = {0, 0, 0};
+	asn_enc_rval_t tmper;
+	const char *mname;
+	size_t mlen;
+	int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2;
+
+	if(!td || !sptr) goto cb_failed;
+
+	mname = td->xml_tag;
+	mlen = strlen(mname);
+
+	ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+	tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key);
+	if(tmper.encoded == -1) return tmper;
+	er.encoded += tmper.encoded;
+
+	ASN__CALLBACK3("</", 2, mname, mlen, ">\n", xcan);
+
+	ASN__ENCODED_OK(er);
+cb_failed:
+	ASN__ENCODE_FAILED;
+}
+
+/*
+ * This is a helper function for xer_fprint, which directs all incoming data
+ * into the provided file descriptor.
+ */
+static int
+xer__print2fp(const void *buffer, size_t size, void *app_key) {
+	FILE *stream = (FILE *)app_key;
+
+	if(fwrite(buffer, 1, size, stream) != size)
+		return -1;
+
+	return 0;
+}
+
+int
+xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) {
+	asn_enc_rval_t er = {0,0,0};
+
+	if(!stream) stream = stdout;
+	if(!td || !sptr)
+		return -1;
+
+	er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream);
+	if(er.encoded == -1)
+		return -1;
+
+	return fflush(stream);
+}
+
+struct xer_buffer {
+    char *buffer;
+    size_t buffer_size;
+    size_t allocated_size;
+};
+
+static int
+xer__buffer_append(const void *buffer, size_t size, void *app_key) {
+    struct xer_buffer *xb = app_key;
+
+    while(xb->buffer_size + size + 1 > xb->allocated_size) {
+        size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64);
+        char *new_buf = MALLOC(new_size);
+        if(!new_buf) return -1;
+        if (xb->buffer) {
+            memcpy(new_buf, xb->buffer, xb->buffer_size);
+        }
+        FREEMEM(xb->buffer);
+        xb->buffer = new_buf;
+        xb->allocated_size = new_size;
+    }
+
+    memcpy(xb->buffer + xb->buffer_size, buffer, size);
+    xb->buffer_size += size;
+    xb->buffer[xb->buffer_size] = '\0';
+    return 0;
+}
+
+enum xer_equivalence_e
+xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1,
+               const void *struct2, FILE *opt_debug_stream) {
+    struct xer_buffer xb1 = {0, 0, 0};
+    struct xer_buffer xb2 = {0, 0, 0};
+    asn_enc_rval_t e1, e2;
+    asn_dec_rval_t rval;
+    void *sptr = NULL;
+
+    if(!td || !struct1 || !struct2) {
+        if(opt_debug_stream) {
+            if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n");
+            if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n");
+            if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n");
+        }
+        return XEQ_FAILURE;
+    }
+
+    e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1);
+    if(e1.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of %s failed\n", td->name);
+        }
+        FREEMEM(xb1.buffer);
+        return XEQ_ENCODE1_FAILED;
+    }
+
+    e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2);
+    if(e2.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of %s failed\n", td->name);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ENCODE1_FAILED;
+    }
+
+    if(xb1.buffer_size != xb2.buffer_size
+       || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structures XER-encoded into different byte streams:\n=== "
+                    "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n",
+                    xb1.buffer, xb2.buffer);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_DIFFERENT;
+    } else {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Both structures encoded into the same XER byte stream "
+                    "of size %" ASN_PRI_SIZE ":\n%s",
+                    xb1.buffer_size, xb1.buffer);
+        }
+    }
+
+    rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer,
+               xb1.buffer_size);
+    switch(rval.code) {
+    case RC_OK:
+        break;
+    case RC_WMORE:
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structure %s XER decode unexpectedly requires "
+                    "more data:\n%s\n",
+                    td->name, xb1.buffer);
+        }
+        /* Fall through */
+    case RC_FAIL:
+    default:
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structure %s XER decoding resulted in failure.\n",
+                    td->name);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_DECODE_FAILED;
+    }
+
+    if(rval.consumed != xb1.buffer_size
+       && ((rval.consumed > xb1.buffer_size)
+           || xer_whitespace_span(xb1.buffer + rval.consumed,
+                                  xb1.buffer_size - rval.consumed)
+                  != (xb1.buffer_size - rval.consumed))) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than "
+                    "encoded (%" ASN_PRI_SIZE ")\n",
+                    td->name, rval.consumed, xb1.buffer_size);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+    /*
+     * Reuse xb2 to encode newly decoded structure.
+     */
+    FREEMEM(xb2.buffer);
+    memset(&xb2, 0, sizeof(xb2));
+
+    e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2);
+    if(e2.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n",
+                    td->name);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+    ASN_STRUCT_FREE(*td, sptr);
+    sptr = 0;
+
+    if(xb1.buffer_size != xb2.buffer_size
+       || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "XER Encoding of round-trip decode of %s resulted in "
+                    "different byte stream:\n"
+                    "=== Original ===\n%s\n"
+                    "=== Round-tripped ===\n%s\n",
+                    xb1.buffer, xb2.buffer, td->name);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+	FREEMEM(xb1.buffer);
+	FREEMEM(xb2.buffer);
+	return XEQ_SUCCESS;
+}
+
diff --git a/asn1c_defs/xer_encoder.h b/asn1c_defs/xer_encoder.h
new file mode 100644
index 0000000..9d75922
--- /dev/null
+++ b/asn1c_defs/xer_encoder.h
@@ -0,0 +1,83 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_XER_ENCODER_H_
+#define	_XER_ENCODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;	/* Forward declaration */
+
+/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */
+enum xer_encoder_flags_e {
+	/* Mode of encoding */
+	XER_F_BASIC	= 0x01,	/* BASIC-XER (pretty-printing) */
+	XER_F_CANONICAL	= 0x02	/* Canonical XER (strict rules) */
+};
+
+/*
+ * The XER encoder of any type. May be invoked by the application.
+ * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags).
+ */
+asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          enum xer_encoder_flags_e xer_flags,
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/*
+ * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC)
+ * output into the chosen file pointer.
+ * RETURN VALUES:
+ * 	 0: The structure is printed.
+ * 	-1: Problem printing the structure.
+ * WARNING: No sensible errno value is returned.
+ */
+int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td,
+               const void *struct_ptr);
+
+/*
+ * A helper function that uses XER encoding/decoding to verify that:
+ * - Both structures encode into the same BASIC XER.
+ * - Both resulting XER byte streams can be decoded back.
+ * - Both decoded structures encode into the same BASIC XER (round-trip).
+ * All of this verifies equivalence between structures and a round-trip.
+ * ARGUMENTS:
+ *  (opt_debug_stream)  - If specified, prints ongoing details.
+ */
+enum xer_equivalence_e {
+    XEQ_SUCCESS,          /* The only completely positive return value */
+    XEQ_FAILURE,          /* General failure */
+    XEQ_ENCODE1_FAILED,   /* First sructure XER encoding failed */
+    XEQ_ENCODE2_FAILED,   /* Second structure XER encoding failed */
+    XEQ_DIFFERENT,        /* Structures encoded into different XER */
+    XEQ_DECODE_FAILED,    /* Decode of the XER data failed */
+    XEQ_ROUND_TRIP_FAILED /* Bad round-trip */
+};
+enum xer_equivalence_e xer_equivalent(
+    const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1,
+    const void *struct2, FILE *opt_debug_stream);
+
+/*
+ * Type of the generic XER encoder.
+ */
+typedef asn_enc_rval_t(xer_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    int ilevel,             /* Level of indentation */
+    enum xer_encoder_flags_e xer_flags,
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _XER_ENCODER_H_ */
diff --git a/asn1c_defs/xer_support.c b/asn1c_defs/xer_support.c
new file mode 100644
index 0000000..36b4bfb
--- /dev/null
+++ b/asn1c_defs/xer_support.c
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com.
+ * Copyright (c) 2003, 2004, 2005 Lev Walkin <vlm@lionet.info>.
+ * 	All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <xer_support.h>
+
+/* Parser states */
+typedef enum {
+	ST_TEXT,
+	ST_TAG_START,
+	ST_TAG_BODY,
+	ST_TAG_QUOTE_WAIT,
+	ST_TAG_QUOTED_STRING,
+	ST_TAG_UNQUOTED_STRING,
+	ST_COMMENT_WAIT_DASH1,	/* "<!--"[1] */
+	ST_COMMENT_WAIT_DASH2,	/* "<!--"[2] */
+	ST_COMMENT,
+	ST_COMMENT_CLO_DASH2,	/* "-->"[0] */
+	ST_COMMENT_CLO_RT	/* "-->"[1] */
+} pstate_e;
+
+static const int
+_charclass[256] = {
+	0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0,
+	0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+	1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+	2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0,	/* 01234567 89       */
+	0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,	/*  ABCDEFG HIJKLMNO */
+	3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0,	/* PQRSTUVW XYZ      */
+	0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,	/*  abcdefg hijklmno */
+	3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0	/* pqrstuvw xyz      */
+};
+#define WHITESPACE(c)	(_charclass[(unsigned char)(c)] == 1)
+#define ALNUM(c)	(_charclass[(unsigned char)(c)] >= 2)
+#define ALPHA(c)	(_charclass[(unsigned char)(c)] == 3)
+
+/* Aliases for characters, ASCII/UTF-8 */
+#define	EXCLAM	0x21	/* '!' */
+#define	CQUOTE	0x22	/* '"' */
+#define	CDASH	0x2d	/* '-' */
+#define	CSLASH	0x2f	/* '/' */
+#define	LANGLE	0x3c	/* '<' */
+#define	CEQUAL	0x3d	/* '=' */
+#define	RANGLE	0x3e	/* '>' */
+#define	CQUEST	0x3f	/* '?' */
+
+/* Invoke token callback */
+#define	TOKEN_CB_CALL(type, _ns, _current_too, _final) do {	\
+		int _ret;					\
+		pstate_e ns  = _ns;				\
+		ssize_t _sz = (p - chunk_start) + _current_too;	\
+		if (!_sz) {					\
+			/* Shortcut */				\
+			state = _ns;				\
+			break;					\
+		}						\
+		_ret = cb(type, chunk_start, _sz, key);		\
+		if(_ret < _sz) {				\
+			if(_current_too && _ret == -1)		\
+				state = ns;			\
+			goto finish;				\
+		}						\
+		chunk_start = p + _current_too;			\
+		state = ns;					\
+	} while(0)
+
+#define TOKEN_CB(_type, _ns, _current_too)			\
+	TOKEN_CB_CALL(_type, _ns, _current_too, 0)
+
+#define PXML_TAG_FINAL_CHUNK_TYPE      PXML_TAG_END
+#define PXML_COMMENT_FINAL_CHUNK_TYPE  PXML_COMMENT_END
+
+#define TOKEN_CB_FINAL(_type, _ns, _current_too)		\
+	TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1)
+
+/*
+ * Parser itself
+ */
+ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) {
+	pstate_e state = (pstate_e)*stateContext;
+	const char *chunk_start = (const char *)xmlbuf;
+	const char *p = chunk_start;
+	const char *end = p + size;
+
+	for(; p < end; p++) {
+	  int C = *(const unsigned char *)p;
+	  switch(state) {
+	  case ST_TEXT:
+		/*
+		 * Initial state: we're in the middle of some text,
+		 * or just have started.
+		 */
+		if (C == LANGLE) 
+			/* We're now in the tag, probably */
+			TOKEN_CB(PXML_TEXT, ST_TAG_START, 0);
+		break;
+	  case ST_TAG_START:
+		if (ALPHA(C) || (C == CSLASH))
+			state = ST_TAG_BODY;
+		else if (C == EXCLAM)
+			state = ST_COMMENT_WAIT_DASH1;
+		else 
+			/*
+			 * Not characters and not whitespace.
+			 * Must be something like "3 < 4".
+			 */
+			TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */
+		break;
+	  case ST_TAG_BODY:
+		switch(C) {
+		case RANGLE:
+			/* End of the tag */
+			TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+			break;
+		case LANGLE:
+			/*
+			 * The previous tag wasn't completed, but still
+			 * recognized as valid. (Mozilla-compatible)
+			 */
+			TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0);	
+			break;
+		case CEQUAL:
+			state = ST_TAG_QUOTE_WAIT;
+			break;
+		}
+		break;
+	  case ST_TAG_QUOTE_WAIT:
+		/*
+		 * State after the equal sign ("=") in the tag.
+		 */
+		switch(C) {
+		case CQUOTE:
+			state = ST_TAG_QUOTED_STRING;
+			break;
+		case RANGLE:
+			/* End of the tag */
+			TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+			break;
+		default:
+			if(!WHITESPACE(C))
+				/* Unquoted string value */
+				state = ST_TAG_UNQUOTED_STRING;
+		}
+		break;
+	  case ST_TAG_QUOTED_STRING:
+		/*
+		 * Tag attribute's string value in quotes.
+		 */
+		if(C == CQUOTE) {
+			/* Return back to the tag state */
+			state = ST_TAG_BODY;
+		}
+		break;
+	  case ST_TAG_UNQUOTED_STRING:
+		if(C == RANGLE) {
+			/* End of the tag */
+			TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+		} else if(WHITESPACE(C)) {
+			/* Return back to the tag state */
+			state = ST_TAG_BODY;
+		}
+		break;
+	  case ST_COMMENT_WAIT_DASH1:
+		if(C == CDASH) {
+			state = ST_COMMENT_WAIT_DASH2;
+		} else {
+			/* Some ordinary tag. */
+			state = ST_TAG_BODY;
+		}
+		break;
+	  case ST_COMMENT_WAIT_DASH2:
+		if(C == CDASH) {
+			/* Seen "<--" */
+			state = ST_COMMENT;
+		} else {
+			/* Some ordinary tag */
+			state = ST_TAG_BODY;
+		}
+		break;
+	  case ST_COMMENT:
+		if(C == CDASH) {
+			state = ST_COMMENT_CLO_DASH2;
+		}
+		break;
+	  case ST_COMMENT_CLO_DASH2:
+		if(C == CDASH) {
+			state = ST_COMMENT_CLO_RT;
+		} else {
+			/* This is not an end of a comment */
+			state = ST_COMMENT;
+		}
+		break;
+	  case ST_COMMENT_CLO_RT:
+		if(C == RANGLE) {
+			TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1);
+		} else if(C == CDASH) {
+			/* Maintain current state, still waiting for '>' */
+		} else {
+			state = ST_COMMENT;
+		}
+		break;
+	  } /* switch(*ptr) */
+	} /* for() */
+
+	/*
+	 * Flush the partially processed chunk, state permitting.
+	 */
+	if(p - chunk_start) {
+		switch (state) {
+		case ST_COMMENT:
+			TOKEN_CB(PXML_COMMENT, state, 0);
+			break;
+		case ST_TEXT:
+			TOKEN_CB(PXML_TEXT, state, 0);
+			break;
+		default: break;	/* a no-op */
+		}
+	}
+
+finish:
+	*stateContext = (int)state;
+	return chunk_start - (const char *)xmlbuf;
+}
+
diff --git a/asn1c_defs/xer_support.h b/asn1c_defs/xer_support.h
new file mode 100644
index 0000000..c3a36e7
--- /dev/null
+++ b/asn1c_defs/xer_support.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com.
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef	_XER_SUPPORT_H_
+#define	_XER_SUPPORT_H_
+
+#include <asn_system.h>		/* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Types of data transferred to the application.
+ */
+typedef enum {
+	PXML_TEXT,	/* Plain text between XML tags. */
+	PXML_TAG,	/* A tag, starting with '<'. */
+	PXML_COMMENT,	/* An XML comment, including "<!--" and "-->". */
+	/* 
+	 * The following chunk types are reported if the chunk
+	 * terminates the specified XML element.
+	 */
+	PXML_TAG_END,		/* Tag ended */
+	PXML_COMMENT_END	/* Comment ended */
+} pxml_chunk_type_e;
+
+/*
+ * Callback function that is called by the parser when parsed data is
+ * available. The _opaque is the pointer to a field containing opaque user 
+ * data specified in pxml_create() call. The chunk type is _type and the text 
+ * data is the piece of buffer identified by _bufid (as supplied to
+ * pxml_feed() call) starting at offset _offset and of _size bytes size. 
+ * The chunk is NOT '\0'-terminated.
+ */
+typedef int (pxml_callback_f)(pxml_chunk_type_e _type,
+	const void *_chunk_data, size_t _chunk_size, void *_key);
+
+/*
+ * Parse the given buffer as it were a chunk of XML data.
+ * Invoke the specified callback each time the meaninful data is found.
+ * This function returns number of bytes consumed from the bufer.
+ * It will always be lesser than or equal to the specified _size.
+ * The next invocation of this function must account the difference.
+ */
+ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size,
+	pxml_callback_f *cb, void *_key);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _XER_SUPPORT_H_ */
